【问题标题】:Solving Differential equations in Matlab, ode45在 Matlab 中求解微分方程,ode45
【发布时间】:2013-05-08 19:58:47
【问题描述】:

我正在尝试用 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]);

【问题讨论】:

  • 你能分享你收到的错误吗?可能它会帮助其他人了解您的问题的原因。
  • 在没有实际告诉我们您遇到了什么错误的情况下,您现在强迫其他人尝试执行您的代码。让我们轻松一点,给我们一个提示!包括 COMPLETE 错误消息。让我们更轻松意味着给您答案会更快/更容易。
  • 我收到的错误如下: 尝试访问 k3(1.00002); index 必须是正整数或逻辑整数。 kopplad 中的错误(第 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]);
  • 您实际上只得到一个错误:k3(1.00002)。其余消息都在那里,因为函数调用是嵌套的(您调用 ode45,而后者又调用 kopplad,其中包含错误)。错误只是您在 dz 声明中在 k3 之后忘记了一个 *。

标签: matlab math differential-equations


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-03
    • 1970-01-01
    • 1970-01-01
    • 2021-04-19
    • 1970-01-01
    相关资源
    最近更新 更多