在Matlab中解决微分方程,ode45

时间:2013-05-08 19:58:47

标签: matlab math differential-equations

我正在尝试使用Matlab中的函数ode45来解决具有三个微分方程的系统。我真的不明白我得到的错误,我可以帮助理解我做错了什么。

微分方程如下:

F1 = -k1y1+k2(y2-y1)
F2 = -k2(y2-y1)+k3(y3-y2)
F3 = -k3(y3-y2)

我在Matlab中的代码是这样的:

function dz = kopplad(t, z)
global m1 m2 m3 k1 k2 k3 
dz = [z(2)
-k1*z(1)/m1 + k2*(z(2)-z(1))/m1
z(4)
-k2*(z(2)-z(1))+k3(z(3)-z(2))/m2
z(6)
-k3(z(3)-z(2))/m3];

global m1 m2 m3 k1 k2 k3
m1 = 0.75; m2 = 0.40; m3 = 0.65;
k1 = 0.85; k2 = 1.1; k3 = 2.7;
[t, z] = ode45(@kopplad, [0, 50], [0 -1 0 1 0 0]);
plot(t, z(:,1)) 
hold on
plot(t,z(:,3),'--')
plot(t,z(:,5),'*') 
legend('y_1', 'y_2', 'y_3');
hold off

我收到的错误如下:

  

尝试访问k3(1.00002); index必须是正整数或   逻辑。

     

kopplad (line 3) dz = [z(2)

中的错误      

ode45(第262行)f(:,2) = feval(odeFcn,t+hA(1),y+f*hB(:,1),odeArgs{:});

出错      

diffekv(第6行)[t, z] = ode45(@kopplad, [0, 50], [0 -1 0 1 0 0]);

出错

1 个答案:

答案 0 :(得分:0)

自从我做了一些Matlab编程以来已经过去了一段时间,但据我记得,如果我以正确的方式理解你的代码,你应该将变量传递给函数,即写@(x,y)kopplad(x,y)。如果其余的(全局变量和方程式)是正确的,那么一切都会没问题。