SymPy是一个符号计算的Python库。它的目标是成为一个全功能的计算机代数系统,同时保持代码简洁、易于理解和扩展。它完全由Python写成,不依赖于外部库。

以下使用导入并开启漂亮的打印

import sympy

sympy.init_printing(pretty_print=True)

有理数 Rationals

1
sympy.Rational(1, 3)

out: 13

特殊的无理数

1
sympy.pi, sympy.E, sympy.oo

out:(π, e, )

代数运算

声明一个代数符号

1
2
x = sympy.Symbol('x') # 注意,声明一个代数的时候 S 为大写
x

out: 𝑥

声明多个代数符号

1
2
x, y = sympy.symbols('x y')
x, y

out: (x, y)

声明带下标的代数符号

1
2
x1, x2 = sympy.symbols('x1 x2')
x1, x2

out:(x1, x2)

简单的代数运算

1
x ** 2 + 2 * x + 1

out:x2+2x+1

1
x1 + x2 ** 2 - x2 + x1 /2

out:3x12+x22x2

展开和分解

1
x, y = sympy.symbols('x y')

展开多项式

1
sympy.expand((x + y) ** 2)

out:x2+2xy+y2

展开三角函数

1
sympy.expand(sympy.sin(x + y), trig=True)

out:sin(x)cos(y)+sin(y)cos(x)

化简

1
sympy.simplify((x + x*y) / x)

out:y+1

求和运算Sum

112+21+122+22++1102+210

1
2
expr = sympy.Sum(1/(x**2 + 2*x), (x, 1, 10))
expr.doit()

expr:x=1101x2+2x out: 175264

乘积运算 Product

112+21×122+22××1102+210

1
2
expr = sympy.Product(1/(x**2 + 2*x), (x, 1, 10))
expr.doit()

expr:x=1101x2+2x out:1869100503040000

极限计算

limx0sinxx

1
sympy.limit(sympy.sin(x)/x, x, 0) # 1

limxx

1
sympy.limit(x, x, sympy.oo)             # ∞

limx1x

1
sympy.limit(1/x, x, sympy.oo)         # ∞

左极限和右极限

limx01xlimx0+1x

1
2
sympy.limit(1/x, x, 0, dir='+')        # ∞
sympy.limit(1/x, x, 0, dir='-') # −∞

导数

1
sympy.diff(x**2, x)

out:2x

1
sympy.diff(sympy.sin(2*x), x)

out:2cos(2x)

1
sympy.diff(sympy.sin(x**2+2*x), x)

out:(2x+2)cos(x2+2x)

多阶导数

1
sympy.diff(x**2, x, 2) # 2(x**2对 x 求二阶导数)

积分

不定积分

6x5

1
sympy.integrate(6 * x**5, x)

out:x6

定积分

0π2sinx

1
sympy.integrate(sympy.sin(x), (x, 0, sympy.pi/2))

out:1

解方程

解一元方程

1
sympy.solve(x**2-3*x+2, x)

out:[1, 2]

解二元方程

1
sympy.solve([x+5*y-2, -3*x+6*y-15], [x, y])

out:Missing or unrecognized delimiter for \left

代数运算

1
2
expr = x**2 + 2*x + 1
expr

out:x2+2x+1

  1. 令 x = 2
1
expr.subs(x, 2)

out:9

  1. 令 x = y + 1
1
expr.subs(x, y+1)

out:2y+(y+1)2+3

阶乘

1
2
3
n = sympy.Symbol('n')
a = sympy.factorial(n)
a.subs(n, 5)

out:120

多元函数的代数

1
2
expr = x ** 3 + 4 * x * y - z
expr

out:x3+4xyz

1
expr.subs([(x, 2), (y, 4), (z, 0)])

out:40

字符串转 SymPy 表达式

1
2
3
str_expr = "x**2 + 3*x - 1/2"
expr = sympy.sympify(str_expr)
expr

out:x2+3x12

概率论问题

导入框架import sympy.stats

骰子问题

  1. 创建一个有 6 个面的骰子
1
x = sympy.stats.Die('x', 6)
  1. 查看每个面出现的概率
1
sympy.stats.density(x).dict

out:Missing or unrecognized delimiter for \left

  1. 随机丢一个骰子
1
sympy.stats.sample(x)        # out: 5
  1. 丢出骰子大于 3 的概率
1
sympy.stats.P(x > 3)

硬币问题

  1. 创建一个硬币
1
c = sympy.stats.Coin('c')
  1. 查看每个面出现的概率
1
sympy.stats.density(c).dict

out:Missing or unrecognized delimiter for \left

与创建两个面的骰子类似

正态分布

  1. 创建一个标准正态分布
1
z = sympy.stats.Normal('z', 0, 1)
  1. 标准正态分布中数据大于 1 的概率
1
2
sympy.stats.P(z > 1).evalf()
# out: 0.158655253931457

评论

来发评论吧~
Powered By Valine
v1.4.14