eine Formel für verschiedene Geraden
-
Hallo,
ich habe einen Volumstrom der Abhängig von der Zeit istalso 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.
-
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