用SymPy解决四阶ODE会引发NotImplementedError:不支持CRootOf

时间:2018-07-07 13:00:41

标签: sympy

我可以使用SymPy(diff(x,2))求解二阶微分方程,但是使用4阶方程式(diff(x,4))却会出错。我究竟做错了什么?

我使用SymPy尝试了

from sympy import *
x = symbols('x', real=True)
ă = symbols('ă', real=True,positive=True)
w = symbols('w', cls=Function)
eq=w(x).diff(x,2) +ă**2*w(x)
print("w=",dsolve(eq).rhs)
eq=w(x).diff(x,4) +ă**2*w(x).diff(x,2)
print("w=",dsolve(eq).rhs)

得到

NotImplementedError: CRootOf is not supported over ZZ[ă]

等式来自Euler's critical load

Wolfram Alpha can solve it,获得

{w[x] == (Cos[x ă] Subscript[c, 1])/ă^2 + (Sin[x ă] Subscript[c, 2])/ă^2 + Subscript[c, 3] + x Subscript[c, 4]}

1 个答案:

答案 0 :(得分:0)

您没有做错任何事情。 NotImplementedError表示SymPy无法处理您要求解的方程式。在这种情况下,问题出在多项式模块中,该模块在某种程度上与具有符号系数t**4 + f**2*t**2 = 0的方程f挣扎。确实应该能够处理...作为此特定方程式的解决方法,将符号系数ƒÉ替换为数字(例如7)是可行的。

print(dsolve(eq.subs(ă, 7), w(x)).rhs.subs(7, ă))

打印C1 + C2*x + C3*sin(x*ƒÉ) + C4*cos(x*ƒÉ)

当然,如果将7与其他数字组合成14或其他值,这很容易出错。但这在这里有效。