对下列式子求积分
$$
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