我正在寻找解决这个微分方程的方法。
我在解决这类方程方面经验不足,所以这里是我的菜鸟代码
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('三点',[0 1000],[0 0.25]);
任何人都可以告诉我我在哪里弄错了,我该如何解决这些错误? 提前谢谢!
答案 0 :(得分:2)
请仔细查看help ode45
。我承认这部分用法可能不太清楚,所以请看一下doc ode45
。
这是你问题的本质。您想要求解10个变量的微分方程,每个变量都是t
的函数。那么,像ode45
这样的通用求解器如何知道它需要在每个时间步使用10个组件数组?从它唯一的地方:初始值!
以下是您拨打ode45
的方式:
[t,h]=ode45('threepoint', [0 1000], [0 0.25]);
第二个数组Y0
是初始值。从文档中可以清楚地看出这一点。由于您提供了2元素向量,ode45
巧妙地意识到您只有2个方程式。当您尝试在Y(6)
中使用threepoint()
和其他高索引值时,您会收到错误:索引超出矩阵维度。因为您的索引6
超出了数组的大小,即2
。
您始终需要使用具有适当大小的初始值(在特定情况下长度为10),以便通知求解器您的问题的维度。即使ode45
可以从某处确定方程的大小,您也必须为解决方案的所有10个组件提供初始值。