scipy.special.
roots_legendre#
- scipy.special.roots_legendre(n, mu=False)[source]#
高斯-勒讓德積分。
計算高斯-勒讓德積分 [GL] 的樣本點和權重。樣本點是 n 次勒讓德多項式 \(P_n(x)\) 的根。這些樣本點和權重可以正確地積分在區間 \([-1, 1]\) 上,權重函數為 \(w(x) = 1\) 的次數小於等於 \(2n - 1\) 的多項式。詳情請參閱 [AS] 的 2.2.10 節。
- 參數:
- nint
積分階數
- mubool, optional
若為 True,則傳回權重總和,可選。
- 返回值:
- xndarray
樣本點
- wndarray
權重
- mufloat
權重總和
參考文獻
[AS]Milton Abramowitz 和 Irene A. Stegun,編輯。《數學函數手冊,包含公式、圖表和數學表格》。紐約:Dover,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 + b)/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