Решение нелинейного ОДУ 2. Порядок в Matlab численно
У меня есть нелинейное ОДУ второго порядка с тригонометрическими функциями, так что я не могу сформулировать его в зависимости от второго вывода. Например:
ay'' + b arctan(y'') + cy' + dy=0
y'(0)=0, y''(0)=0
Без существования термина вроде arctan(y'') я мог бы написать свою функцию ode как
function output=myodefunc(u,t){
y(1)=u(2);
y(2)=(-c*u(2)-d*u(1))/m;
output=y';
}
К сожалению, нелинейный член второго порядка (=> b*arctan(y'')) делает меня неспособным написать оду в зависимости от y ''.
Есть ли способ решить такую тригонометрическую оду численно в Matlab?
1 ответ
Решение
Можно вычислить y'' с помощью нелинейного решателя (fsolve) внутри функции ode:
function output=myodefunc(u,t){
y(1)=u(2);
x0=0;
x=fsolve('a*x + b*atan(x) + c*u(2) + d*u(1)',x0);
y(2)=x;
output=y';
}