如何用python进行符号求解?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何用python进行符号求解?相关的知识,希望对你有一定的参考价值。

Python中有多个符号计算库可以用于符号求解,其中最常用的是SymPy库。SymPy是一个符号计算库,它提供了许多用于符号计算的函数和类。可以使用SymPy库来进行符号求解,例如求导、积分、求解方程、求解微分方程等。
以下是一个使用SymPy库进行符号求解的示例代码:
import sympy as sp
# 定义符号变量
x = sp.Symbol('x')
# 求导
f = sp.sin(x) + x**2
f_prime = sp.diff(f, x)
print("f的导函数为:", f_prime)
# 求积分
g = x**2 + 2*x + 1
g_integral = sp.integrate(g, x)
print("g的不定积分为:", g_integral)
# 解方程
h = x**2 + 2*x + 1 - 3
h_roots = sp.solve(h, x)
print("h的解为:", h_roots)
在上面的代码中,我们首先导入了SymPy库。然后,我们定义了一个符号变量x,用于表示未知数。接下来,我们分别使用diff()函数、integrate()函数和solve()函数来求导、积分和解方程。最后,我们输出了相应的结果。
SymPy库提供了非常丰富的符号计算功能,包括微积分、线性代数、离散数学、几何学等多个领域。因此,如果需要进行符号计算,SymPy库是一个非常好的选择。
参考技术A

利用 sympy 进行符号求解:

from sympy import integrate, symbols

from sympy import exp

x = symbols('x')

integrate(exp(-x**2))

求解结果:

 sqrt(pi)*erf(x)/2

其中 erf(x) 不是一个初等函数, 百度一下了解更多.

如何用 Python 解决僵硬的颂歌?

【中文标题】如何用 Python 解决僵硬的颂歌?【英文标题】:How to solve a stiff ode with Python? 【发布时间】:2012-02-03 04:32:03 【问题描述】:

我是 Python 初学者。我正在尝试切换我在 matlab 中的一些程序。 我需要求解一个僵硬的 ode 方程,其输入都是矩阵。在matlab中我使用

[ttT,uT] = ode23s('SST',t,fT);

【问题讨论】:

你能用数学符号来描述它吗?不是每个人都熟悉 matlab。 这可能有用:***.com/questions/2088473/… ode23s 在本例中是 Matlab 中刚性方程的求解器,SST 是辅助函数,用于建立状态空间关系,z = A * z + B,A 和 B 是矩阵。 A是正方形,B是圆柱。 t 是一个具有时间增量的数组,fT 是一个具有初始条件的数组。 【参考方案1】:

对于您在 Matlab 中执行的大多数操作,您可以使用 Python 中的 NumPy 模块来执行它们。可以找到here。

您可能还会发现相关模块 SciPy 也很有用。

PyDSTool 也可能与您相关。它是 Radau 求解器的包装器。

那么您可能想尝试matplotlib 进行绘图。它的工作原理很像 Matlab 的绘图。

以下链接也可能有所帮助:

http://www.ews.uiuc.edu/~mrgates2/ode/

http://wiki.python.org/moin/NumericAndScientific?action=show&redirect=SciPy

Integrate stiff ODEs with Python

【讨论】:

非常感谢。我已经安装了 numpy 和 scipy。通过谷歌,我找到了 mrgates 页面。但是,我不知道如何安装他的“模块”。我认为盖茨的方法让一切变得更简单。我不是环保署订户。 最后一个链接,对不起,对我来说太模糊了。我不明白哪个有用或没有!我“只是”想要一个简单的东西,但我在 python 中,它不是! 要安装 Gates 的模块,请按以下步骤操作: 1) 解压缩存档。 2) 假设您解压缩到 C:\ode-0.1a4.tar。确认此文件夹中有一个名为“setup.py”的文件。 3)现在在这个文件夹中打开命令行并运行这个命令:'python setup.py install'。这应该在您的机器上安装模块。现在你可以去导入这个模块并按照盖茨先生在他的页面上描述的那样使用它。 很抱歉 EPD 链接,以防它需要订阅。我会删除它。 我添加了指向 PyDSTool 和 matplotlib 模块的链接。也一定要看看它们。【参考方案2】:

如果您向我展示微分方程,我可以为您提供更多帮助,但一般来说,解决僵硬 ODE 系统的好方法是通过下一句话:

solution = scipy.integrate.solve_ivp(function, [t_0, t_f], y0, method='BDF', first_step =0.0001, dense_output=True)

您的函数必须以这种方式预先定义:function(t,variable,parameters)

t_0 = initial value for time
t_f = final value for time
y0  = value of your variables at t_0

对于刚性 ODE 系统,我建议使用“BDF”方法(通常用于求解反应器中的微动力学系统,其中时间的重要性可能会发生很大变化)

有关代码选项的更多信息:https://docs.scipy.org/doc/scipy/reference/generated/scipy.integrate.solve_ivp.html

【讨论】:

以上是关于如何用python进行符号求解?的主要内容,如果未能解决你的问题,请参考以下文章

如何用 Python 解决僵硬的颂歌?

整数规划该如何用MATLAB求解?

如何用Python求解微分方程组

如何用python结合cplex求解混合整数规划问题

如何用python和jieba分词,统计词频?

如何用matlab求解微分方程并画图