栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python:符号计算-sympy

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python:符号计算-sympy

引入

什么是符号计算(Symbolic computation)
就是对数学表达式进行解析计算,而不是近似计算。可以简单分为两类:

  1. 不包含符号的表达式
  2. 包含符号的表达式

sympy
python中可用sympy库进行符号计算。优点:开源,轻量级。可以做的事情:算数运算,微分,积分,矩阵运算等等。

下面总结常用的应用实例。

小例子
In [14]: import sympy as sym

In [15]: import numpy as np

In [16]: sym.sqrt(8)
Out[16]: 2*sqrt(2)

In [17]: np.sqrt(8)
Out[17]: 2.8284271247461903

In [18]: sym.exp(2)
Out[18]: exp(2)

In [19]: np.exp(2)
Out[19]: 7.38905609893065

In [20]: type(sym.sqrt(8))
Out[20]: sympy.core.mul.Mul

In [21]: type(sym.exp(2))
Out[21]: exp

In [32]: a = sym.symbols('a')

In [33]: sym.sqrt(a)
Out[33]: sqrt(a)

注意:

  • sympy计算出的是解析解(精确解),numpy计算出的是近似解;
  • 该解析解的类型是sympy自定义的类型,用来表示精确解。而我们熟悉的int,float等数据类型,都是近似解。
  • 可通过sym.symbols(names)声明符号(变量),然后可对其进行任意的代数运算,比如加减乘除,平方根,指数等等。
  • 在有数学公式渲染的环境中,比如jupyter notebook中,sympy的结果会被MathJax渲染成字母形式。
基本代数运算
In [38]: expr = (a+b)**2

In [39]: expr
Out[39]: (a + b)**2

In [40]: sym.expand(expr)
Out[40]: a**2 + 2*a*b + b**2

In [42]: expr1 = a**2 - 2*a*b + b**2

In [43]: sym.factor(expr1)
Out[43]: (a - b)**2

常用方法:

  • expand,展开表达式
  • factor,合并表达式中的同类项
微分和积分

计算 f ( x ) = a x 2 + b f(x)=ax^2+b f(x)=ax2+b的导数

In [45]: a,b,x = sym.symbols('a b x')

In [46]: f = a*x**2+b

In [52]: sym.diff(f,x)    #对x求1阶导数
Out[52]: 2*a*x

In [53]: sym.diff(f,x,2)    #对x求2阶导数
Out[53]: 2*a

计算不定积分: ∫ ( a x 2 + b ) d x int (ax^2+b)dx ∫(ax2+b)dx

In [55]: sym.integrate(f,x)   #不定积分
Out[55]: a*x**3/3 + b*x

计算定积分: ∫ a b ( a x 2 + b ) d x int_a^b (ax^2+b)dx ∫ab​(ax2+b)dx

In [56]: sym.integrate(f,(x,-1,1))    #[-1,1]区间内的定积分
Out[56]: 2*a/3 + 2*b
极限

计算 lim ⁡ x → 0 = s i n ( x ) x lim_{xto0}=frac{sin(x)}{x} limx→0​=xsin(x)​

In [57]: x = sym.symbols('x')

In [58]: f = sym.sin(x)/x

In [59]: sym.limit(f,x,0)
Out[59]: 1
解方程

解一般方程: x 2 − 2 = 0 x^2-2=0 x2−2=0

In [64]: x = sym.symbols('x')

In [65]: sym.solve(x**2-2, x)
Out[65]: [-sqrt(2), sqrt(2)]

解微分方程: y ′ ′ − y = e x y^{primeprime}-y=e^x y′′−y=ex

In [67]: y = sym.Function('y')

In [71]: equation = sym.Eq(y(x).diff(x,2)-y(x),sym.exp(x))

In [74]: sym.dsolve(equation,y(x))
Out[74]: Eq(y(x), C2*exp(-x) + (C1 + x/2)*exp(x))

notebook中渲染后输出:

矩阵运算 矩阵乘法

计算: [ 0 1 1 0 ] ∗ [ 0 − i i 0 ] left[begin{array}{ll}0 & 1 \ 1& 0end{array}right]*left[begin{array}{ll}0 & -i \ i& 0end{array}right] [01​10​]∗[0i​−i0​]

In [75]: a = sym.Matrix([[0,1], [1,0]])

In [76]: b = sym.Matrix([[0,-1j], [1j,0]])

In [77]: a*b
Out[77]: 
Matrix([
[1.0*I,      0],
[    0, -1.0*I]])

notebook中渲染后输出:

计算: [ a 11 a 12 a 21 a 22 ] ∗ [ b 11 b 12 b 21 b 22 ] left[begin{array}{ll}a_{11} & a_{12} \ a_{21}& a_{22}end{array}right]*left[begin{array}{ll}b_{11} & b_{12} \ b_{21}& b_{22}end{array}right] [a11​a21​​a12​a22​​]∗[b11​b21​​b12​b22​​]

In [78]: a_11,a_12,a_21,a_22 = sym.symbols('a_11 a_12 a_21 a_22')
    ...: b_11,b_12,b_21,b_22 = sym.symbols('b_11 b_12 b_21 b_22')
    ...: 
    ...: a = sym.Matrix([[a_11,a_12], [a_21,a_22]])
    ...: b = sym.Matrix([[b_11,b_12], [b_21,b_22]])
    ...: a*b
Out[78]: 
Matrix([
[a_11*b_11 + a_12*b_21, a_11*b_12 + a_12*b_22],
[a_21*b_11 + a_22*b_21, a_21*b_12 + a_22*b_22]])

notebook中渲染输出:

矩阵张量积
import sympy as sym
from sympy.physics.quantum import TensorProduct

a_11,a_12,a_21,a_22 = sym.symbols('a_11 a_12 a_21 a_22')
b_11,b_12,b_21,b_22 = sym.symbols('b_11 b_12 b_21 b_22')
A = sym.Matrix([[a_11,a_12],[a_21,a_22]])
B = sym.Matrix([[b_11,b_12],[b_21,b_22]])
TensorProduct(A,B)

输出:

[ a 11 b 11 a 11 b 12 a 12 b 11 a 12 b 12 a 11 b 21 a 11 b 22 a 12 b 21 a 12 b 22 a 21 b 11 a 21 b 12 a 22 b 11 a 22 b 12 a 21 b 21 a 21 b 22 a 22 b 21 a 22 b 22 ] displaystyle left[begin{matrix}a_{11} b_{11} & a_{11} b_{12} & a_{12} b_{11} & a_{12} b_{12}\a_{11} b_{21} & a_{11} b_{22} & a_{12} b_{21} & a_{12} b_{22}\a_{21} b_{11} & a_{21} b_{12} & a_{22} b_{11} & a_{22} b_{12}\a_{21} b_{21} & a_{21} b_{22} & a_{22} b_{21} & a_{22} b_{22}end{matrix}right] ⎣⎢⎢⎡​a11​b11​a11​b21​a21​b11​a21​b21​​a11​b12​a11​b22​a21​b12​a21​b22​​a12​b11​a12​b21​a22​b11​a22​b21​​a12​b12​a12​b22​a22​b12​a22​b22​​⎦⎥⎥⎤​

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/833994.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号