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

时间:2018-12-29 16:28:32

标签: python sympy numerical-methods differential-equations

我正在尝试用SymPy求解二阶\ddot{s}+k^2s = 0的普通线性微分方程,并得到意外的结果。

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 expecteds = A \sin{kt} + B \cos{kt}

有什么想法我做错了吗?

1 个答案:

答案 0 :(得分:2)

结果打印为

Eq(s(t), C1*exp(-I*k*t) + C2*exp(I*k*t))

这是正确的,因为I是虚数单位。您可能更喜欢真实的形式,但是没有通知sympy,而是以指数项的总和生成了最简单的形式,尤其是因为尚不清楚k是否真实。

如果通过{p>明确表明k是正实数,

k = sym.Symbol('k', real=True, positive=True) 

该解决方案实际上是您所期望的真实形式

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