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

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

特殊积分规则

到目前为止所考虑的常规法则考虑了有限的积分上下限,而且对要积分的函数的形式没有任何限制。在这篇中,将描述一些特别的法则,这些法则时为了应对一些非常规情况的积分。
高斯拉盖尔(Gauss-Laguerre)法则求积分(python,数值积分)_第1张图片

高斯-拉盖尔法则

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

计算实例

使用三点高斯拉盖尔法则计算下面的积分
在这里插入图片描述
从上表中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.0
      wt[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('积分点数量错误')

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

你可能感兴趣的:(有限元,数值分析,python,线性代数)