2017-12-22 4 views
1

Ich bin ziemlich neu in MATLAB und ich versuche, zwei Funktionen mit der ode45() Funktion zu integrieren. Mein Code:Ode45 in MATLAB

[w,x] = ode45(@(w,x) (TSII - TFII) * w , [0 2], 0); 

Wo TSII und TFII Spaltenvektoren 1x151 die Werte meiner beiden Funktionen enthält. w hat noch keinen Wert, aber ich habe versucht, es zu einem Spaltenvektor voller Nullen Länge 1x151 machen und das hat mein Problem nicht gelöst.

bekomme ich folgende Fehlermeldung:

@(W,X)(TSII-TFII)*W returns a vector of length 151, but the length of initial conditions vector is 1.

Der von @(W,X)(TSII-TFII)*W zurückgegebene Vektor und der Vektor der Anfangsbedingungen müssen die gleiche Anzahl an Elementen haben.

Kann der Ausgangsbedingungsvektor auf die gleiche Länge wie TSII und TFII geändert werden?

Oder sollte ich eine Schleife mit ode45() innen verwenden, um die 151 Werte zu machen?

Antwort

0

ich ein bisschen bin zu raten, aber es versuchen:

ode45() würde Ihre anonyme Funktion @(w,x) wie x den Funktionswert an der Position zu interpolieren. Wenn TSII und TFII während des Schreibens Tabellenfunktionswerte sind, wird das erwartete Ergebnis nicht zurückgegeben.

Sie sollten etwas wie [interp1][1](TSII,x) anstelle von TSII verwenden. Ihre Funktion sollte wie folgt aussehen:

@(w,x) (interp1(TSII,x) - interp1(TFII,x)) .* w 

Auch die .* für das Element weise Multiplikation beachten.

+0

Siehe diese Frage/Antwort für mehr: https://stackoverflow.com/q/19732442/2278029 – horchler

Verwandte Themen