使用 python 的具有边界条件的二阶 ODE

Second order ODE with boundary conditions using python

我正在尝试使用 odeint 求解 python 中 y'' + ay' + by + c = 0(二阶微分方程)形式的方程。据我了解,odeint 仅适用于 y(0) = y1, y'(0) = y2 形式的初始条件。而我的条件是边界:y'(0) = 0, y'(pi/4) = 0。有没有办法在这种条件下使用 odeint?这是我的代码:

from scipy.integrate import odeint
import numpy as np

def lagrange(x, teta):
  y = x[0]
  dy = x[1]  
  xdot = [[],[]]
  xdot[0] = dy
  xdot[1] = (y + dy**2*y*(y**2 + dy**2)**(-1.5) + y*(y**2+dy**2)**(-0.5))/((y**2+dy**2)**(-0.5) - dy**2*(y**2+dy**2)**(-1.5))
  return xdot

phi = np.linspace(0,np.pi/4,100)

U = odeint(lagrange, [u1_0, u2_0], phi)

官方documentation表示解决了刚度或non-stiff一阶ode-s系统的初值问题。所以不能解决边值问题

您很可能需要实施有限差分法、有限元法或射击法来解决问题。

我个人推荐有限差分法,因为它主要包括添加 3 个对角矩阵(其中 2 个是三对角矩阵)、设置解向量和使用线性求解器。

如果您需要一些帮助来设置它,不久前我为 matlab 写了一个 diffusion-advection 求解器,您可以移植和扩展它以包括反应项(应该是 b*恒等式矩阵)。

根据你的a值,你可能还需要进行人工扩散(以防佩克莱数太大)