我試圖通過調整此處找到的代碼來解決這個微分方程。
import sympy as sp
t = sp.symbols('t', real=True)
x = sp.Function('x', real=True)
diffeq = sp.Eq(x(t).diff(t), sp.sqrt(1 - x(t)**2))
res = sp.dsolve(diffeq, ics={x(0): 0})
math.se 帖子建議分段函式滿足方程,但也許我的代碼沒有添加所有必要的假設。我得到以下回溯:
Traceback (most recent call last):
File "/usr/lib/python3.10/idlelib/run.py", line 578, in runcode
exec(code, self.locals)
File "/home/galen/testing.py", line 7, in <module>
res = sp.dsolve(diffeq, ics={x(0): 0})
File "/usr/lib/python3/dist-packages/sympy/solvers/ode/ode.py", line 639, in dsolve
return _helper_simplify(eq, hint, hints, simplify, ics=ics)
File "/usr/lib/python3/dist-packages/sympy/solvers/ode/ode.py", line 694, in _helper_simplify
solved_constants = solve_ics([rv], [r['func']], cons(rv), ics)
File "/usr/lib/python3/dist-packages/sympy/solvers/ode/ode.py", line 808, in solve_ics
raise NotImplementedError("Initial conditions produced too many solutions for constants")
NotImplementedError: Initial conditions produced too many solutions for constants
如何更改我的代碼以正確解決 ODE?
uj5u.com熱心網友回復:
首先,求解器將方程視為代數,也就是說,它求解x'2=1-x2,它沒有得到可能的分段解,只有完全決議的。
由于某種原因,未實作回傳可能解決方案的元組,您可以手動執行此操作,請參閱https://stackoverflow.com/a/46979535/3088138
res = sp.dsolve(diffeq)
sol = res.rhs
print([ sol.subs(coeffs) for coeffs in sp.solve(sol.subs(t,0), dict=True) ])
回傳[sin(t), -sin(t)]。第二個與給定形式的 ODE 不兼容。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/520214.html
上一篇:數學公式錯誤積分
