scipy.special.
roots_legendre#
- scipy.special.roots_legendre(n, mu=False)[源代码]#
Gauss-Legendre 求积。
计算 Gauss-Legendre 求积 [GL] 的样本点和权重。样本点是 n 次勒让德多项式 \(P_n(x)\) 的根。这些样本点和权重正确地对次数小于或等于 \(2n - 1\) 的多项式在区间 \([-1, 1]\) 上进行积分,权重函数为 \(w(x) = 1\)。有关更多详细信息,请参见 [AS] 中的 2.2.10。
- 参数:
- nint
求积顺序
- mu布尔值,可选
如果为 True,返回权重的总和,可选。
- 返回:
- xndarray
样本点
- wndarray
权重
- mu浮点数
权重总和
参考
[AS]Milton Abramowitz 和 Irene A. Stegun,主编。带公式、图表和数学表格的数学函数手册。纽约:多佛,1972 年。
示例
>>> 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])
在此,我们将展示可如何使用上述值来通过高斯-勒让德正交 [GL] 估算 f(t) = t + 1/t 从 1 到 2 的积分。首先,定义函数和积分限值。
>>> def f(t): ... return t + 1/t ... >>> a = 1 >>> b = 2
我们将使用
integral(f(t), t=a, t=b)
表示 f 在 t=a 到 t=b 之间的定积分。roots
中的样本点取自区间 [-1, 1],因此我们将使用简单的变量更改重写该积分x = 2/(b - a) * t - (a + b)/(b - a)
具有反函数
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