数学工具(四)积分

对下列式子求积分

$$
f(x)=\sin(x)+0.5x
$$

即:

$$
\int_{0}^{0.9}(\sin(x)+0.5x)dx\qquad
$$

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))
View Code
24.3527332715
24.3749641846

猜你喜欢

转载自www.cnblogs.com/jin-liang/p/9399340.html