要更改间隔,请使用以下方法将x值从[-1,1]转换为[a,b]:
t = 0.5*(x + 1)*(b - a) + a
然后将正交公式缩放为(b-a)/ 2:
gauss = sum(w * f(t)) * 0.5*(b - a)
这是您的示例的修改版本:
import numpy as npfrom scipy import integrate# Define function and intervala = 0.0b = np.pi/2f = lambda x: np.cos(x)# Gauss-Legendre (default interval is [-1, 1])deg = 6x, w = np.polynomial.legendre.leggauss(deg)# Translate x values from the interval [-1, 1] to [a, b]t = 0.5*(x + 1)*(b - a) + agauss = sum(w * f(t)) * 0.5*(b - a)# For comparisonquad, quad_err = integrate.quad(f, a, b)print 'The QUADPACK solution: {0:.12} with error: {1:.12}'.format(quad, quad_err)print 'Gauss-Legendre solution: {0:.12}'.format(gauss)print 'Difference between QUADPACK and Gauss-Legendre: ', abs(gauss - quad)
它打印:
QUADPACK解决方案:1.0,错误:1.11022302463e-14高斯-勒根德雷解决方案:1.0QUADPACK和Gauss-Legendre之间的差异:4.62963001269e-14
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)