roots_legendre#
- scipy.special.roots_legendre(n, mu=False)[源代码][源代码]#
高斯-勒让德积分。
计算Gauss-Legendre积分[Rf56b2625d086-GL]_的样本点和权重。样本点是第n次Legendre多项式:math:`P_n(x)`的根。这些样本点和权重正确地积分了在区间:math:`[-1, 1]`上,权重函数:math:`w(x) = 1`的次数:math:`2n - 1`或更少的多项式。更多细节请参见[Rf56b2625d086-AS]_中的2.2.10。
- 参数:
- n整数
求积阶数
- mubool, 可选
如果为真,返回权重的总和,可选。
- 返回:
- xndarray
示例点
- wndarray
权重
- mu浮动
权重之和
参考文献
[AS]Milton Abramowitz 和 Irene A. Stegun 编。《带有公式、图表和数学表格的数学函数手册》。纽约:Dover,1972年。
[GL]Gauss-Legendre 求积法, 维基百科, https://en.wikipedia.org/wiki/Gauss%E2%80%93Legendre_quadrature
示例
>>> import numpy as np >>> from scipy.special import roots_legendre, eval_legendre >>> roots, weights = roots_legendre(9)
roots
存储了高斯-勒让德积分的根,而weights
存储了相应的权重。>>> roots array([-0.96816024, -0.83603111, -0.61337143, -0.32425342, 0. , 0.32425342, 0.61337143, 0.83603111, 0.96816024]) >>> weights array([0.08127439, 0.18064816, 0.2606107 , 0.31234708, 0.33023936, 0.31234708, 0.2606107 , 0.18064816, 0.08127439])
通过在
roots
处评估9次勒让德多项式来验证我们是否拥有根。所有值都近似为零:>>> eval_legendre(9, roots) array([-8.88178420e-16, -2.22044605e-16, 1.11022302e-16, 1.11022302e-16, 0.00000000e+00, -5.55111512e-17, -1.94289029e-16, 1.38777878e-16, -8.32667268e-17])
这里我们将展示如何使用上述值来估计从1到2的积分 f(t) = t + 1/t 使用高斯-勒让德求积法 [GL]。首先定义函数和积分限。
>>> def f(t): ... return t + 1/t ... >>> a = 1 >>> b = 2
我们将使用
integral(f(t), t=a, t=b)
来表示从 t=a 到 t=b 的 f 的定积分。roots
中的样本点来自区间 [-1, 1],因此我们将通过简单的变量替换来重写积分:x = 2/(b - a) * t - (a + b)/(b - a)
with inverse:
t = (b - a)/2 * x + (a + 2)/2
然后:
integral(f(t), a, b) = (b - a)/2 * integral(f((b-a)/2*x + (a+b)/2), x=-1, x=1)
我们可以用
roots_legendre
返回的值来近似后一个积分。将上面计算的根从 [-1, 1] 映射到 [a, b]。
>>> t = (b - a)/2 * roots + (a + b)/2
将积分近似为函数值的加权和。
>>> (b - a)/2 * f(t).dot(weights) 2.1931471805599276
将其与精确结果进行比较,即 3/2 + log(2):
>>> 1.5 + np.log(2) 2.1931471805599454