2016-04-26 10 views
0

Я пытаюсь правильно ввести дифференциальные уравнения в Matlab, поэтому я могу решить их, но я не могу заставить свой код работать. Это код, который я вошел:Как решить шесть дифференциальных уравнений с 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 постоянно возвращается следующее сообщение об ошибке:

Not enough input arguments. 

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

и я знаю, что это происходит потому, что я не определил каких-либо условий у. Тем не менее, каждый другой код ode 45, который я видел, также не определил эти термины. Есть ли что-то, что мне не хватает, или способ заставить код работать без определения этих условий? Пожалуйста, помогите мне! Заранее спасибо.

+2

Как вы звоните ode45? Ваша функция 'y' должна быть вектором –

+0

Также обратите внимание, что' z' здесь будет 't' ODE, который вы не используете (это означает, что ваша система является автономной). В этом случае вы сможете заменить его на ~, т. Е. 'Function ydot = Untitledrt (~, y)', что во многих случаях MATLAB распознает и ускорит выполнение кода, не создавая экземпляр этой переменной при совершении вызова. Может быть, здесь не проблема, а хорошая привычка развиваться. –

ответ

0

Сначала создайте M-файл, который оценивает правую часть системы f(t,y) для любого заданного t, y1, y2, y3, y4, y5, y6 и назовите его как вы 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) 

Теперь введите следующие команды в линии окна MatLab линией или вставить его в новый файл сценария

[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