【发布时间】:2017-12-05 15:16:20
【问题描述】:
我有一个具有 3 个边界条件的 3 个微分方程系统(我相信从代码中会很明显)。我设法在 MATLAB 中通过一个循环来解决它,以便在不终止程序的情况下一点一点地更改初始猜测,如果它即将返回错误。然而,在scipy 的solve_bvp 上,我总是得到一些 的答案,尽管这是错误的。所以我不断地改变我的猜测(不断地改变答案),并且给出了与我从实际解决方案中得到的非常接近的数字,但它仍然无法正常工作。代码是否还有其他问题,因为它不起作用?我刚刚编辑了他们文档的代码。
import numpy as np
def fun(x, y):
return np.vstack((3.769911184e12*np.exp(-19846/y[1])*(1-y[0]), 0.2056315191*(y[2]-y[1])+6.511664773e14*np.exp(-19846/y[1])*(1-y[0]), 1.696460033*(y[2]-y[1])))
def bc(ya, yb):
return np.array([ya[0], ya[1]-673, yb[2]-200])
x = np.linspace(0, 1, 5)
#y = np.ones((3, x.size))
y = np.array([[1, 1, 1, 1, 1], [670, 670, 670, 670, 670], [670, 670, 670, 670, 670] ])
from scipy.integrate import solve_bvp
sol = solve_bvp(fun, bc, x, y)
实际解决方案如下图所示。
BVP 的 MATLAB 解决方案
【问题讨论】: