Как решить нелинейную дифференциальную систему с помощью Python?

У меня нелинейная дифференциальная система:

  • (1) f''(t)=r(f(t)) и
  • (2) g''(t)=s(f(t),g(t))

где s(f(t),g(t)) может быть s(f(t),g(t))=f(t)*g(t) или s(f(t),g(t)) = cos(f(t))*sin(g(t)) ... и мы знаем g и s. Я хочу решить эту систему с помощью Python, но не знаю, как это сделать. Первое уравнение можно легко решить с помощью scipy.integrate.odeint, но я не знаю, как решить всю систему.


person Zhao    schedule 18.05.2019    source источник
comment
Я думаю, вы имеете в виду, что r и s известны? Как вы определили систему первого порядка для первого уравнения и почему это не применимо к расширенной системе?   -  person Lutz Lehmann    schedule 18.05.2019


Ответы (1)


Если вы указали r и s как функции, вы можете построить систему как

def derivs(t,u): f,g, df, dg = u; return [ df, dg, r(f), s(f,g) ]

и

u = odeint(derivs, u0, t_array, tfirst=True)

f,g, df, dg = u.T
plt.plot(t_array,f, t_array,g)

или все, что вы хотите сделать с решением.

person Lutz Lehmann    schedule 18.05.2019
comment
Спасибо за ваш ответ. Подскажите пожалуйста, каков порядок начальных условий? Является ли u0 = [f (t_array [0]), g (t_array [0]), df (t_array [0])], dg (t_array [0])]? - person Zhao; 19.05.2019
comment
Да, именно так. Конечно, вы можете выбрать другой порядок компонентов, вам просто нужно делать это везде последовательно. - person Lutz Lehmann; 19.05.2019