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 热敏电阻校准

数学神器!Sympy 模块解数学方程解微积分

Sympy中的Steinhart-Hart热敏电阻校准

使用 scipy.integrate.odeint 解决颂歌系统(不断变化的常数!)?

如何用 Python 解决僵硬的颂歌?

用scipy解决一个颂歌系统 - 如何引用不同的索引?