2016-04-26 11 views
0

Ich versuche, die Differentialgleichungen in Matlab richtig einzugeben, damit ich ode45 lösen kann, aber ich kann meinen Code nicht zum Funktionieren bringen. Dies ist Code, den ich eingegeben haben:Wie löst man sechs Differentialgleichungen mit ODE 45?

function ydot=Untitledrt(z,y) 
ydot = zeros(6,1); 
%y(1)=A 
%y(2)=B 
%y(3)=C 
%y(4)=D 
%y(5)=P 
%y(6)=T 
m1 = 6; 
m2 = 9; 
m3 = 5; 
k1 = 6; 
k2 = 7; 
k3 = 4; 
k4 = 1; 
c1 = 1; 
c2 = 0.2; 
c3 = 0.1; 
c4 = 2; 
F1 = 3; 
F2 = 9; 
F3 = 12; 
ydot(1)=y(2) 
ydot(2)=((-((k1+k2)./m1)).*y(1))-(((c1+c2)./m1).*y(2))+((k2./m1).*y(3))+ ((c2./m1).*y(4))+(F1./m1) 
ydot(3)=y(4) 
ydot(4)=((k2./m2).*y(1))+((c2./m2).*y(2))-(((k2+k3)./m2).*y(3))-(((c2+c3).*m2).*y(4))+((k3/m2).*y(5))+((c3./m2).*y(6))+(F2./m2) 
ydot(5)=y(6) 
ydot(6)=((k2./m3).*y(3))+((c3./m3).*y(4))-(((k3+k4)./m3).*y(5))-(((c3+c4)./m3).*y(6))+(F3./m3) 

MATLAB Rückkehr wird folgende Fehlermeldung hält:

Not enough input arguments. 

Error in Untitledrt (line 24) 
ydot(1)=y(2) 

und ich weiß, dass dies geschieht, weil ich nicht der y Begriffe definiert haben. Allerdings hat auch jeder andere Code, den ich gesehen habe, diese Begriffe nicht definiert. Gibt es etwas, das mir fehlt, oder eine Möglichkeit, den Code zum Laufen zu bringen, ohne diese Begriffe zu definieren? Bitte hilf mir! Vielen Dank im Voraus.

+2

Wie rufen Sie ode45? Ihre Funktion 'y' muss ein Vektor sein –

+0

Beachten Sie auch, dass' z' hier das 't' der ODE wäre, die Sie nicht verwenden (was bedeutet, dass Ihr System autonom ist). In diesem Fall sollten Sie in der Lage sein, es durch ~ zu ersetzen, d. H. 'Function ydot = Untitledrt (~, y)', was in vielen Fällen MATLAB erkennt und hilft, den Code zu beschleunigen, indem diese Variable nicht beim Ausführen des Aufrufs instantiiert wird. Vielleicht kein Problem, aber eine gute Angewohnheit, sich zu entwickeln. –

Antwort

0

Zuerst erstellen Sie eine M-Datei, die die rechte Seite des Systems f(t,y) für eine beliebige t, y1, y2, y3, y4, y5, y6 auswertet und benennen Sie als Sie Untitledrt.m.

function ydot=Untitledrt(t,y) 
ydot = zeros(6,1); 
m1 = 6; 
m2 = 9; 
m3 = 5; 
k1 = 6; 
k2 = 7; 
k3 = 4; 
k4 = 1; 
c1 = 1; 
c2 = 0.2; 
c3 = 0.1; 
c4 = 2; 
F1 = 3; 
F2 = 9; 
F3 = 12; 
ydot(1)=y(2) 
ydot(2)=((-((k1+k2)./m1)).*y(1))-(((c1+c2)./m1).*y(2))+((k2./m1).*y(3))+ ((c2./m1).*y(4))+(F1./m1) 
ydot(3)=y(4) 
ydot(4)=((k2./m2).*y(1))+((c2./m2).*y(2))-(((k2+k3)./m2).*y(3))-(((c2+c3).*m2).*y(4))+((k3/m2).*y(5))+((c3./m2).*y(6))+(F2./m2) 
ydot(5)=y(6) 
ydot(6)=((k2./m3).*y(3))+((c3./m3).*y(4))-(((k3+k4)./m3).*y(5))-(((c3+c4)./m3).*y(6))+(F3./m3) 

Jetzt für Zeile der folgenden Befehle in Matlab Fensterzeile eintippen oder in einer neuen Skriptdatei einfügen

[t,Y]=ode45('Untitledrt',[0 10],[1;-1;0;0;0;0]); 

plot(t,Y(:,1),'+',t,Y(:,2),'x',t,Y(:,3),'o',t,Y(:,4),'o',t,Y(:,5),'o',t,Y(:,6),'o') 

Plot of the six dependent variables