numpy 定积分案例

定积分: 直观的说,对于一个给定的正实值函数,在一个实数区间上的定积分可以理解为坐标平面上由曲线、直线以及轴围城的去边梯形的面积值(一个确定的实数值)

案例

求二次函数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()

你可能感兴趣的:(numpy)