python - 如何用 sympy 解析和数值求解一阶线性微分方程?

标签 python scipy sympy numerical-methods differential-equations

如何在 sympy 中求解这样的简单线性微分方程?

y' + p(t)y = q(t)

我正在寻求以两种方式解决它:如果可能的话,符号地(分析地),如果 sympy 可以导出积分因子等,以及一种以数字方式进行计算的方法,以便可以比较两者。如何在 sympy 中完成此操作? sympy.mpmath.odefun 是查看的正确位置吗?

最佳答案

Herehere是一些例子。

对于你的问题,你可以写出你的等式:

y' + p(t)y - q(t) = 0

然后使用dsolve()

import sympy

t = sympy.Symbol('t')

y = sympy.Function('y')(t)    
p = sympy.Function('p')(t)
q = sympy.Function('q')(t)

y_ = sympy.Derivative(y, t)

# y' + p(t)y - q(t)
sol = sympy.dsolve(y_ + p*y - q, y)

print(sol)

解决方案作为函数

(注意:这是我通过阅读文档想出的一个快速解决方案。我对 sympy 没有经验。可能有更好的方法来执行以下操作。)

假设您想求解y' = y

from sympy import *

t = symbols('t')

y = Function('y')(t)
y_ = Derivative(y, t)

sol = dsolve(y_ - y, y)

我们做了和以前一样的事情。现在,要使用 sol 的第二部分,我们使用 .args[1]。然后我们创建一个函数 f(t_) 并使用 subs() 替换 t 值。

def f(t_): 
    return sol.args[1].subs([(t, t_)])

print(sol)
print(f(0))

关于python - 如何用 sympy 解析和数值求解一阶线性微分方程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28917249/

相关文章:

javascript - 将 Python/Boo/Ruby 类语法编译为 C/C++/LLVM/Javascript 的工具(使用 JS ArrayBuffer 提高速度)

python - 堆栈并评估后缀

python - 四倍精度特征值、特征向量和矩阵对数

python - Scipy最小二乘: "func() missing n required positional argument: ' n_ 1', ' n_ 2'..."

python - 使用 scipy.io.wavfile 读取 wav 文件然后写入不会重现原始文件

python - sympylambdaify 添加两个函数

python - 字典中两个列表结果的比较具有重复的项目

python - XlsxWriter 柱线图

math - 将 Sympy 表达式简化为变量的隐式函数

python - 无法评估 sympy 中的跟踪