算法
#%%
from scipy.special import roots_legendre
import numpy as np
#%%
f = lambda x: 4./(1+x*x) #被积函数
N = 100 #取100个样本点
a, b = 0, 1 #积分上下限
#%%
x, wi = roots_legendre(N)
xi = x*(b-a)/2 + (b+a)/2
sum = (b-a)/2 * np.dot(wi, f(xi))
print(sum)
结果: 3.1415926535897927
算法原理
总结
Via Gaussian quadrature (Select method) Calculator
Via Wolfram MathWorld - Gaussian Quadrature
参考资料
- 《数值计算基础》, 张达治主编, 科学出版社, 2022 年 3 月第 1 版 (主要参考)
- 《现代数值计算》, 同济大学计算数学教研室编著, 人民邮电出版社, 2009 年 9 月第 1 版
- 多种语言实现 Numerical integration/Gauss-Legendre Quadrature
- Gaussian quadrature (Select method) Calculator
- Wolfram MathWorld 介绍各种各样的 Numerical Integration 原理
- YouTube视频 – Python 实现高斯正交积分- Gaussian quadrature realization with Python
- Gaussian quadrature - Wikipedia
- Integration and ODEs (scipy.integrate)
- 论文 – Fast and Rigorous Arbitrary-Precision Computation of Gauss–Legendre Quadrature Nodes and Weights
- 论文 – Fast and Accurate Computation of Gauss–Legendre and Gauss–Jacobi Quadrature Nodes and Weights
- 论文 – Generalized eigenvalue methods for Gaussian quadrature rules
- 论文 – Computing Gaussian quadrature rules with high relative accuracy
- 高斯积分及python实现