前言

SymPy 是一个用 Python 编写的符号数学库,用于进行符号数学计算。可以进行符号化函数的创建,求导,解方程,微积分,微分方程等操作。
【注】:使用这个符号化库,最好使用jupyter演示效果最佳,打印出来的效果并不好,所以更加建议使用jupyter。


一、符号声明

创建数学上的符号,第一步就是要进行符号声明:

from sympy import symbols

x, y, z = symbols('x y z')
z

输出:
在这里插入图片描述

二、代数运算

进行函数的创建、表达式的展开、因式分解等

x, y, z = symbols('x y z')
f = (x+y+z)**2
f

输出:
在这里插入图片描述

g = x**2 + y**2 + z**2 + 2*x*y + 2*x*z + 2*y*z
g

输出:
在这里插入图片描述

f_ = f.expand()  # 展开表达式
f_

输出:
在这里插入图片描述

g_ = g.factor()  # 因式分解
g_

输出:
在这里插入图片描述
在这里插入图片描述

三、求解方程和方程组

1 求解一元方程

from sympy import symbols, Eq
x = symbols('x')

# 定义方程
eq1 = Eq(x**2 - 4, 0)
eq1

输出:
在这里插入图片描述

solutions = solve((eq1,), (x,))
solutions

输出:
在这里插入图片描述

2 求解方程组

from sympy import symbols, Eq, solve

x, y = symbols('x y')

# 定义方程组
eq1 = Eq(3*x + y, 1)
eq2 = Eq(x - 2*y, 3)

# 求解方程组
solutions = solve((eq1, eq2), (x, y))
solutions

输出:
在这里插入图片描述

四、微积分(求导(包括偏导)求积分等)

from sympy import diff, integrate

f = x**3 + 2*x**2 + x + 1
derivative = diff(f, x)  # 求导数
integral = integrate(f, x)  # 求不定积分
definite_integral = integrate(f, (x, 0, 1))  # 求定积分,从 0 到 1

1 求导(偏导)

from sympy import diff, integrate

x , y ,z = symbols('x y z')
f = x**2 + 2*x*y + y**2
df_dy = diff(f, y)  # 对 y 求偏导
df_dy

输出:
在这里插入图片描述

2 求不定积分与定积分

from sympy import diff, integrate
x = symbols('x')
f = x**3 + 2*x**2 + x + 1
integral = integrate(f, x)  # 求不定积分
integral

输出:
在这里插入图片描述

definite_integral = integrate(f, (x, 0, 1))  # 求定积分,从 0 到 1
definite_integral

输出:
在这里插入图片描述

五、解微分方程与微分方程组

1 解微分方程

from sympy import symbols, Function, dsolve

x = symbols('x')
y = Function('y')(x)

# 定义微分方程
ode = y.diff(x) - (x**2 + 1)

# 求解微分方程
solution = dsolve(ode)
solution

输出:
在这里插入图片描述

2 解微分方程组

from sympy import symbols, Function, Eq, dsolve

t = symbols('t')
x = Function('x')(t)
y = Function('y')(t)

# 定义微分方程组
eq1 = Eq(x.diff(t), -2*x + y)
eq2 = Eq(y.diff(t), x - 3*y)

# 求解微分方程组
solutions = dsolve((eq1, eq2))
solutions

在这里插入图片描述

solutions[0]

在这里插入图片描述

solutions[1]

在这里插入图片描述

下面我们玩个有意思的,机器学习中的损失函数

from sympy import symbols
J,w,b = symbols('J w b')
J = w**2 + b*w
J

输出:
在这里插入图片描述

dJ_dw = J.diff(w)
dJ_dw

输出:
在这里插入图片描述

dJ_dw.subs([(w,2),(b,3)])

输出:
在这里插入图片描述

总结

这个库完全就是完全数学符号化,很友好,很有意思。另外还有一些其他的数学操作,例如求极限或者求级数展开等。希望你能喜欢这个符号库,反正虽然用处不是很大的样子,但是我很喜欢。

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐