首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NotImplementedError:初始条件产生的常量解太多[SymPy]

NotImplementedError:初始条件产生的常量解太多[SymPy]
EN

Stack Overflow用户
提问于 2022-10-22 16:26:10
回答 1查看 40关注 0票数 0

我试图通过修改找到的this differential equation代码来解决here问题。

代码语言:javascript
复制
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文章建议,分段函数满足方程,但也许我的代码没有添加所有必要的假设。我得到以下回溯:

代码语言:javascript
复制
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

如何更改代码以正确解决该代码?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-22 20:30:31

首先,求解者将方程视为代数方程,即求解x'²=1-x²,而不是得到可能的分段解,而是完全解析解。

由于某些原因,没有实现返回可能的解决方案的元组,可以手动执行,请参阅https://stackoverflow.com/a/46979535/3088138

代码语言:javascript
复制
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不兼容的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74165228

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档