【问题标题】:Error while solving differential equations matlabmatlab求解微分方程时出错
【发布时间】:2016-06-06 23:33:16
【问题描述】:

我正在寻找解决这个微分方程的方法。

我在解这类方程方面有一点经验,所以这是我的菜鸟代码

function lab1()
[t,h]=ode45('threepoint', [0 1000], [0 0.25]);
plot(t, h);  

function f = threepoint(x, y)
%THREEPOINT Summary of this function goes here
%   Detailed explanation goes here
m = 15000;
R1 = 0.1;
R2 = 0.1;
P1 = 0.1;
P2 = 0.1;
B = 4;
rbk = 0.5;
f=[x(6);
    x(7);
    x(8);
    x(9);
    x(10);
    (-x(6) / (m * sqrt( x(6)*x(6) + x(7)*x(7)))) * (R1 + R2) + (cos(x(3))/m) * P1 + (cos(x(3))/m) * P2;
    (-x(7) / (m * sqrt( x(6)*x(6) + x(7)*x(7)))) * (R1 + R2) + (cos(x(3))/m) * P1 + (cos(x(3))/m) * P2;
    -(M/I) - (1/I1)* (B/2 + y(1))*P1 + (1/I2)*(B/2+y(2))*P2;
    (rbk/I1)*(P1-R1);
    (rbk/I2)*(P2-R2);
    ];  
end

在运行这些函数时,我遇到了这样的错误,例如

索引超出矩阵维度。

三点错误(第 11 行)f=[x(6);

odearguments 错误(第 87 行) f0 = feval(ode,t0,y0,args{:}); % ODE15I 将 args{1} 设置为 yp0。

ode45 中的错误(第 113 行)[neq, tspan, ntspan, next, t0, tfinal, tdir, y0, f0, odeArgs, odeFcn, ...

lab1 中的错误(第 2 行)[t,h]=ode45('threepoint', [0 1000], [0 0.25]);

谁能告诉我我在哪里弄错了,我该如何解决这些错误? 提前谢谢!

【问题讨论】:

  • 哦,亲爱的,请不要将错误消息添加为图像。也不是代码(一般来说)。请使用复制+粘贴。
  • 至于你的问题:看手册:[TOUT,YOUT] = ode45(ODEFUN,TSPAN,Y0)。现在看看你的错误。时间跨度必须是一个向量,而不是 2 个单独的开始/结束值。
  • @AndrasDeak 那是我的错,我尝试以不同的方式编写此代码,最后粘贴了错误的。我是这样写的 [t,h]=ode45('threepoint', [0 1000], [0 0.25]);

标签: matlab differential-equations


【解决方案1】:

请仔细查看help ode45。我承认这部分用法可能不清楚,所以也可以看看doc ode45

这是您问题的本质。您想求解一个包含 10 个变量的微分方程,每个变量都是 t 的函数。那么,像ode45 这样的通用求解器如何知道它需要在每个时间步处理 10 分量数组?从它唯一能做到的地方:初始值!

你是这样称呼ode45的:

[t,h]=ode45('threepoint', [0 1000], [0 0.25]);

第二个数组Y0 是初始值。从文档中可以清楚地看到这一点。由于您提供的是 2 元素向量,ode45 巧妙地意识到您只有 2 个方程。当您尝试在 threepoint() 中使用 Y(6) 和其他高索引值时,您会收到以下错误:索引超出矩阵维度。因为您的索引6 超过了数组的大小2

您始终需要使用大小合适的初始值(在您的特定情况下长度为 10),以便告知求解器您的问题的维度。即使ode45 可以从某个地方断言您的方程的大小,您确实必须为解决方案的所有 10 个组件提供初始值。

【讨论】:

  • 谢谢,现在好像更清楚了。我已经修复了这样的代码函数 lab1() [t,h]=ode45('threepoint', [1 2], [1 2 3 4 5 6 7 8 9 10]);情节(t,h);现在我得到错误未定义的函数或变量'y'。但为什么它是未定义的?我像这样改变函数 f = threepoint(y, x) 所以 y 得到 [1 2] 和 x 得到 [1 2 3 4 5 6 7 8 9 10]?
  • @dimazava 你熟悉 MATLAB 吗?
  • 非常感谢!最后我解出了这些方程)
  • @dimazava 很高兴能帮上忙。
猜你喜欢
  • 2021-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-04
  • 1970-01-01
相关资源
最近更新 更多