2016-04-26 2 views
0

J'essaie d'entrer correctement les équations différentielles dans Matlab afin que je puisse avoir ode45 les résoudre mais je ne peux pas faire fonctionner mon code. Ceci est du code que je suis entré:Comment résoudre six équations différentielles avec 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 revient sans cesse le message d'erreur suivant:

Not enough input arguments. 

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

et je sais ce qui se passe parce que je ne l'ai pas défini l'un des termes de y. Cependant, tous les autres codes ode 45 que j'ai vus n'ont pas non plus défini ces termes. Y at-il quelque chose qui me manque, ou un moyen de faire fonctionner le code sans définir ces termes? Aidez-moi, s'il vous plaît! Merci d'avance.

+2

Comment appelez-vous ode45? Votre fonction 'y' doit être un vecteur –

+0

Notez également que' z' ici serait le 't' de l'ODE, que vous n'utilisez pas (ce qui signifie que votre système est autonome). Dans ce cas, vous devriez pouvoir le remplacer par ~, c'est-à-dire 'function ydot = Untitledrt (~, y)', qui dans beaucoup de cas reconnaîtra MATLAB et aidera à accélérer le code en n'instanciant pas cette variable lors de l'appel. Peut-être pas un problème ici, mais une bonne habitude à développer. –

Répondre

0

D'abord créer un fichier M qui évalue le côté droit du système f(t,y) pour t, y1, y2, y3, y4, y5, y6 donné et nommez-le comme vous 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) 

Maintenant, tapez les commandes suivantes dans la ligne de fenêtre MatLab par ligne ou le coller dans un nouveau fichier script

[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