对下列式子求积分
$$
f(x)=sin(x)+0.5x
$$
即:
$$
int_{0}^{0.9}(sin(x)+0.5x)dxqquad
$$
import scipy.integrate as sci #主要依赖的库 import numpy as np import matplotlib.pyplot as plt
# To support both python 2 and python 3 from __future__ import division, print_function, unicode_literals # Common imports import numpy as np import os # to make this notebook's output stable across runs def reset_graph(seed=42): tf.reset_default_graph() tf.set_random_seed(seed) np.random.seed(seed) # To plot pretty figures %matplotlib inline import matplotlib import matplotlib.pyplot as plt plt.rcParams['axes.labelsize'] = 14 plt.rcParams['xtick.labelsize'] = 12 plt.rcParams['ytick.labelsize'] = 12
#定义函数 def f(x): return np.sin(x)+0.5*x 积分上下限 a=0.5 b=9.5 x=np.linspace(0,10) y=f(x) from matplotlib.patches import Polygon fig,ax=plt.subplots(figsize=(12,8)) plt.plot(x,y,'b',lw=1.2) plt.ylim(ymin=0) #积分区域 Ix=np.linspace(a,b) Iy=f(Ix) verts=[(a,0)]+list(zip(Ix,Iy))+[(b,0)] #zip 函数构成 元组列表 poly=Polygon(verts,facecolor='0.7',edgecolor='0.3') ax.add_patch(poly) # labels plt.text(0.75 *(a + b) , 1.5, r"$int_a^b f(x)dx$" ,horizontalalignment='center' , fontsize=20) plt.figtext(0.9, 0.075, '$x$') plt.figtext (0.075, 0.9, '$f(x)$') ax.set_xticks([a,b]) ax.set_xticklabels(['$a$', '$b$']) ax.set_yticks([f(a),f(b)])
数值积分
integrate 子库包含一组精选的函数,可以计算给定上下限的数学函数下的数值积分,这些函数的例子也介用于同定高斯求积的fixed_quad 、用于自适应求积的quad 和用于龙贝格积分的romberg。
# 同定高斯求积的fixed_quad print(sci.fixed_quad(f,a,b)[0]) #自适应求积的quad print(sci.quad(f,a,b)[0]) #龙贝格积分的romberg print(sci.romberg(f,a,b))
24.3669959671 24.374754718086752 24.3747547181
还有一些积分的数以输入列表或者包含雨数值和输入值的ndarray 对象作为输入,这种函数的例子包插使用梯形法则的trapz ,和实现辛普森法则的simps。
1 xi = np .linspace(0.5, 9.5, 25) 2 #梯形法则 3 print(sci. trapz(f(xi) , xi)) 4 5 #辛普森法则 6 print(sci. simps(f(xi) , xi))
24.3527332715 24.3749641846