MATLAB:用 matlab 求解非线性二阶方程组

MATLAB: Solve a system of nonlinear second order ode with matlab

我有以下方程组

用matlab的ode45可以解决吗?我知道我需要将二阶方程转换为两个一阶方程,但我的困惑来自于 stheta.

P.S。 Beta只是一个常数

我将方程组定义为一个函数:

function dy = pend(t,y)
beta = 1;
dy(1) = y(2);
dy(2) = -1/(1+y(3))*sin(y(1))-2/(1+y(3))*y(2)*y(4);
dy(3) = y(4);
dy(4) = (1+y(3))*y(2)*y(2)+cos(y(1))-1-beta^2*y(3);
y=y';
end

假设 y(1) 是 theta,y(2) 是 theta 的导数,y(3) 是 s,y(4) 是它关于时间.

然后我用

解决
[t,y] = ode45(@pend,[0 20],[pi/4 ; 0 ; 0 ; 0]);

是的,使用ode45应该可以解决。

theta    = x1
s        = x2 
thetadot = x3 
sdot     = x4

那么你将得到以下一组方程式:

x1dot = x3
x2dot = x4
x3dot + sin(x1)/(1 + x2) + 2/(1+x2).x4.x3 = 0
x4dot - (1 + x2).(x3)^2 = cos(x1)-1-beta^2*x2

现在给出 ode45 的这些方程组,初始值为 x1x2x3x4。您需要适当地重写 3rd 和 4th 等式。

编辑1:

你已经写好了方程组。所以现在使用

y0    = [pi/4; 0; 0; 0];
tspan = [0 20];
[t,y] = ode45(pend, tspan, y0);

编辑2:

function dy = pend(t,y)

    beta = 1;

    dy = [y(2);
          -1 / (1 + y(3))*sin(y(1)) - 2/(1 + y(3))*y(2)*y(4);
           y(4);
           (1 + y(3))*y(2)*y(2) + cos(y(1)) - 1 - beta^2*y(3)];
end

这应该适合你。