Sympy 简单的二阶颂歌
Posted
技术标签:
【中文标题】Sympy 简单的二阶颂歌【英文标题】:Sympy simple second order ode 【发布时间】:2021-12-11 04:10:27 【问题描述】:我想用 Sympy 演奏 ode。
如果我从一个简单的开始,例如 f''(x) = f(x),dsolve
工作正常
import sympy as sym
z = sym.symbols('z', real=True)
Phi = sym.Function('Phi')(z)
Phi_ = sym.Derivative(Phi,z)
Phi__ = sym.Derivative(Phi_,z)
Eqn1 = sym.Eq(Phi__, Phi) # f'' = f
sol1 = sym.dsolve(Eqn1) # Find solution
但是,我试试这个 ode f''(x) = exp(f(x)) (解决方案可以通过 Wolfram Alpha 进行检查。)
Eqn2 = sym.Eq(Phi__, sym.exp(Phi)) # f'' = exp (f)
sol2 = sym.dsolve(Eqn2) # ERROR
我有一个错误:
NotImplementedError: solve: Cannot solve -exp(Phi(z)) + Derivative(Phi(z), (z, 2))
这是 Sympy 的限制吗?我应该使用其他功能吗?
【问题讨论】:
就是这个错误,没有实现这种问题的方法。dsolve
不完整并且仍然有错误,例如参见 ***.com/questions/62981132 中的奇怪结果
好的,谢谢。我将尝试在 Mathematica 上工作。
【参考方案1】:
我不知道您使用的是什么版本的 SymPy,但我使用的是 1.9,我刚刚检查了所有版本回到 1.2,这个 ODE 总是得到解决:
In [1]: import sympy as sym
...:
...: z = sym.symbols('z', real=True)
...: Phi = sym.Function('Phi')(z)
...: Phi_ = sym.Derivative(Phi,z)
...: Phi__ = sym.Derivative(Phi_,z)
...:
...: Eqn1 = sym.Eq(Phi__, Phi) # f'' = f
...:
...: sol1 = sym.dsolve(Eqn1) # Find solution
In [2]: sol1
Out[2]:
-z z
Φ(z) = C₁⋅ℯ + C₂⋅ℯ
【讨论】:
您不知何故错过了第二个产生错误的 ODE 示例,f''(x) = exp(f(x))
。
这首颂歌适合我。当我想解决第二个 ode sym.Eq(Phi__, sym.exp(Phi)) # f'' = exp (f)
时出现错误。【参考方案2】:
我使用的是 1.6.2 版(2020 年 8 月)。在更新到1.9版(2021年10月)后,我终于可以解决第二首颂歌f'' = exp(f)
。但是,求解器确实很慢。
【讨论】:
您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center。以上是关于Sympy 简单的二阶颂歌的主要内容,如果未能解决你的问题,请参考以下文章
Sympy 中的 Steinhart-Hart 热敏电阻校准