用数值方法求解两个耦合的非线性二阶差分方程

时间:2012-09-06 16:50:34

标签: numerical-methods differential-equations

我在拉格朗日力学中遇到了以下微分方程组。您能否建议一种数值方法,以及如何解决它的相关链接和参考。另外,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时间。

1 个答案:

答案 0 :(得分:1)

您可以创建一个向量Y =(x y u v)'以便

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);