Python 用辛方法求解二阶常线性微分方程的意外结果

Python 用辛方法求解二阶常线性微分方程的意外结果,python,sympy,numerical-methods,differential-equations,Python,Sympy,Numerical Methods,Differential Equations,我试图用辛解这个二阶常线性微分方程,得到一个意想不到的结果 import sympy as sym k, t = sym.symbols('k, t') s = sym.Function('s') diff_eq = sym.Eq(s(t).diff(t, 2) + s(t) * k**2, 0) # everything fine here, when I print this I get what I expected. solution_diff_eq = sym.dsolve(di

我试图用辛解这个二阶常线性微分方程,得到一个意想不到的结果

import sympy as sym
k, t = sym.symbols('k, t') 
s = sym.Function('s')

diff_eq = sym.Eq(s(t).diff(t, 2) + s(t) * k**2, 0) # everything fine here, when I print this I get what I expected.

solution_diff_eq = sym.dsolve(diff_eq, s(t))  
print(solution_diff_eq)
哪张照片

Eq(s(t), C1*exp(-I*k*t) + C2*exp(I*k*t))
然而,问题是

知道我做错了什么吗?

结果打印为

Eq(s(t), C1*exp(-I*k*t) + C2*exp(I*k*t))
这是正确的,因为
I
是虚单位。您可能更喜欢实数形式,但sympy没有得到通知,而是生成了最简单的指数项之和形式,特别是因为不清楚
k
是否为实数

如果您通过以下方式明确说明
k
是一个正实数:

k = sym.Symbol('k', real=True, positive=True) 
正如您所期望的,解决方案实际上是真实的

Eq(s(t), C1*sin(k*t) + C2*cos(k*t))

当我将答案代入原始方程和“.doit()”时,它将作为一个解进行检验。它是否可能代表另一种解决方案的有效替代形式(我在这里看不到)。谢谢您的快速回答!:)