sympy库的学习

学习小技巧:

第一轮:跟着理论知识学习,了解我们要掌握的东西有哪些,都是没有运行过的,便于第二轮看着别人的大妈不至于一点记忆都没有直接看着打

第二轮:上手实践,首先复刻,找相应知识系统学习,要运行,抠细节

第三轮:自己找东西按照自己的思路解题,记住自己容易忘记的点(找地方记下来,自己明白自己哪一点记不住就行,随便你以任何方式记下来)

剩下:根据自己掌握情况练习

第一轮(理论知识)

1.安装

pip install sympy

python

import sympy

2.自变量

通过symbols方法将字符串声明为数学函数的变量,这些变量往往是函数的自变量。

import sympy
# 声明单个变量
x=sympy.symbols('x')
print(x)

# 声明多个变量,以下三个方法都可以
x,y=sympy.symbols(['x','y'])
# x,y=sympy.symbols("x,y")
# x,y=sympy.symbols("x y")

3.函数表达式(Expr)

(1)函数表达式通过变量的运算构造具体函数,或者通过Function构造抽象函数
#### 函数表达式通过变量的运算构造具体函数,或者通过Function函数构造抽象函数。
# 具体函数
f=sympy.sqrt(3*x*y)+x*sympy.sin(y)+y**2+x**3
# 抽象函数
u=sympy.function('u')
(2)expr.subs可以实现变量替换,替换成数字实现赋值
#### 变量替换与赋值
# expr.subs()可以实现变量替换,替换成数字实现赋值。

g1=f.subs(x,y)  # 将f表达式中的x换成y,并将替换的结果赋给g
g2=f.subs({x:2*x,y:2*y})  # 多次替换,字典
g3=f.subs({x:1,y:2})
(3) 精确求值

expr.evalf((n))可以求一个表达式的保留n位有效数字的精确值

#### 精确值
# expr.evalf(n)可以求一个表达式的保留n位有效数字的精确值
g3=f.subs({x:1,y:2})
print(g.evalf(4))  # 保留n位有效数字的精确值,8.359
(4)微分

sympy可以实现求微分,方法如下

#### 微分
# sympy可以实现自动求微分,方法如下
h1=sympy.diff(f,x)
h1=f.diff(x)    #同上
h2=sympy.diff(f,x,2,y,1)
# f对x求2次微分,对y求1次微分
(5)积分

ympy可以实现自动求不定积分和定积分,区别在于是否传入积分上下限

#### 积分
# 可以实现自动求不定积分和定积分,区别在于是否传入积分上下限
l1=sympy.integrate(f,x)  #不定积分
l2=sympy.integrate(f,(x,1,3))    # 定积分

4.极限

sympy可以实现求极限,注意极限方向

#####  sympy可以实现求极限,注意极限方向

# 趋于无穷
lim1=sympy.limit(f,x,sympy.oo)
# 趋于0,默认值dir="0",也就是趋于+0
lim2=sympy.limit(f,x,0)
# 趋于0,默认值dir="+"调整为dir="_",也就是趋于-0
lim3=sympy.limit(f,x,0,dir="-")

5.解方程

sympy可以实现解方程,方法是令Expr=0,所以在解方程时,要先构造一个等于0的左端项。返回结果是一个列表,每一项是一个解。如果是方程组,解列表每一项是一个元组,元组对应位置是对应自变量的值。

求解方程是要函数是solveset,使用语法是solveset(equation, variable=None, domain=S.Complexes),分别是等式(默认等于0,),变量,定义域。

sp.solveset(E1,x,domain=sp.Reals)
 

请注意,函数solve也可以用于求解方程式,solve(equations, variables)

#### sympy可以实现解方程,方法是令Expr=0,所以在解方程时,要先构造宇哥
#### 等于0的左端项。返回结果是一个列表,每一项是一个解,如果是方程组,解
#### 解列表每一项是一个元组,元组对应位置是对应自变量的值

func=f-3
# 返回f=3时x的值
sympy.solve(func,x) 
# x**2+y**2=1,x+y=1
sympy.solve([x**2+y**2-1,x+y-1],[x,y])

 6.泰勒展开(不常见,但要会用)

一元展开

sympy可以实现泰勒展开,具体函数抽象函数都可以。但是不能对多元函数同时泰勒展开。

#### 一元展开
# sympy可以实现泰勒展开,具体函数抽象函数都可以。但是不能对多元函数同时泰勒展开。
# f对x在0处泰勒展开到4阶(把这句话记住,下边四个先后顺序就能记住)
taylor1=sympy.series(f,x,0,4)
# f对x在0处泰勒展开到4阶,去除皮亚诺余项
taylor2=sympy.series(f,x,0,4).remove0
# 抽象函数u对x在0处泰勒展开到4阶
taylor=sympy.series(u(x),x,0,4)
多元展开
###### 多元泰勒展开可以使用以下方法
# https://www.thinbug.com/q/23803320
查看展开项
##### 查看展开项
taylor.coeff(x)   # 查看taylor1中项(x-x0)的系数

第二轮

注:

因为在编译运行时结果只能显示最后一步的运行结果,所以我有的知识点,在赋值代码后,又将其截屏分开展示为(1)(2)(3)……,大家与运行的时候就要一步一步运行,最后两个没写,大家试着运行

1.导入

import sympy as sp
x, y, z, t = sp.symbols('x,y,z,t')
print(x+1)

2.e的展开级数并化简

# e指数函数的级数展开,并化简
f=sp.series(sp.exp(x),x0=1,n=5)

f
sp.expand(f)
# 输出latex代码
sp.latex(sp.expand(f))

(1)e的指数级数

(2)e的指数级数的展开

(3)化简

3.表达式具体输入值

# 表达式输入具体值
expr=sp.exp(x)+1
expr

4.符号化表达式

# 符号化表达式
str_expr='(x+1)**2'
expr=sp.sympify(str_expr)
expr

5.极限

# 极限
sp.Sum(1/x**2,(x,1,sp.oo)).doit()############ 什么意思
sp.limit((1+1/x)**x,x,sp.oo)

由于结果显示最后一步,我拆开截屏(有的是因为在其上边拓展,有的是相同知识点的两个式子,没有将其分开,在编写代码运行的时候写在一个代码块中)

(1)第一个式子
# 极限
sp.Sum(1/x**2,(x,1,sp.oo)).doit()############ 什么意思

(2)第二个式子

6.计算导数

# 计算导数
expr=sp.sin(x)
sp.diff(expr,x,2)

# 多元函数偏导
sp.sin(x*y).diff(x,1)

(1)对x求两次导

(2)对多元函数求偏导

7.积分运算(integrate)

(1)不定积分

(2)定积分

8.解方程

# 解方程
E1=sp.Eq(x**2+3*x-4,0)
E1
### domain=sp.Reals用于求解方程
# 求解方程是要函数是solveset,
# 使用语法是solveset(equation, variable=None, domain=S.Complexes/Reals  #复数集),
# 分别是等式(默认等于0,),变量,定义域。
sp.solveset(E1,x,domain=sp.Reals)


E2=sp.Eq(x**2+3*x+4,0)
E2
sp.solveset(E2,x,domain=sp.Complexes)
sp.solveset(E2,x,domain=sp.Reals)

9.解微分方程

# 解微分方程
# 建立函数变量
f=sp.symbols('y',cls=sp.Function)
E3=sp.Eq(f(x).diff(x)-2*f(x),sp.sin(x))
E3

sp.dsolve(E3,f(x))

10.矩阵运算

#### 矩阵运算
# 构造矩阵
sp.Matrix([[1,-1],[2,3],[3,4]])
sp.Matrix([1,2,3])

# 转置
sp.Matrix([1,2,3]).T

A=sp.Matrix([[1,2],[-2,1]])
B=sp.Matrix([[3,4],[-1,2]]).T
A+B
A*B
A**2
B**2   # 得出结论:B转置后B**2结果也会转置

(1)EA.tanspose() 为EA的转置矩阵

(2)EA.H 为EA的共轭转置矩阵

(3)伴随矩阵

A = Matrix([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
A

adj_A=A.adjugate()
adj_A

注:因为学的时候是基于一些其他人的笔记及其视频来学习的,主要整理学习方法。

如有侵权,请告知,妥善处理

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值