当前位置: 代码迷 >> 综合 >> 高斯拉盖尔(Gauss-Laguerre)法则求积分(python,数值积分)
  详细解决方案

高斯拉盖尔(Gauss-Laguerre)法则求积分(python,数值积分)

热度:86   发布时间:2024-01-20 21:08:42.0

第四十三篇 高斯拉盖尔法则

特殊积分规则

到目前为止所考虑的常规法则考虑了有限的积分上下限,而且对要积分的函数的形式没有任何限制。在这篇中,将描述一些特别的法则,这些法则时为了应对一些非常规情况的积分。
在这里插入图片描述

高斯-拉盖尔法则

高斯-拉盖尔法则是专门用于指数衰减函数的形式的积分
在这里插入图片描述
该法则的权值和样本点以一个幂指数的积分函数和积分范围的一半为无穷大。从上面方程的右侧可以看到,该法则的样本点只会被代入函数f(x),而不是整个被积函数e - xf(x)。
这种方法之所以这样叫,是因为采样点是一个叫做拉盖尔多项式的多项式的根,这种多项式是以这种形式出现的
在这里插入图片描述
下表给出了n = 5时该方法的权重和采样点的总结。注意,随着方法顺序的增加,加权系数值迅速减小。高斯-拉盖尔法则的系数可以使用多项式替换来导出,如前一篇所述。例如,将f(x) = 1代入方程,该法则的关系如下
在这里插入图片描述
在这里插入图片描述

计算实例

使用三点高斯拉盖尔法则计算下面的积分
在这里插入图片描述
从上表中n=3时得到
在这里插入图片描述
精确解为0.5

程序如下

分为一个主程序和一个包含高斯拉盖尔样本点和权值的子函数gauss-laguerre

#高斯拉盖尔法则
import numpy as np
import B
import math
nsp=5
samp=np.zeros((nsp,2));wt=np.zeros((nsp))
B.gauss_laguerre(samp,wt)
area=0
def f64(x):f64=math.sin(x)return f64
for i in range(1,nsp+1):area=area+wt[i-1]*f64(samp[i-1,0])
print('--高斯拉盖尔法则--')
print('高斯拉盖尔法则',nsp)
print('计算结果 ','{:9.4e}'.format(area))
gauss-laguerre
def gauss_laguerre(samp,wt):nsp=samp.shape[0]if nsp==1:samp[0,0]= 1.0wt[0]= 1.0 elif nsp==2:samp[0,0]= 0.58578643762690495119 samp[1,0]= 3.41421356237309504880 wt[0]=     0.85355339059327376220 wt[1]=     0.14644660940672623779 elif nsp==3:samp[0,0]= 0.41577455678347908331 samp[1,0]= 2.29428036027904171982 samp[2,0]= 6.28994508293747919686 wt[0]=     0.71109300992917301544 wt[1]=     0.27851773356924084880 wt[2]=     0.01038925650158613574 elif nsp==4:samp[0,0]= 0.32254768961939231180 samp[1,0]= 1.74576110115834657568 samp[2,0]= 4.53662029692112798327 samp[3,0]= 9.39507091230113312923 wt[0]=     0.60315410434163360163 wt[1]=     0.35741869243779968664 wt[2]=     0.03888790851500538427 wt[3]=     0.00053929470556132745 elif nsp==5:samp[0,0]= 0.26356031971814091020 samp[1,0]= 1.41340305910651679221 samp[2,0]= 3.59642577104072208122 samp[3,0]= 7.08581000585883755692 samp[4,0]= 12.6408008442757826594 wt[0]=     0.52175561058280865247 wt[1]=     0.39866681108317592745 wt[2]=     0.07594244968170759538 wt[3]=     0.00361175867992204845 wt[4]=     0.00002336997238577622 else:print('积分点数量错误')

终端输出结果如下:
在这里插入图片描述