首页 > 解决方案 > 使用 SymPy 求解二阶常线性微分方程的意外结果

问题描述

我试图用 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))

但是,我期望的解决方案s = A \sin{kt} + B \cos{kt}

任何想法我做错了什么?

标签: pythonsympynumerical-methodsdifferential-equations

解决方案


结果打印为

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

推荐阅读