python - Sympy:求解具有初始条件误差的微分方程
问题描述
从Sympy
1.2 版开始,pythonSympy
已经实现了在给定一些初始条件的情况下求解简单微分方程中的常数的能力。我试图测试此功能,但不断收到我不知道如何解决的错误。
文档指出了初始条件的以下格式,我尝试遵循实现该功能的实际拉取请求中指定的内容。这是代码和错误。
import sympy as sp
t = sp.symbols('t')
x = sp.Function('x')(t)
diffeq = sp.Eq(x.diff(t,t) - x, sp.cos(t))
res = sp.dsolve(diffeq, t, ics={x(0): 0,
x.diff(t).subs(t, 0): 0})
错误是:
Traceback (most recent call last):
File "<ipython-input-20-75c3e1d53138>", line 1, in <module>
res = sp.dsolve(diffeq, t, ics={x(0): 0, sp.diff(x(t), t).subs(t,0): 0})
TypeError: 'x' object is not callable
解决方案
我不是 sympy 的重度用户,但我得到了它的工作 - 问题是当你定义时x = sp.Function('x')(t)
你已经得到了t
它的参数,并且不能再0
在行中传递它
- with (t)res = sp.dsolve(diffeq, t, ics={x(0): 0, sp.diff(x(t), t).subs(t,0): 0})
的调用使得x
它是一个“定义的函数”。
所以,x
作为一个未定义的函数,只t
在创建微分方程时需要的点传递它是要走的路:
import sympy as sp
t = sp.symbols('t')
x = sp.Function('x')
diffeq = sp.Eq(x(t).diff(t, t) - x(t), sp.cos(t))
res = sp.dsolve(diffeq, ics={x(0): 0, sp.diff(x(t), t).subs(t,0): 0})
(另外,尝试传入t
第二个参数 do dsolve 会产生另一个错误。文档告诉 sympy 应该能够正确猜测它,所以我把它省略了 - 只是为了找到正确的参数,x(t)
稍后会出现)
这给了我 res =
Eq(x(t), exp(t)/4 - cos(t)/2 + exp(-t)/4)
推荐阅读
- php - 如何将 php.ini 添加到 kubernetes yaml 中的 configmap
- reactjs - 尝试使用清单中的以下图标时出错
- database - 在 sonarqube 中备份和恢复
- android - Snapshot Listener 如何处理离线数据?
- c# - 在 C# 中更改为速记属性后使用模型反序列化时,值变为空
- angular9 - `Angular9` 中没有`$ rootScope`。可以使用什么?
- c# - 如何从 C# 中的图片中检测(以及稍后解析)二维码?
- python - 类型错误:% 的不支持的操作数类型:'list' 和 'str'
- css - 将 X 和 Y 中的元素缩放相同数量的像素
- reactjs - 如何获得新的 (2020) React Developer Tools 以像旧版本一样显示元素?