使用 SymPy 求解二阶常线性微分方程的意外结果

Unexpected result for solving ordinary linear differential equation of second order with SymPy

我正在尝试用 SymPy 求解这个普通的二阶线性微分方程 并得到了意想不到的结果。

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))

然而,solution I expected

知道我做错了什么吗?

结果打印为

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))