Sympy符号计算
什么是符号计算?
符号计算以符号方式处理数学对象的计算。这意味着数学对象被精确地表示,而不是近似地表示,并且具有未评估变量的数学表达式被保留为符号形式。
>>> import math
>>> math.sqrt(9)
3.0
>>> math.sqrt(8)
2.82842712475
>>> import sympy
>>> sympy.sqrt(3)
sqrt(3)
# 符号结果可以象征性地简化
>>> sympy.sqrt(8)
2*sqrt(2)
>>> from sympy import *
>>> x = symbols('x')
>>> a = Integral(cos(x)*exp(x), x)
>>> Eq(a, a.doit())
Eq(Integral(exp(x)*cos(x), x), exp(x)*sin(x)/2 + exp(x)*cos(x)/2)
运行结果:
∫ e x cos ( x ) d x = e x sin ( x ) 2 + e x cos ( x ) 2 \int e^{x} \cos (x) d x=\frac{e^{x} \sin (x)}{2}+\frac{e^{x} \cos (x)}{2} ∫excos(x)dx=2exsin(x)+2excos(x)
在使用前在SymPy变量必须定义
通常,最好的做法是将Symbols分配给同名的Python变量,尽管有例外:符号名称可以包含Python变量名称中不允许的字符,或者可能只是想通过赋值长的符号来避免键入长名称名称为单字母Python变量。
>>> from __future__ import division
>>> from sympy import *
>>> x, y, z, t = symbols('x y z t')
>>> k, m, n = symbols('k m n', integer=True)
>>> f, g, h = symbols('f g h', cls=Function) # 定义函数符号变量
>>> from sympy import symbols
>>> x, y = symbols('x y') # 定义变量
>>> expr = x + 2*y
>>> expr
x + 2*y
>>> expr + 1
x + 2*y + 1
>>> expr - x
2*y
>>> x*expr
x*(x + 2*y)
# 符号形式转换
>>> from sympy import expand, factor
>>> expanded_expr = expand(x*expr)
>>> expanded_expr
x**2 + 2*x*y
>>> factor(expanded_expr)
x*(x + 2*y)
import math
from sympy import *
init_printing()
math.sqrt(2)
1.4142135623730951 \displaystyle 1.4142135623730951 1.4142135623730951
sqrt(2)
2 \displaystyle \sqrt{2} 2
pi
π \displaystyle \pi π
x,y,z,a,b,c,n,r = symbols('x,y,z,a,b,c,n,r')
alpha,beta,gamma,theta = symbols('alpha,beta,gamma,theta')
log(alpha**beta)+gamma
γ + log ( α β ) \displaystyle \gamma + \log{\left(\alpha^{\beta} \right)} γ+log(αβ)
sin(x)**2+cos(y)**2
sin 2 ( x ) + cos 2 ( y ) \displaystyle \sin^{2}{\left(x \right)} + \cos^{2}{\left(y \right)} sin2(x)+cos2(y)
mu,sigma = symbols('mu,sigma')
mu,sigma
( μ , σ ) \displaystyle \left( \mu, \ \sigma\right) (μ, σ)
b = exp(-(x-mu)**2/(2*sigma)**2)
b
e − ( − μ + x ) 2 4 σ 2 \displaystyle e^{- \frac{\left(- \mu + x\right)^{2}}{4 \sigma^{2}}} e−4σ2(−μ+x)2
求导
(x**2).diff()
2 x \displaystyle 2 x 2x
sin(x).diff()
cos ( x ) \displaystyle \cos{\left(x \right)} cos(x)
(x**2+x*y+y**2).diff(x)
2 x + y \displaystyle 2 x + y 2x+y
diff(x**2+x*y+y**2,y)
x + 2 y \displaystyle x + 2 y x+2y
diff(x**3+x**2+2*x+x*y+y**2,x,2)
2 ( 3 x + 1 ) \displaystyle 2 \left(3 x + 1\right) 2(3x+1)
(x**3+x**2+2*x+x*y+y**2).diff(x,2)
2 ( 3 x + 1 ) \displaystyle 2 \left(3 x + 1\right) 2(3x+1)
(x**3+x**2+2*x+x*y+y**2).diff(x,2).expand() # expand()展开式子
6 x + 2 \displaystyle 6 x + 2 6x+2
b
e − ( − μ + x ) 2 4 σ 2 \displaystyle e^{- \frac{\left(- \mu + x\right)^{2}}{4 \sigma^{2}}} e−4σ2(−μ+x)2
b.diff(x)
− ( − 2 μ + 2 x ) e − ( − μ + x ) 2 4 σ 2 4 σ 2 \displaystyle - \frac{\left(- 2 \mu + 2 x\right) e^{- \frac{\left(- \mu + x\right)^{2}}{4 \sigma^{2}}}}{4 \sigma^{2}} −4σ2(−2μ+2x)e−4σ2(−μ+x)2
b.diff(x,2)
( − 2 + ( μ − x ) 2 σ 2 ) e − ( μ − x ) 2 4 σ 2 4 σ 2 \displaystyle \frac{\left(-2 + \frac{\left(\mu - x\right)^{2}}{\sigma^{2}}\right) e^{- \frac{\left(\mu - x\right)^{2}}{4 \sigma^{2}}}}{4 \sigma^{2}} 4σ2(−2+σ2(μ−x)2)e−4σ2(μ−x)2
b.diff(x).diff(x)
− e − ( − μ + x ) 2 4 σ 2 2 σ 2 + ( − 2 μ + 2 x ) 2 e − ( − μ + x ) 2 4 σ 2 16 σ 4 \displaystyle - \frac{e^{- \frac{\left(- \mu + x\right)^{2}}{4 \sigma^{2}}}}{2 \sigma^{2}} + \frac{\left(- 2 \mu + 2 x\right)^{2} e^{- \frac{\left(- \mu + x\right)^{2}}{4 \sigma^{2}}}}{16 \sigma^{4}} −2σ2