python,anaconda,spyder,numpy,matplotlib.pyplot,scipy.integrate,matplotlib.patches
Polygon,symbol
加载需要的库:numpy和matplotlib.pyplot,scipy.integrate.自定义函数f(x)=sin(x) + 0.5x;a = 0.5 、b = 9.5 分别表示积分的区间上下限;x = np.linspace(0, 10)表示x的取值范围为[0,10]之间50个满足等差数列的数据;y = f(x)就是最终要求的积分函数;如图所示
加载库Polygon,绘制积分图形。fig, ax = plt.subplots(figsize=(7, 5))表示绘图尺寸为7*5;plt.plot(x, y, 'b', linewidth=2)表示绘制蓝色线宽为2的函数图形;plt.ylim(ymin=0)表示y轴最小值为0;Ix = np.linspace(a, b)表示lx取值范围为[a,b];Iy = f(Ix)表示函数f(lx);verts = [(a, 0)] + list(zip(Ix, Iy)) + [(b, 0)]表示封闭区域的关键点;poly = Polygon(verts, facecolor='0.7', edgecolor='0.5')表示绘制多边形,并填充颜色;ax.add_patch(poly)表示添加到图形中;plt.text(0.75 * (a + b), 1.5, r'$\int_a^b f(x)dx$',horizontalalignment='center', fontsize=20)表示在图形右下区域添加积分公式,字体为20;plt.figtext(0.9, 0.075, '$x$')和plt.figtext(0.075, 0.9, '$f(x)$')表示给横轴和纵轴分别添加标签‘x’和‘f(x)’;ax.set_xticks((a, b))、ax.set_xticklabels(('$a$', '$b$'))表示给a、b取值的地方标记‘a’和‘b';ax.set_yticks([f(a), f(b)])表示表示f(a)、f(b)的取值显示在y轴上;如图所示
数值积分的5种求解方法。(1)sci.fixed_quad(f, a, b)[0]表示固定高斯求解积分;(2)sci.quad(f, a, b)[0]表示自适应求解积分;(3)sci.romberg(f, a, b)表示龙贝格积分求解;列表和数组函数求解积分:xi = np.linspace(0.5, 9.5, 25)表示生成一个列表或者数组xi;sci.trapz(f(xi), xi)表示使用梯形法则求解积分;sci.simps(f(xi), xi)表示使用辛普森法则求解积分;如图所示
模拟方法求解积分。for i in range(1, 20)表示i取值1~20(不含20); x = np.random.random(i * 10) * (b - a) + a表示随机的x值; print(np.sum(f(x)) / len(x) * (b - a))表示输出积分区间平均函数值与积分区间长度的乘积;如图所示
sympy的渲染器和求π函数。sy.init_printing(pretty_print=False, use_unicode=False)表示使用ASCII渲染器;print(sy.pretty(f))打印函数f的公式;print(sy.pretty(sy.sqrt(x) + 0.5))表示打印带平方根函数的公式;pi_str = str(sy.N(sy.pi, 100000))表示勇sympy的函数N求π,最多可达100000位,分别查看前30和后30位,查看几个数字是否在π中出现,如图所示
梯形法则trapz和辛普森法则simps积分需要先定义列表或数组
模拟求解积分随着随机数的增加,结果将越来越收敛真实值