使用 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值,你可能还需要进行人工扩散(以防佩克莱数太大)
我正在尝试使用 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值,你可能还需要进行人工扩散(以防佩克莱数太大)