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

标签 python sympy numerical-methods differential-equations

我正在尝试求解这个二阶常线性微分方程 \ddot{s}+k^2s = 0使用 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 expecteds = A \sin{kt} + B \cos{kt}

你知道我做错了什么吗?

最佳答案

结果打印为

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

关于python - 使用 SymPy 求解二阶常线性微分方程的意外结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53971293/

相关文章:

python - 从同一个模块导入同一个对象,在两个不同的模块 :

python - utf-8 pytest 输出用\x 转换为 ascii

python - 我怎样才能找到 numpy 的 Wronskian 行列式

python - 将 Matlab 数值热传导模型转换为 Python

python - 使用 scipy.integrate.quad 时结果不连续

r - 在 R 中实现幂方法时的无限递归

python - 子类化 datetime64

python - 对 pandas 数据框进行计数和排序

sympy - 在 sympy 中将字符串声明为 "constant"

python-3.x - SymPy 中的表达式简化