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

112
9

У меня проблема в виде двух уравнений и известных начальных условий. Уравнения:

dx/dt = (-a1 * sin (y) + a2 + a3 * sin (yx))/((dy/dt) * a4 * cos (yx))

dy/dt = (a1 * sin (x) -a5 + a6 * x + a7 * sin (yx))/((dx/dt) * a8 * cos (yx))

где a1 - a8 - переменные.

Я пытаюсь построить x vs t и y vs t на MATLAB, но я не уверен, как решить это численно или аналитически. Любая помощь будет оценена!

спросил(а) 2018-04-02T23:19:00+03:00 2 года, 5 месяцев назад
1
Решение
58

ODE вашей проблемы не может быть записано как d y/dt = f (t, y), а не M (t, y) d y/dt = f (t, y). Это означает, что это дифференциальное алгебраическое уравнение, которое должно решаться численно в виде:

f (t, y, d y/dt) = 0

В Matlab это можно сделать с помощью команды ode15i.

Поэтому первым шагом является правильная запись функции, в этом случае один из вариантов:

function f = cp_ode(t,y,yp,a)
f1 = (-a(1)*sin(y(2))+a(2)+a(3)*sin(y(2)-y(1)))/yp(2)*a(4)*cos(y(2)-y(1)) - yp(1);
f2 = (a(1)*sin(y(1))-a(5)+a(6)*y(1)+a(7)*sin(y(2)-y(1)))/yp(1)*a(8)*cos(y(2)-y(1)) - yp(2);
f = [f1 ; f2] ;
end

Затем можно задать начальные условия и время интеграции, чтобы вызвать ode15i:

tspan = [0 10];
y0 = [1; 1] ;
yp0 = fsolve(@(yp)cp_ode(0,y0,yp,a),<yp0_guess>);
a = ones(1,8) ;
[t,y] = ode15i(@(t,y,yp)cp_ode(t,y,yp,a), tspan, y0, yp0);

Следует отметить, что начальные условия t, y, yp должны удовлетворять уравнению f (t, y, yp) = 0. Здесь для удовлетворения этого условия используется fsolve.

Использование функций annonymus состоит в том, чтобы определить функцию с параметрами как входы, а затем выполнить решение ODE, определяющее параметры в основном коде.

ответил(а) 2018-04-03T22:30:00+03:00 2 года, 5 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема