我在拉格朗日力学中遇到了以下微分方程组。您能否建议一种数值方法,以及有关如何解决它的相关链接和参考。另外,在 Matlab 或 Mathematica 上是否有更短的实现?
mx (y 点)^2 + mgcosy - Mg - (M=m)(x 双点) =0
gsiny + 2(x 点)(y 点 + x(y 双点)=0
其中 (x 点) 或 (y 点)= dx/dt 或 dy/dt,双点表示 wrt 时间的双导数。
我在拉格朗日力学中遇到了以下微分方程组。您能否建议一种数值方法,以及有关如何解决它的相关链接和参考。另外,在 Matlab 或 Mathematica 上是否有更短的实现?
mx (y 点)^2 + mgcosy - Mg - (M=m)(x 双点) =0
gsiny + 2(x 点)(y 点 + x(y 双点)=0
其中 (x 点) 或 (y 点)= dx/dt 或 dy/dt,双点表示 wrt 时间的双导数。
您可以创建一个向量 Y = (xyuv)' 以便
dx/dt = u
dy/dt = v
du/dt = d²x/dt²
dv/dt = d²y/dt²
可以从方程中分离出二阶导数,所以你得到
d²x/dt² = (m*g*cos(y) + m*x*v² - M*g)/(M-m)
d²y/dt² = -(g*sin(y) - 2*u*v)/x
现在,您可以尝试使用标准 ODE 求解器来求解它,例如Runge-Kutta方法。Matlab 有一套求解器,例如 ode23。我没有测试他跟随,但它会是这样的:
function f = F(Y)
x = Y(1); y = Y(2); u = Y(3); v = Y(4);
f = [0,0,0,0];
f(1) = u;
f(2) = v;
f(3) = (m*g*cos(y) + m*x*v*v - M*g)/(M-m);
f(4) = -(g*sin(y) - 2*u*v)/x;
[T,Y] = ode23(F, time_period, Y0);