Python之高等数学的符号求解

这篇博客介绍了Python在高等数学中的应用,包括求极限、求导、级数求和、泰勒展开、不定积分和定积分、代数方程的符号解、方程组求解、寻找驻点及最大值、以及微分方程的通解和特定解。通过具体的运行结果展示了Python在这些数学问题上的强大功能。

1.求极限

在这里插入图片描述

#高等数学求极限
from sympy import *
x=symbols('x')
print(limit(sin(x)/x,x,0))
print(limit(pow(1+1/x,x),x,oo))  #小写字母oo代表正无穷

运行结果:
1
E

2.求导

在这里插入图片描述

from sympy import *
x,y=symbols('x y')  #构造符号变量
z=sin(x)+x**2*exp(y) #构造符号表达式
print("关于x的二阶偏导数:",diff(z,x,2))
print("关于y的一阶偏导数:",diff(z,y,1))

运行结果:
关于x的二阶偏导数: 2exp(y) - sin(x)
关于y的一阶偏导数: x**2
exp(y)

3.级数求和

在这里插入图片描述

#级数求和
from sympy import *
k,n=symbols('k n')
print(summation(k**2,(k,1,n)))
print(factor(summation(k**2,(k,1,n))))  #把所得结果因式分解
print(summation(1/k**2,(k,1,oo)))

运行结果:
在这里插入图片描述

4,泰勒展开

#泰勒展开
#写出sinx在0点处的3,5,7阶泰勒展开,
#在同一个图形界面画出sinx及上述各阶泰勒展开式在[0,2]的图形

from pylab import rc
from sympy import *
rc('font',size=16)
#rc('text',usetex=True)

x=symbols('x')  #构造符号变量
y=sin(x)   #构造符号表达式

for k in range(3,8,2):print(series(y,x,0,k))   #3,5,7
#for k in range(3,8,2):print(y.series(x,0,k))
plot(y,series(y,x,0,3).removeO(),series(y,x,0,5).removeO(),
     series(y,x,0,7).removeO(),(x,0,2),xlabel='$x$',ylabel='$y$')

运行结果:
在这里插入图片描述
在这里插入图片描述

  1. 不定积分和定积分

在这里插入图片描述

#不定积分和定积分

from sympy import *
#from sympy import integrate,symbols,sin,pi,oo
x=symbols('x')
print(integrate(sin(2*x),(x,0,pi)))
print(integrate(sin(x)/x,(x,0,oo)))

运行结果:
0
pi/2

6.求代数方程的符号解

在这里插入图片描述

#求代数方程的符号解

from sympy import *
x,y=symbols('x y')

print(solve(x**3-1,x))
print(solve((x-2)**2*(x-1)**3,x))
print(roots((x-2)**2*(x-1)**3,x))   #得到根的重数信息   {解:重数}

'''
x^3=1 
解:原式=(x-1)(x^2+x+1)=0 
x-1=0 =>x=1 
x^2+x+1=0(由求根公式)=>x=(-1±√3i)/2
'''


运行结果:
[1, -1/2 - sqrt(3)*I/2, -1/2 + sqrt(3)*I/2]
[1, 2]
{2: 2, 1: 3}

7.代数方程组

在这里插入图片描述


from sympy import *
#from sympy import solve   3#等价

from sympy.abc import x,y
#x,y=symbols('x y')                #等价

s=solve([x**2+y**2-1,x-y],[x,y])

print("方程组的解:",s)

运行结果:
方程组的解: [(-sqrt(2)/2, -sqrt(2)/2), (sqrt(2)/2, sqrt(2)/2)]

8.求驻点以及最大值

在这里插入图片描述


from sympy import *
x=symbols('x')   #符号变量
y=2*x**3-5*x**2+x   #符号表达式
x0=solve(diff(y,x),x)  #求驻点

print("驻点的精确解为:",x0)
print("驻点的浮点数表示为:",[x0[i].n() for i in range(len(x0))])
y0=[y.subs(x,0),y.subs(x,1),y.subs(x,x0[0]).n()]  #代入两个端点以及应该驻点的数值

print("这三个数分别为:",y0)
print('\n')
print("最大值为:",max(y0))

运行结果:
驻点的精确解为: [5/6 - sqrt(19)/6, sqrt(19)/6 + 5/6]
驻点的浮点数表示为: [0.106850176076554, 1.55981649059011]
这三个数分别为: [0, -2, 0.0522051838383851]

最大值为: 0.0522051838383851

9.求微分方程通解

在这里插入图片描述

#求微分方程(方程组)的符号解

from sympy import *
x=symbols('x')
y=symbols('y',cls=Function)

eq1=diff(y(x),x,2)-5*diff(y(x),x,1)+6*y(x)
eq2=diff(y(x),x,2)-5*diff(y(x),x,1)+6*y(x)-x*exp(2*x)

print("齐次方程的解",dsolve(eq1,y(x)))
print("非齐次方程的解",dsolve(eq2,y(x)))

运行结果:
齐次方程的解 Eq(y(x), (C1 + C2*exp(x))exp(2x))

非齐次方程的解 Eq(y(x), (C1 + C2*exp(x) - x**2/2 - x)exp(2x))

求微分方程的符号解
在这里插入图片描述

from sympy import *
x=symbols('x')
y=symbols('y',cls=Function)

eq1=diff(y(x),x,2)-5*diff(y(x),x)+6*y(x)
eq2=diff(y(x),x,2)-5*diff(y(x),x)+6*y(x)-x*exp(2*x)

print("初值问题的解:{}".format(dsolve(eq1,y(x),
                                ics={y(0):1,diff(y(x),x).subs(x,0):0})))

y2=dsolve(eq2,y(x),ics={y(0):1,y(2):0})

print("边值问题的解:{}".format(y2))

运行结果:
初值问题的解:Eq(y(x), (3 - 2*exp(x))exp(2x))

边值问题的解:Eq(y(x), (-x**2/2 - x + 3*exp(x)/(-1 + exp(2)) + (-4 + exp(2))/(-1 + exp(2)))exp(2x))

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值