多语言展示
当前在线:1114今日阅读:167今日分享:16

python数学工具之积分(1)

Python是目前最流行最简单用途最广泛的编程语言,大数据时代最应该学习的一门编程语言。在估值和期权定价时,积分是经常用到,下面看看积分的例子
工具/原料
1

python,anaconda,spyder,numpy,matplotlib.pyplot,scipy.integrate,matplotlib.patches

2

Polygon,symbol

方法/步骤
1

加载需要的库: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)就是最终要求的积分函数;如图所示

2

加载库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轴上;如图所示

3

数值积分的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)表示使用辛普森法则求解积分;如图所示

4

模拟方法求解积分。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))表示输出积分区间平均函数值与积分区间长度的乘积;如图所示

6

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位,查看几个数字是否在π中出现,如图所示

注意事项
1

梯形法则trapz和辛普森法则simps积分需要先定义列表或数组

2

模拟求解积分随着随机数的增加,结果将越来越收敛真实值

推荐信息