MATLAB:用 matlab 求解非线性二阶方程组
MATLAB: Solve a system of nonlinear second order ode with matlab
我有以下方程组
用matlab的ode45可以解决吗?我知道我需要将二阶方程转换为两个一阶方程,但我的困惑来自于 s 和 theta.
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
的这些方程组,初始值为 x1
、x2
、x3
和 x4
。您需要适当地重写 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
这应该适合你。
我有以下方程组
用matlab的ode45可以解决吗?我知道我需要将二阶方程转换为两个一阶方程,但我的困惑来自于 s 和 theta.
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
的这些方程组,初始值为 x1
、x2
、x3
和 x4
。您需要适当地重写 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
这应该适合你。