求解微分方程matlab时出错

Error while solving differential equations matlab

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

我对求解此类方程式的经验很少,所以这是我的新手代码

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

虽然 运行 这些功能我有这样的错误

Index exceeds matrix dimensions.

Error in threepoint (line 11) f=[x(6);

Error in odearguments (line 87) f0 = feval(ode,t0,y0,args{:}); % ODE15I sets args{1} to yp0.

Error in ode45 (line 113) [neq, tspan, ntspan, next, t0, tfinal, tdir, y0, f0, odeArgs, odeFcn, ...

Error in lab1 (line 2) [t,h]=ode45('threepoint', [0 1000], [0 0.25]);

任何人都可以告诉我我错在哪里以及如何解决这些错误? 提前致谢!

请仔细看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 个分量提供 初始值。