python - 使用 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))
但是,我期望的解决方案是
任何想法我做错了什么?
解决方案
结果打印为
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))
推荐阅读
- javascript - 使用默认导出将函数导出到另一个类
- azure - 版本控制 Azure 静态网站
- javascript - javascript为此参数发送另一个元素
- c++ - 从类方法返回可选
- python - 如何用神经网络逼近一个函数
- html - 在 div 上使用 CSS 切换而不是输入字段
- arrays - 如何在 ReScript 中一般遍历数组?
- python - {% translate s %} 传入 {% include ... with s=s %} 不在 .po 文件中
- angular - ng-select下拉英雄并使用选择的英雄?
- html - 如何更改 Angular Material 中占位符的颜色?