eine Formel für verschiedene Geraden



  • Hallo,
    ich habe einen Volumstrom der Abhängig von der Zeit ist

    also z.B. v.strom = zeit*3 +2

    ab ein gewissen Zeitpunkt (z.B. ab 8 std.) wird dieser v.strom konstant und quasi unabhängig von der Zeit

    sprich

    ab 8std -> v.strom = 3

    Kann man das nur mit ner Bedingung verknüpfen oder gibts in der Mathematik auch noch andere Möglichkeiten.

    Toll wäre es, wenn ich es in eine Gleichung hinbekommen würde.


  • Mod

    Gibt es da eine Übergangsphase oder knickt die Gerade einfach ab? Knicke sind eigentlich nur über direkte oder verkappte Bedingungen beschreibbar.



  • frankthetank schrieb:

    Toll wäre es, wenn ich es in eine Gleichung hinbekommen würde.

    kommt d'rauf an, was Du unter 'einer' Gleichung verstehst. Rein mathematisch lässt sich das wohl so schreiben:

    $v= \lbrace \begin{array}{ccc} 3t+2 & falls & t < \frac{1}{3} \\ 3 & sonst & \end{array} $

    wobei ich hier unterstelle, dass die Einheit von 'zeit' Tage ist. 8h sind 1/3Tag.

    In C++ ginge es auch in 'einer' Gleichung:

    v = (t>= 1./3)? 3.: 3*t + 2;
    

    Falls Du es nicht abknicken lassen willst, sondern einen sanften Übergang suchst, so kannst Du es über eine entsprechende Funktion annähern. Dazu eignet sich die arctan-Funktion oder eine rationale Funktion - z.B. nähert folgende Funktion den Übergang von 0 nach 1 an. Die Anfangssteigung ist immer =1:

    y = \frac{2}{1 + (\frac{n}{2x + n})^n} - 1$$ Bem.: x>=0, n>0 mit wachsendem n nähert sich die Kurve immer mehr einem Knick an. Anbei ein kleines Demoprogramm mit unterschiedlichen Werten für n (2 und 32): ```cpp #include #include // std::pow // -- realisiert den Übergang von 0 bis 1 template< unsigned N, typename T > T uebergang( T x ) { if( x < T(0) ) return -uebergang< N >( -x ); return 2/(1 + std::pow( N/(2*x + N), int(N) )) - 1; } template< unsigned N > double v_strom( double zeit ) { return uebergang< N >( 3*zeit ) + 2.; } int main() { using namespace std; cout.precision( 4 ); cout << fixed; for( double t = 0.0; t <= 1.5; t += 0.125 ) cout << t << " " << v_strom<2>( t ) << " " << v_strom<32>( t ) << endl; return 0; } ``` Gruß Werner

Anmelden zum Antworten