Python 当参数为零时,带参数的SymPy dsolve给出错误答案 我的代码
我有一个计算二阶微分方程解的程序,如下面的代码片段所示:Python 当参数为零时,带参数的SymPy dsolve给出错误答案 我的代码,python,sympy,Python,Sympy,我有一个计算二阶微分方程解的程序,如下面的代码片段所示: import sympy as sp print('sympy version:', sp.__version__) t = sp.symbols('t', real=True, nonnegative=True) n = sp.symbols('n', integer=True, nonnegative=True) f = sp.symbols('f', cls=sp.Function) diff_eq = sp.Eq(f(t).d
import sympy as sp
print('sympy version:', sp.__version__)
t = sp.symbols('t', real=True, nonnegative=True)
n = sp.symbols('n', integer=True, nonnegative=True)
f = sp.symbols('f', cls=sp.Function)
diff_eq = sp.Eq(f(t).diff(t, 2) + n**2*f(t), 0)
print('general solution:', sp.dsolve(diff_eq, f(t)))
print('solution at n=0 (pre-subs):', sp.dsolve(diff_eq.subs(n, 0), f(t)))
print('solution at n=0 (post-subs):', sp.dsolve(diff_eq, f(t)).subs(n, 0))
结果:
sympy版本:1.3
通解:等式(f(t),C1*sin(n*t)+C2*cos(n*t))
n=0时的解决方案(预分段):等式(f(t),C1+C2*t)
n=0时的解决方案(后分段):等式(f(t),C2)
我的问题
一般n
的解决方案形式似乎无法准确描述n=0
的具体解决方案形式。具体来说,使用dsolve
first和subs(n,0)
second产生的结果与使用subs(n,0)
first和dsolve
second产生的结果不同,尽管两者在逻辑上应该是等价的
有人能解释一下我的结果不一致的原因吗?我做错了什么,还是这是一个bug?它可以被认为是
dsolve
逻辑中的bug:它找到两个特征值n
和-n
,并将它们视为不同的,而不考虑它们相等时的特殊情况n=0
。理想情况下,它会像下面的代码那样逐段地输出
sol_nonzero = sp.dsolve(diff_eq, f(t)).rhs
sol_zero = sp.dsolve(diff_eq.subs(n, 0), f(t)).rhs
sol_complete = sp.Piecewise((sol_nonzero, sp.Ne(n, 0)), (sol_zero, True))
print('general solution:', sol_complete)
print('solution at n=0:', sol_complete.subs(n, 0))
这张照片
general solution: Piecewise((C1*sin(n*t) + C2*cos(n*t), Ne(n, 0)), (C1 + C2*t, True))
solution at n=0: C1 + C2*t
sp.pprint(sol\u complete)
提供了一种更为常见的数学形式
⎧C₁⋅sin(n⋅t) + C₂⋅cos(n⋅t) for n ≠ 0
⎨
⎩ C₁ + C₂⋅t otherwise