本节主要使用sympy、scipy库来处理一些函数问题
文章目录
- 1.求不定积分
- 2.求定积分
- 3.解线性方程
- 4.解微分方程
- 5.求导
- 6.级数展开
- 7.求极限
- 8.求重积分
- 普通定积分问题
- 二重积分
- 三重积分
1.求不定积分
例:求
代码如下:
from sympy import *
x = symbols('x')
y = integrate(log(x),x)
print('y=log(x)的原函数为:',y)
输出结果为:
提示:不要忘记手动+C哦
2.求定积分
例:求
from sympy import *
x=symbols('x')
y=integrate(x**2,(x,0,1))#求y=x**2在(0,1)内定积分
print('y=x**2在(0,1)内的定积分为:',y)
结果:
3.解线性方程
例:求 的解
from sympy import *
x=symbols('x')
f=x**3-1
u=solve(f)
print('x**3-1=0的解为:',u)
结果:
4.解微分方程
例:求解微分方程:
from sympy import *
f=symbols('f',cls=Function)#定义f为函数
x=symbols('x')
eq=Eq(f(x).diff(x,2)-2*f(x).diff(x)+f(x),sin(x))#f''(x)-2f'(x)+f(x)=sin(x)
print('f\'\'(x)-2f\'(x)+f(x)=sin(x)的结果为:')
print(dsolve(eq,f(x)))
结果:
这里得出的结果为:
5.求导
例:求的一阶导数、二阶导数
from sympy import *
x=symbols('x')
y=sin(x)
print('y=sin(x)的导数为:',y.diff(x))
print('y=sin(x)的二阶导数为:',y.diff(x,2))
结果:
6.级数展开
例:求的展开式
from sympy import *
x=symbols('x')
y=tan(x).series(x,0,10)
print('y=tan(x)展开式:',y)
结果:
,可以看出series函数的第三个参数为展开式无穷小的阶数
7.求极限
例:求
from sympy import *
x=symbols('x')
y=limit(sin(x)/x,x,0)#x趋于0时sin(x)/x极限
print('x趋于0时sin(x)/x极限:',y)
结果:
即
8.求重积分
scipy库中的integrate也可以帮助我们求解积分问题,并且一二三重积分均可以解决
普通定积分问题
仍以为例:
from scipy.integrate import quad
def f(x):
return x**2
v,err = quad(f,#被积函数
0,#x下限
1)#x上限
print(v)
结果为:
我们知道结果应为,可见此结果存在一定误差,因此一般不用于求出精确结果,而在解决实际问题(允许结果存在误差)时使用
二重积分
例:我们可以看出此式实际上是单位圆在第一象限内的面积,结果为,约等于0.7853981634(卡西欧计算器结果)
import numpy as np
from scipy.integrate import dblquad
def f(x,y):
return 1
v,err = dblquad(f,#被积函数
0,#x下限
1,#x上限
0,#y下限
lambda x:np.sqrt(1-x**2))#y上限
print(v)
结果为:
可见结果还是较为精确的
三重积分
例:实际上为底为单位圆,高为1的圆锥的体积的四分之一,结果应为,约等于0.2617993878
import numpy as np
from scipy.integrate import tplquad
def f(x,y,z):
return 1
v,err = tplquad(f,#被积函数
0,#z下限
1,#z上限
0,#x下限
lambda z:z,#x上限
0,#y下限
lambda z,x:np.sqrt(z**2-x**2))#y上限
print(v)
结果为: