Решение нелинейного ОДУ 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';
}
Другие вопросы по тегам