定积分: 直观的说,对于一个给定的正实值函数,在一个实数区间上的定积分可以理解为坐标平面上由曲线、直线以及轴围城的去边梯形的面积值(一个确定的实数值)
案例
求二次函数y = 2x^2 + 3x + 4在[-5,5]区间内的积分
import numpy as np
import matplotlib.pyplot as mp #画图用
import matplotlib.patches as mc #图像打补丁用
import scipy.integrate as si #numpy求定积分用
#声明曲线函数
def f(x):
return 2 * x ** 2 + 3 * 4 + 4
#1. 在区间[-5,5]间拆出1000个满足f(x)的点,画出该函数曲线
a, b = -5, 5
x1 = np.linspace(a, b, 1001)
y1 = f(x1)
mp.figure('Integral',facecolor='lightgray')
mp.title('Integral',fontsize=20)
mp.xlabel('x',fontsize=14)
mp.ylabel('y',fontsize=14)
#设置刻度参数,labelsize设置刻度字体大小
mp.tick_params(labelsize=10)
#显示网格
mp.grid(linestyle=':')
mp.plot(x1,y1,c='orangered',linewidth=6,label=r'$y=2x^2+3x+4$',zorder=0)
#2. 微元法求积分
#把区间拆成50份(份数拆的越多,积分求得越精细)
n = 50
x2 = np.linespace(a,b,n+1)
#将x2传入f(x)获取y2
y2 = f(x2)
#通过计算拆出来的50个梯形的面积和,来求积分
area = 0
for i in range(n):
#每个梯形的面积 = (上底+下底)*高/2
area += (y2[i + 1] + y2[i] * (x2[1] - x2[0]) / 2
print(area) #用微元法求得的积分
#将微元法分出的梯形在图中呈现出来
for i in range(n):
mp.gca().add_patch(mc.Polygon([
[x2[i],0],[x2[i],y2[i]], #梯形的左下点和左上点
[x2[i+1],y2[i+1]],[x2[i+1],0]], #梯形的右上点和右下点
fc='deepskyblue', #填充色
ec='dodgerblue', #边缘色
alpha=0.5))
#3. numpy直接求定积分的API
#利用quad求定积分,给出函数f,积分下限和积分上限[a,b],返回值为(积分值,最大误差)
area = si.quad(f,a,b)[0]
print(area)
mp.legend()
mp.show()
来源:CSDN
作者:俞泰鑫
链接:https://blog.csdn.net/god_yutaixin/article/details/103657208