【SymPy】(一)SymPy简介[通俗易懂]

【SymPy】(一)SymPy简介[通俗易懂]SymPy介绍文章目录SymPy介绍1什么是符号计算2另一个例子3SymPy强大之处SymPy的全称为SymbolicPython,是一款用于符号运算的python库

在这里插入图片描述

SymPy简介

SymPy的全称为Symbolic Python,是一款用于符号运算的python库。

1 什么是符号计算

符号计算以符号的方式处理数学对象的计算。这意味着数学对象是精确表示的,而不是近似表示的,带有未赋值变量的数学表达式是以符号形式保留的。

举个例子。假设我们想使用内置的Python函数来计算平方根。我们可以这样做

In [1]: import math

In [2]: math.sqrt(9)
Out[2]: 3.0

9是完全平方数,所以我们得到了确切的答案3。但是假设我们计算了一个非完全平方数8的平方根

In [3]: math.sqrt(8)
Out[3]: 2.8284271247461903

我们得到的是一个近似结果2.82842712475。但这不是8的精确平方根(实际上,8的实际平方根不能用有限的小数表示,因为它是一个无理数)。

怎么得到精确结果: 8 = 4 ⋅ 2 = 2 2 \sqrt{8}=\sqrt{4 \cdot 2}=2 \sqrt{2} 8
=
42
=
22
。这就需要用到符号计算了。在SymPy这样的符号计算系统中,非完全平方数的平方根在默认情况下不计算:

In [5]: import sympy

In [6]: sympy.sqrt(3)
Out[6]: sqrt(3)

此外,符号结果还可以被符号化地简化。

In [7]: sympy.sqrt(8)
Out[7]: 2*sqrt(2)

2 另一个例子

上面的例子展示如何使用SymPy精确地处理无理数,但它的功能远不止于此。像SymPy这样的符号计算系统(也经常被称为计算机代数系统,或者简称CASs)能够计算带有变量的符号表达式。

在SymPy中,变量是使用符号symbols定义的。与许多符号计算系统不同,SymPy中的变量必须在使用前定义。让我们定义一个符号表达式,表示数学表达式 x + 2 y x+2y x+2y

In [8]: from sympy import symbols

In [9]: x, y = symbols('x y')

In [10]: expr = x + 2*y

In [11]: expr
Out[11]: x + 2*y

注意,我们编写x+2*y就像编写xy是普通Python变量一样。但是在本例中,表达式结果不是得到具体的值。

In [13]: expr+1
Out[13]: x + 2*y + 1

In [14]: expr-x
Out[14]: 2*y

注意上面例子中的一些东西。当我们输入expr-x时,我们没有得到x+2*y-x,而是只有2*yx-x自动地相互抵消。这类似于sqrt(8)自动转换为上面的2*sqrt(2)
但SymPy并不总是这样,比如:

In [15]: x*expr
Out[15]: x*(x + 2*y)

在这里,我们可能希望分解形式 x ( x + 2 y ) x(x+2y) xx+2y转换成扩展形式 x 2 + 2 x y x^2+2xy x2+2xy。但SymPy有一个风格。除了像 x − x = 0 x−x=0 xx=0 8 = 2 2 \sqrt{8}=2 \sqrt{2} 8
=
22
这样明显的简化之外,大多数简化不会自动执行。这是因为我们可能需要分解形式,也可能需要扩展形式。分解形式和扩展形式适用于不同场景。因此,SymPy提供了分解形式和扩展形式的转换函数expandfactor

In [16]: from sympy import expand, factor

In [17]: expanded_expr = expand(x*expr)

In [18]: expanded_expr
Out[18]: x**2 + 2*x*y

In [19]: factor(expanded_expr)
Out[19]: x*(x + 2*y)

3 SymPy强大之处

SymPy的真正强大之处是做各种类型的符号计算。SymPy可以符号形式地简化表达式、计算导数、积分和极限、解方程、处理矩阵等等。它包括绘图、打印(如公式的2D打印输出,或 LaTeX \LaTeX LATEX形式打印),代码生成,物理学,统计学,组合学,数论,几何学,逻辑等。

下面举一些例子来感受一下SymPy的强大:

In [20]: from sympy import *

In [21]: x, t, z, nu = symbols('x t z nu')

In [22]: init_printing(use_unicode=True) # 指定结果用unicode字符打印出来。

sin ⁡ ( x ) e x \sin (x) e^{x} sin(x)ex的微分:

In [23]: diff(sin(x)*exp(x), x)
Out[23]: 
 x           x
ℯ ⋅sin(x) + ℯ ⋅cos(x)

计算积分: ∫ ( e x sin ⁡ ( x ) + e x cos ⁡ ( x ) ) d x \int\left(e^{x} \sin (x)+e^{x} \cos (x)\right) d x (exsin(x)+excos(x))dx

In [24]: integrate(exp(x)*sin(x) + exp(x)*cos(x), x)
Out[24]: 
 x
ℯ ⋅sin(x)

计算 ∫ − ∞ ∞ sin ⁡ ( x 2 ) d x \int_{-\infty}^{\infty} \sin \left(x^{2}\right) d x sin(x2)dx

In [25]: integrate(sin(x**2), (x, -oo, oo))
Out[25]:2⋅√π
─────
  2

计算极限: lim ⁡ x → 0 sin ⁡ ( x ) x \lim _{x \rightarrow 0} \frac{\sin (x)}{x} limx0xsin(x)

In [26]: limit(sin(x)/x, x, 0)
Out[26]: 1

求解方程: x 2 − 2 = 0 x^{2}-2=0 x22=0

In [27]: solve(x**2 - 2, x)
Out[27]: [-2,2]

求解微分方程: y ′ ′ − y = e t y^{\prime \prime}-y=e^{t} yy=et

In [30]:  y = Function('y')

In [31]:  dsolve(Eq(y(t).diff(t, t) - y(t), exp(t)), y(t))
Out[31]: 
           -t   ⎛     t⎞  t
y(t) = C₂⋅ℯ   +  ⎜C₁ + ─⎟⋅ℯ
                ⎝     2

求矩阵 [ 1 2 2 2 ] \left[\begin{array}{ll}1 & 2 \\2 & 2\end{array}\right] [1222]特征值:

In [32]: Matrix([[1, 2], [2, 2]]).eigenvals()
Out[32]:31717   3   ⎫
⎨─ + ───: 1, - ─── +: 1⎬
⎩2    2         2    2

:1表示代数重数为1

∫ 0 π cos ⁡ 2 ( x ) d x \int_{0}^{\pi} \cos ^{2}(x) d x 0πcos2(x)dx字符表达式转换为 LaTeX \LaTeX LATEX代码

In [33]: latex(Integral(cos(x)**2, (x, 0, pi)))
Out[33]: '\\int_{0}^{\\pi} \\cos^{2}{\\left (x \\right )}\\, dx'

4 为什么使用SymPy

首先,SymPy是完全免费的。它是开源的,并且是在自由的BSD许可下授权的,所以你可以修改源代码,甚至可以出售它。这与流行的商业系统(如Maple或Mathematica)形成了对比,后者的许可证成本高达数百美元。

第二,SymPy使用Python。大多数计算机代数系统都是使用自己开发的语言。SymPy不是,它完全用Python编写,用Python执行。这意味着,如果你已经了解Python,那么开始使用SymPy就容易多了。我们已经知道Python是一种well-designed, battle-tested的语言。通过重用现有的语言,我们能够专注于那些重要的东西:数学。

另一个计算机代数系统Sage也使用Python作为其语言。但Sage很大,下载量超过1千兆字节。SymPy的一个优点是它下载量很小。而且,它除了Python之外没有其他依赖项,因此几乎可以在任何地方轻松使用。再者,Sage的目标和SymPy的目标是不同的。Sage的目标是成为一个功能齐全的数学系统,集成所有主要的开放源码数学系统。当您在Sage中调用某些函数(如integrate)时,它会调用它包含的一个开放源代码包。事实上,Sage中包含了SymPy。另一方面,SymPy的目标是成为一个独立的系统,所有的功能都在SymPy本身实现。

SymPy的最后一个重要特点是它可以用作库。许多计算机代数系统关注于在交互环境中的可用性,但是如果您希望自动化或扩展它们,这是很难做到的。使用SymPy,您可以在交互式Python环境中轻松地使用它,也可以将它导入到自己的Python应用程序中。SymPy还提供了api,可以方便地用自己的自定义函数扩展它。

未完待续。。。

【SymPy】(二)使用SymPy需要避开的坑

【SymPy】(三)基本操作

【SymPy】(四)打印机

【SymPy】(五)简化

【SymPy】(六)微积分

【SymPy】(七)方程求解

【SymPy】(八)矩阵

【SymPy】(九)高级表达式操作

今天的文章【SymPy】(一)SymPy简介[通俗易懂]分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/74069.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注