Численное решение двух связанных нелинейных дифференциальных уравнений второго порядка

Я столкнулся со следующей системой дифференциальных уравнений лагранжевой механики. Можете ли вы предложить численный метод с соответствующими ссылками и ссылками на то, как я могу его решить. Кроме того, есть ли более короткая реализация на Matlab или Mathematica?

mx (y точка) ^ 2 + mgcosy - Mg - (M = m) (x двойная точка) = 0

gsiny + 2 (x точка) (y точка + x (y двойная точка) = 0

где (x точка) или (y точка) = dx / dt или dy / dt, а двойная точка указывает двойную производную по времени.


person winawer    schedule 06.09.2012    source источник
comment
Вы хотите записать mxy '^ 2 + mg cos (y) - Mg - (M-m) x' '= 0 в первом уравнении?   -  person Bruno Kim    schedule 13.09.2012


Ответы (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, таких как методы Рунге-Кутта. . В 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);
person Bruno Kim    schedule 13.09.2012