【问题标题】:Solving nonlinear differential third order equation using Python使用 Python 求解非线性微分三阶方程
【发布时间】:2020-12-13 13:31:27
【问题描述】:

我想使用 Python 求解非线性三阶微分方程。

在我的情况下是:

d^3f/dx^3 = (1-f)/(f^3)

我写了下面的程序,但是我的solver有问题,所以我不知道我用scipy使用的方法是否正确。

from sympy.interactive import printing
printing.init_printing(use_latex=True)

from sympy import *
import sympy as sp

x = sp.symbols('x')
f = sp.Function('f')(x)

diffeq = Eq(f.diff(x,x,x),(1-f)/(f**3))
display(diffeq)

dsolve(diffeq,f)

我收到了这个错误:

NotImplementedError: solve: Cannot solve -(1 - f(x))/f(x)**3 + Derivative(f(x), (x, 3))

您能帮我使用不同的解决策略吗?

谢谢

【问题讨论】:

    标签: python higher-order-functions differential-equations


    【解决方案1】:

    就是这样,没有实现任何方法来处理这种情况。只有非常狭窄的 ODE 集合具有符号解,即使方程中的微小变化也会破坏该字符。 sympy.dsolve 只是零星的发展,因此将识别更少的案例,例如 Wolfram 的 Mathematica。

    在很大程度上,sympy 有一些方法可以处理(如果被识别)一阶标量线性 DE、具有恒定系数的标量线性 DE、Bernoulli 和 Riccati、一些一阶线性系统(尤其是具有恒定系数的),甚至更少的二阶线性系统(同样具有常数系数),二阶线性 DE 的选择,其具有提供特殊函数作为解的范式。可能还有一些异国情调。您可以在文档中找到这些。然后在此基础上添加一些启发式方法,以将给定方程简化为其中一种情况,这是一个更加实验性的过程。

    您不太可能将方程式转换为这些形式之一,即使是手动转换,因此会出现错误NotImplementedError:

    【讨论】:

    • 感谢您的回答,我会尝试这样做,因为我没有使用与过去不同的任何其他求解器...如果您有任何进一步的建议来转换这个方程,它会很有帮助。再次感谢您。
    猜你喜欢
    • 2015-08-21
    • 2021-01-29
    • 2021-06-07
    • 2021-06-14
    • 2020-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多