符号数学库-sympy

这篇博客介绍了Python的符号数学库SymPy,详细展示了如何进行符号声明、代数运算、解方程和方程组、微积分操作,以及解微分方程和微分方程组。通过实例演示了SymPy在机器学习损失函数计算中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


前言

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)])

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

总结

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值