Python 带边界条件的常微分方程求解系统

Python 带边界条件的常微分方程求解系统,python,scipy,ode,odeint,Python,Scipy,Ode,Odeint,我正试图用python解决一个常微分方程(ODE)系统。我有一个由五个变量组成的五常微分方程系统(T,U,V,W,I)。它随时间而变化(t)。到目前为止,下面的代码可以很好地使用python包odeint 我想用具有边界条件y(0)=0和y(1)=1的solve_-bvp来求解相同的5常微分方程组。我用solve_bvp尝试了几次,但都没有成功 其次,我还想知道,是否可以使用sovle_bvp求解多点边值。如果没有,那么python中还有其他方法可以解决这个问题。我在书中读到的是,这个函数在两点

我正试图用python解决一个常微分方程(ODE)系统。我有一个由五个变量组成的五常微分方程系统(T,U,V,W,I)。它随时间而变化(t)。到目前为止,下面的代码可以很好地使用python包odeint

我想用具有边界条件y(0)=0y(1)=1solve_-bvp来求解相同的5常微分方程组。我用solve_bvp尝试了几次,但都没有成功

其次,我还想知道,是否可以使用sovle_bvp求解多点边值。如果没有,那么python中还有其他方法可以解决这个问题。我在书中读到的是,这个函数在两点边界条件下数值求解一阶常微分方程组。谢谢

from scipy import *
from scipy.integrate import odeint
from operator import itemgetter
from pylab import *
import itertools
from numpy import zeros_like
import operator
import matplotlib.pyplot as plt


initial_condi = [0.1,0.1,0.1,0.1,0.1]
t = np.arange(0,60,1)

def equation(w, t):
    T, U, V,W,I = w
    dT = 0.9*I*1*10.24 - T*0.0012
    dU = V*T*0.0154 - U*1*0.81
    dV = W*0.1*0.12 + U*1*0.81 
    dW= V*1.64 + 0.7 - W*U*1591.5*1
    dI= T*0.0012 + 0.8- 0.9*I*1*10.24 
    return dT,dU,dV,dW, dI

    result_init = odeint(equation, initial_condi, t)

plt.plot(t, result_i[:,0], 'r--')
plt.plot(t, result_i[:,1], 'r--')
plt.plot(t, result_i[:,2], 'r--')
plt.plot(t, result_i[:,3], 'r--')
plt.plot(t, result_i[:,4], 'r--')
plt.show()

您是否可以为
solve_bvp
添加您最先进的尝试,这样您就可以看到您的意图以及可能出现的错误?否,
solve_bvp
没有多点功能。你总是可以为
odeint
解建立一个方程组这样的条件,并应用
scipy.optimize
模块中的一些非线性解算器。我想你说的是另一类。我只知道DAE系统中的隐藏条件,什么是“无限条件”?至于初始化,您必须进行猜测。一般来说,整个问题是非线性的,因此可能有不同的解决方案。对于初始曲线,可以尝试选择其中一条。这有点像牛顿的方法,不同的初始点将导致不同的解决方案或根本没有解决方案(在合理的时间内或永远不会)。我不知道它是否在文档中,或者它是否是开发人员在but tracker中的一些评论,但solve_bvp被认为是相当实验性的,而solve_ivp也不是真正适合作为主力。存在稳定性问题,以及关于平衡边界条件中的错误和隐式ODE解算器步骤中的错误的问题,……仍然不清楚您试图解决的是什么问题。您为某些
y
提供了边界条件,但状态中没有
y
组件。还有什么其他边界条件,你需要尽可能多的处于状态的组件。是的,正如代码中的初始条件给出初始值
T(0),U(0),V(0),W(0),I(0)