首先安装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的形式传入
结果如图
二、解微积分(limit、pprint、integrate)
例题,求极限
极限
>>>n=Symbol('n') #同样地要对式子中的字母要符号化
>>>print( limit( ((n+3)/(n+2))**n ,n,oo)
#limit()作为求极限函数,第一个参数是表达式,第二个参数是变量,第三参数是趋近值,如上第二个参数和第三个参数所表达的即是n→oo
结果如上
要想使表达式以数学的美观形式表现,可以通过pprint()来完成
>>>pprint(x*(sqrt(x**2+1)-x))
美观如上
例题,求定积分
定积分
>>>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
结果如上
三、解微分方程和矩阵化简(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)
结果如上
例题,矩阵化简
矩阵
>>>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的形式来赋值