Math Python Scipy.integrate.solve_ivp返回初始解决方案,或者与要求集成的结果相比返回很少的点
我尽量避免问这个问题,因为我无法真正构建MWE,所以我将把所需代码的最小部分与结果放在一起: 正在集成的功能: (需要一个变量Math Python Scipy.integrate.solve_ivp返回初始解决方案,或者与要求集成的结果相比返回很少的点,math,scipy,ode,Math,Scipy,Ode,我尽量避免问这个问题,因为我无法真正构建MWE,所以我将把所需代码的最小部分与结果放在一起: 正在集成的功能: (需要一个变量r和一个5x1数组z才能返回5x1数组dz/dr def FUNs(r_p,z): return np.array([complex(DER(r_p,z)),complex(DBTH(r_p,z)),complex(DPR(r_p,z)),complex(DUF(r_p,z)),complex(DUR(r_p,z))]) 起点r0,z0及其FUNs(r0,z0)
r
和一个5x1数组z
才能返回5x1数组dz/dr
def FUNs(r_p,z):
return np.array([complex(DER(r_p,z)),complex(DBTH(r_p,z)),complex(DPR(r_p,z)),complex(DUF(r_p,z)),complex(DUR(r_p,z))])
起点r0,z0
及其FUNs(r0,z0)
分别为:
r0:3
z0:[0.1428571428571428,0.7142857142857144,-4.285714285714286,0.03279874008674976,-0.07511922913583222]
及
FUNs(r0,z0):数组([10.25070341+0.j,-14.01473929+0.j,0.26616247+0.j,0.51135355+0.j,0.08613425+0.j])
对于执行部分:
我只是调用solve_ivp来集成,比如说使用以下命令集成一个非常小的空间3.00->3.01
:
start = 3.0
limit = 3.01
t_get = np.linspace(start,limit,10)
z00 = z0
sol = scipy.integrate.solve_ivp(FUNs, [start, limit], z00, method='RK45',t_eval=t_get, vectorized=False,rtol=10**(-8.5),atol=10**(-8.5))
为了检查集成是否失败,集成所经过的空间由sol.t
给出,即:
sol.t >>> array([3. , 3.00111111, 3.00222222, 3.00333333])
如果我疯狂地使用limit=4
或某个sol.t
只给出3.
xD
谢谢你的帮助
附言
sol.message
给出以下输出:所需的步长小于数字之间的间距。
sol.message
的内容是什么?sol.t显示集成经过的空间点,而sol.y是通过这些点的解决方案。@LutzLehmannAndsol.success
告诉我们是否有t集成已成功执行,并且sol.message
包含错误消息。请参阅文档。@LutzLehmann很抱歉没有响应,但是,尽管这几乎令人难以置信,我的笔记本电脑刚刚死掉,无论我多么努力,我都无法在我的桌面上运行相同的脚本。我将在修复后立即回答it@LutzLeh曼恩:我在问题上添加了sol.message。如果你还在:)你的时间:sol.message的内容是什么?sol.t表示积分所经过的空间点,而sol.y表示通过这些点的解@LutzLehmannAndsol.success
告知集成是否成功执行,并且sol.message
包含错误消息。请参阅文档。@LutzLehmann很抱歉没有回应,但是,尽管我的笔记本电脑几乎难以置信地死掉了,无论我怎么努力,我都无法在我的桌面上运行相同的脚本。我一搞定就回答it@LutzLehmann我添加了关于问题的sol.message。如果你还在那里:)谢谢你的时间