sympy学习笔记

计算机代数学的入门之课。

数字、符号、表达式

开启新世界的大门:导入包并且创建符号x、y、t,写出摆线公式,并且求出当$t=\frac{\pi}{2}$时参数方程对应的点坐标。

1
2
3
4
5
6
7
8
from sympy import *

t = symbols('t')

x = sin(t)
y = cos(t)

print(f'({x.subs(t, pi/2)}, {y.subs(t, pi/2)})')

输出

(1, 0)

符号

创建符号有两种方法:构造Symbol类、调用symbols()函数,对于x y z以及希腊符号,还可以直接使用abc里现成的符号。

在下面的代码中,我们从sympy.abc里引入了alpha,创建了xy两个符号,最后单独创建了符号t

1
2
3
4
from sympy import *
from sympy.abc import alpha
x, y = symbols('x, y')
t = Symbol('t')

当然了,还可以创建多字母的符号,就想内置的alpha那样。

1
2
3
from sympy import *
combo = Symbol('combo')
good, perfect = symbols('good, perfect')

其他

sympy.abc下有_clash1_clash2,分别包含了明明冲突的单字母和多字母符号。

表达式

符号的数学运算、函数传参就可以构造出表达式。简单。无需多言。

代入

对表达式或符号调用.subs(符号,值)即可。支持链式调用,比如:

1
2
3
4
5
6
from sympy import *

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

print(z.subs(x, 2).subs(y, 2))

输出

8

也可以代入符号:

1
2
3
4
5
6
7
8
from sympy import *

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

t = Symbol('t')

print(z.subs(x, t).subs(y, t))

输出

2*t**2

也就是$2t^2$

求导与积分

上述求导符号有些人全都见过……

求导:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
from sympy import *

x, y = symbols('x, y')
z = x**2 + y**2
t = x**2 + sin(y) + x * y
expr=exp(-x**2 - y**2)

# 求导
print(diff(t, y))
print(diff(z, x, x))
print(diff(expr, x, x))
print()

# 积分
print(integrate(z, x))
print(integrate(expr, (x, 0, oo), (y, 0, oo)))

输出

x + cos(y)
2
2(2\x**2 - 1)exp(-x\*2 - y**2)

x**3/3 + x*y**2
pi/4

这是表达式:

调用diff(f, *symbols, [...])可以按顺序对若干符号求若干阶导。

调用integrate(f, *符号或限制元组),可以求不定积分或定积分。限制元组的基本格式是(符号,下界,上界)

其他

可以使用 Integral 对象创建未评估的积分,可以通过调用 doit() 方法对其进行评估。以经典的不可积函数为例:

1
2
3
4
5
6
from sympy import *
from sympy.abc import x

y = Integral('exp(-x**2)', x)

print(y.doit())

输出

sqrt(pi)*erf(x)/2

输出结果含有常数项以及误差函数erf(),表明这个函数是个收敛的不可积函数。

doit()的具体细节没有去了解,我暂认为doit()intergal()等价。

矩阵

learning…

其他

并非不重要。

简化

例如$cos^2(x) + sin^2(x) = 1$

1
2
3
4
5
6
7
from sympy import *
from sympy.abc import x

y = sin(x)**2 + cos(x)**2

print(y)
print(simplify(y))

输出

sin(x)2 + cos(x)2
1

展开

expand(f),用于将所有因式展开为多项式表达式

因式

factor(f),该函数将多项式化为因式相乘的形式。

整理

collect(f, single_symbol),将多项式转化为同次幂与其他因式相乘的多项式(胡言乱语中),按符号的降幂排列。例如:

对x、y、z分别调用collect(),结果如下

1
2
3
4
5
6
7
8
from sympy import *
from sympy.abc import x, y, z

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

print(collect(expr, x))
print(collect(expr, y))
print(collect(expr, z))

输出

x**3 + x**2*(2 - z) + x*(y + 1) - 3
x**3 - x**2*z + 2*x**2 + x*y + x - 3
x**3 - x**2*z + 2*x**2 + x*y + x - 3

也就是

其他

未列全的项目有:

  • 化简

请参阅官方文档。

作者

勇敢梧桐树

发布于

2025-01-14

更新于

2025-01-15

许可协议

评论

Your browser is out-of-date!

Update your browser to view this website correctly.&npsb;Update my browser now

×