高斯公式求积分,高斯型函数积分

  高斯公式求积分,高斯型函数积分

  无限区间(1)梯形法则,(2)psdfy法则,(3)zgdgb积分法或(4)kkdmf积分法都有一些适用的指导原则。

  一般来说,高阶方法更适合平滑函数。如果不能,最好用更简单的方法,因为数据的变化不会反映在采样点上。梯形法则适用于在均匀间隔的采样点上整合实验数据。这对于性能较差的函数来说很好。为了精确,psdfy的规则依赖于被积函数的高阶近似。虽然kkdmf积分非常精确,但如果需要均匀分布的采样点,就不尽如人意了。

  Kkdmf积分

  ######################################################################

  #

  #用于计算高斯积分点和权重的函数

  #正交

  #

  # x,w=gaussxw(N)返回积分点x和积分

  #权重w使得sum_i w[i]*f(x[i])是n阶

  #积分int_{-1}^1 f(x) dx的高斯近似

  # x,w=gaussxwab(N,a,b)得出积分点和权重

  #映射到区间[a,b],使得sum_i w[i]*f(x[i])

  #是积分的n阶高斯近似

  # int_a^b f(x) dx

  #

  #这段代码使用以下方法找到第n个勒让德多项式的零点

  #牛顿法,从阿布拉莫维茨给出的近似值开始

  #和Stegun 22.16.6。勒让德多项式本身被评估

  #使用Abramowitz和Stegun给出的递归关系

  # 22.7.10.该函数已针对其他源进行了检查

  # N的值最大为1000。它与第2版和第3版兼容

  Python的# 3。

  #

  #单身的奇迹纽曼,2011年6月4日

  #您可以自由使用、共享或修改此文件

  #

  ##################%####################################################

  从numpy导入一个,copy,cos,tan,pi,linspace

  def gaussxw(N):

  #勒让德多项式根的初始近似值

  a=linspace(3,4*N-1,N)/(4 * N ^ 2)

  x=cos(pi*a 1/(8*N*N*tan(a)))

  #用牛顿法求根

  =1e-15

  增量=1.0

  而:

  P0=1(N,浮点)

  p1=副本(x)

  对于范围(1,N)中的k:

  p0,p1=p1,((2 * k ^ 1)* x * P1-k * P0)/(k ^ 1)

  DP=(N ^ 1)*(P0-x * P1)/(1-x * x)

  dx=p1/dp

  x -=dx

  增量=最大值(abs(dx))

  #计算重量

  w=2 *(N ^ 1)*(N ^ 1)/(N * N *(1-x * x)* DP * DP)

  返回x,w

  def gaussxwab(N,a,b):

  x,w=高斯xw(N)

  返回0.5*(b-a)*x 0.5*(b a),0.5*(b-a)*w

  计算示例

  kkdmf积分的数值算法用于求解kkdmf积分

  做积分变换

  得到

  从gaussxw导入gaussxwab

  从数学导入导出

  定义f(z):

  return exp(-z * * 2/(1-z)* * 2)/(1-z)* * 2

  N=50

  a=0.0

  b=1.0

  x,w=gaussxwab(N,a,b)

  s=0.0

  对于范围(N)中的k:

  s=w[k]*f(x[k])

  印刷品

  实际积分的值是/2,高斯求积精确到机器精度。

  重写基本积分公式(6.3)通常是有用的,这样我们可以将加权函数W(x)从被积函数中分离出来:

  Kkdmf求积法,若g (x)是(2 N-1)次多项式,则N点和权值选择的近似误差消失。为了获得这种令人难以置信的优化,点

  最后,在[a,b]上有一个具体的分布。一般来说,如果g(x)是光滑的,或者可以通过提出一些W(x)使其光滑(表6.2.4),那么对于相同的点数,kkdmf算法会产生比梯形法则和psdfy法则更高的精度。有时被积函数可能不光滑,因为它在不同的区域有不同的行为。在这些情况下,将每个区域分别整合,然后将答案相加是有意义的。事实上,一些“智能”集成子例程决定使用多少个区间以及在每个区间中使用什么规则。

  表6.2.4所示规则为kkdmf分布,一般形式为(6.32)。我们可以看到权函数在一种情况下是指数函数,在另一种情况下是kkdmf函数,在几种情况下是可积奇点。与等间距规则不同的是,在区间的极值处永远不存在积分点,点的值和权值随着点数n而变化。虽然我们会离开kkdmf点的推导和权的数值方法的介绍,但是我们注意到,对于普通的kkdmf(Gauss-Legendre)积分,然后是点容易变为零的Legendre多项式,与权0有关的微分。在数学函数库中,生成这些点和权重的子程序是标准的,可以在类似[AS 72]的表格中找到,也可以计算出来。我们的kkdmf子例程也将该点缩放到指定区域。为了检查你的观点是否正确,你可能需要将它们与表6.1中的四点集合进行比较。

  映射点

  高斯点. py

  # GaussPoints.py: N点高斯正交pts Wts生成

  将numpy作为np导入

  def GaussPoints(NPT,a,b,x,w,eps):

  m=0;I=0;j=0;t=0。t1=0。pp=0。

  p1=0。p2=0。p3=0。

  m=int((Npts 1)/2)

  对于范围内的I(1,m ^ 1):

  t=NP . cos(NP . pi *(float(I)-0.25)/(float(Npts)0.5))

  t1=1

  while((abs(t-t1))=eps):

  p1=1。p2=0。

  对于范围内的j(1,Npts 1):

  p3=p2p2=p1

  p1=((2。*float(j)-1)*t*p2 - (float(j)-1。)*p3)/(float(j))

  pp=Npts*(t*p1 - p2)/(t*t - 1。)

  t1=t

  t=t1 - p1/pp

  x[i-1]=-t

  x[Npts-i]=t

  w[i-1]=2。/( (1.-t*t)*pp*pp)

  w[Npts-i]=w[i-1]

  对于范围(0,Npts)中的j:# Scale[-1,1]到[a,b]

  x[j]=x[j]*(b-a)/2。(b a)/2。

  w[j]=w[j]*(b-a)/2。

  从numpy导入*;从测量点导入测量点

  Npts=10ans=0;a=0。b=1。eps=3。E-14

  w=零(2001,浮点数);x=零(2001,浮点数)#数组

  def f(x): return exp(x) #被积函数

  高斯点(NPT,a,b,x,w,EPS)# EPS:pts的精度

  对于范围(0,Npts)中的I:Ans=f(x[I])* w[I]#被积函数之和

  打印( \n Npts=,Npts,,Ans=,Ans)

  print ( eps=,eps,,Error=,Ans-(exp(1)-1))

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: