【Python】实验-Sympy库解线性方程、微积分及矩阵简化

首先安装Sympy库(这是一个计算代数系统,符号数学Python库)。并在代码运行前从sympy库导入“*”这个模块

代码中的数学符号:

  • 加号+、减号-、乘号*、除号/、
  • 指数**、对数log()、e的指数幂exp()
  • 小括号可以改变运算顺序
  • 无穷大oo,(两个小写字母O)
  • 圆周率pi
  • 自然常数E,(一个大写字母E)

一、解线性方程(solve)

例子,二元一次方程组:①2x-y=3;②3x+y=7。
首先符号化x,y

>>>x, y=symbols('x y') #多个字母符号化时,symbol要加s,且首字母小写
>>>solve([2x-y-3,3x+y-7],[x,y])

#要将①②方程都化为等号右边为零的一般式

#solve()的第一个参数是需要解的方程的一般式(即等号右边为0),多个方程以list的形式传入;第二个参数是需要解的未知数,多个未知数同样要以list的形式传入

【Python】实验-Sympy库解线性方程、微积分及矩阵简化_第1张图片
结果如图

二、解微积分(limit、pprint、integrate)

例题,求极限


【Python】实验-Sympy库解线性方程、微积分及矩阵简化_第2张图片
极限

>>>n=Symbol('n') #同样地要对式子中的字母要符号化
>>>print( limit( ((n+3)/(n+2))**n ,n,oo)

#limit()作为求极限函数,第一个参数是表达式,第二个参数是变量,第三参数是趋近值,如上第二个参数和第三个参数所表达的即是n→oo

结果如上

要想使表达式以数学的美观形式表现,可以通过pprint()来完成

>>>pprint(x*(sqrt(x**2+1)-x))

美观如上

例题,求定积分


【Python】实验-Sympy库解线性方程、微积分及矩阵简化_第3张图片
定积分

>>>t,x=symbols('t x')
>>>m=integrate(sin(t)/(pi-t),(t,0,x))
>>>n=integrate(m,(x,0,pi))

#integrate()是求积分函数,可以求定积分也可以求不定积分。第一个参数是积分表达式,第二个参数以一个tuple形式传入:第一个是积分对象,第二第三个分别是下限和上限。当求不定积分时,只需要省略第二个参数即可

>>>print n
2

【Python】实验-Sympy库解线性方程、微积分及矩阵简化_第4张图片
结果如上

三、解微分方程和矩阵化简(diff、dsolve、Matrix)

例题,解微分方程:y'=2xy

>>>f=Function('f') #意义同Symbol,但这是函数因变量的符号化
>>>x=Symbol('x')
>>>dsolve(diff(f(x),x)-2*x*f(x),f(x))

#diff()是求导函数,第一个参数是因变量,第二个参数是自变量,相当于对自变量是x的f(x)求导,变向地表达y'。dsolve()是解微分方程函数,类似于solve,第一个参数是微分方程的一般式(等号右边为0),第二个参数是需要去求导化的变量。

Eq(f(x),C1*exp(x**2))
#Eq()可以认为是等式函数,(exp()是自然常数的指数幂)上面的结果直观来看就是 f(x)=C1*e^(x^2)

【Python】实验-Sympy库解线性方程、微积分及矩阵简化_第5张图片
结果如上

例题,矩阵化简


【Python】实验-Sympy库解线性方程、微积分及矩阵简化_第6张图片
矩阵

>>>x1,x2,x3=symbols('x1 x2 x3') #均需符号化
>>>a11,a12,a13,a22,a23,a33=symbols('a11 a12 a13 a22 a23 a33')
>>>m=Matrix([[x1,x2,x3]])
>>>n=Matrix([[a11,a12,a13],[a12,a22,a23],[a13,a23,a33]])
>>>v=Matrix([[x1],[x2],[x3]])

#Matrix()是数据矩阵化函数,传入方式要以“每一行”的元素以list的形式传入,“每一行”作为一个元素再以list传入矩阵,所以首尾会有两个中括号

>>>f=m*n*v
>>>print(f[0])
x1*(a11*x1 + a12*x2 + a13*x3) + x2*(a12*x1 + a22*x2 + a23*x3) + x3*(a13*x1 + a23*x2 + a33*x3)

#从f[0]可以看出它可以以调用list中索引的方式来调用对应的,但这个f不是list或tuple等类型


>>>f[0].subs({x1:1,x2:1,x3:1})
a11 + 2*a12 + 2*a13 + a22 + 2*a23 + a33

#通过subs()来为参数赋值,以dict的key-value的形式来赋值

你可能感兴趣的:(【Python】实验-Sympy库解线性方程、微积分及矩阵简化)