精华内容
下载资源
问答
  • 1.正交多项式 设φn(x)是[a,b]上首项系数an≠0的n次多项式,ρ(x)为[a,b]上的权函数.设\varphi _n(x)是[a,b]上首项系数a_n\neq 0的n次多项式,\rho (x)为[a,b]上的权函数.设φn​(x)是[a,b]上首项系数an​​=0的n...

    1.正交多项式

    设 φ n ( x ) 是 [ a , b ] 上 首 项 系 数 a n ≠ 0 的 n 次 多 项 式 , ρ ( x ) 为 [ a , b ] 上 的 权 函 数 . 设\varphi _n(x)是[a,b]上首项系数a_n\neq 0的n次多项式,\rho (x)为[a,b]上的权函数. φn(x)[a,b]an=0nρ(x)[a,b].
    如果多项式序列 { φ n ( x ) } 0 ∞ \{\varphi _n(x)\}_0^{\infty} {φn(x)}0满足关系式
    ( φ j , φ k ) = ∫ a b  ⁣ ⁣ ⁣ ρ ( x ) φ j ( x ) φ k ( x ) d x = { 0 ,    j ≠ k , A k > 0 , j = k . (\varphi _j,\varphi _k)=\int_a^b\!\!\!\rho (x)\varphi _j(x)\varphi _k(x)\mathrm{d}x=\begin{cases} 0,\qquad\space\space j\neq k,\\ A_k>0,j=k. \end{cases} (φj,φk)=abρ(x)φj(x)φk(x)dx={0,  j=k,Ak>0,j=k.
    则 称 多 项 式 序 列 { φ n ( x ) } 0 ∞ 为 在 [ a , b ] 上 带 权 ρ ( x ) 正 交 , 称 φ n ( x ) 为 [ a , b ] 上 带 权 ρ ( x ) 的 n 次 正 交 多 项 式 . 则称多项式序列\{\varphi _n(x)\}_0^{\infty}为在[a,b]上带权\rho (x)正交,称\varphi _n(x)为[a,b]上带权\rho (x)的n次正交多项式. {φn(x)}0[a,b]ρ(x),φn(x)[a,b]ρ(x)n.

    2.勒让德多项式

    2.1 定义

    当 区 间 为 [ − 1 , 1 ] , 权 函 数 ρ ( x ) ≡ 1 时 , 由 { 1 , x , … , x n , … } 当区间为[-1,1],权函数\rho (x)\equiv 1时,由\{ 1,x,\ldots,x^n,\ldots\} [1,1],ρ(x)1,{1,x,,xn,} 正 交 化 得 到 的 多 项 式 称 为 勒让德(Legendre)多项式 . 并 用 P 0 ( x ) , P 1 ( x ) , … , P n ( x ) , … 表 示 . 正交化得到的多项式称为\textbf{勒让德(Legendre)多项式}.并用P_0(x),P_1(x),\ldots,P_n(x),\ldots表示. 勒让德(Legendre)多项式.P0(x),P1(x),,Pn(x),.
    递推关系 ( n + 1 ) P n + 1 ( x ) = ( 2 n + 1 ) x P n ( x ) − n P n − 1 ( x ) , n = 1 , 2 , … . 其 中 , P 0 ( x ) = 1 , P 1 ( x ) = x (n+1)P_{n+1}(x)=(2n+1)xP_n(x)-nP_{n-1}(x),\quad n=1,2,\ldots.其中,P_0(x)=1,P_1(x)=x (n+1)Pn+1(x)=(2n+1)xPn(x)nPn1(x),n=1,2,.,P0(x)=1,P1(x)=x

    2.2 Python实现勒让德多项式

    from numpy import pi
    from sympy import expand, cos, Poly, solve, Eq
    from sympy.abc import x
    import numpy as np
    
    
    # 自己原创
    def legendre_polynomial(symbol_x, degree):
        """
        实现degree次勒让德(Legendre)多项式
        :param symbol_x:符号变量
        :param degree:多项式阶数
        :return:指定degree阶数的勒让德(Legendre)多项式
        """
        legendre_t_list = np.array([1, symbol_x])
        if degree in (0, 1):
            return legendre_t_list[degree]
        for n in range(1, degree + 1):
            legendre_t_list[0] = (2 * n + 1) / (n + 1) * symbol_x * legendre_t_list[1] - n / (n + 1) * legendre_t_list[0]
            # 第一种方式交换legendre_t_list
            legendre_t_list = legendre_t_list[::-1]
            # 第二种方式交换legendre_t_list
            # legendre_t_list[1], legendre_t_list[0] = legendre_t_list[0], legendre_t_list[1]
            # 第三种方式交换legendre_t_list
            # temp = legendre_t_list[1]
            # legendre_t_list[1]=legendre_t_list[0]
            # legendre_t_list[0] = temp
        return expand(legendre_t_list[0])
    

    3.切比雪夫多项式

    3.1 第一类切比雪夫多项式定义

    当 权 函 数 ρ ( x ) = 1 1 − x 2 , 区 间 为 [ − 1 , 1 ] 时 , 当权函数\rho (x)=\dfrac{1}{\sqrt{1-x^2}},区间为[-1,1]时, ρ(x)=1x2 1,[1,1], 正 交 化 得 到 的 正 交 多 项 式 就 是 正交化得到的正交多项式就是 切比雪夫(Chebyshev)多项式 , 它 可 表 示 为 \textbf{切比雪夫(Chebyshev)多项式},它可表示为 切比雪夫(Chebyshev)多项式,
    T n ( x ) = cos ⁡ ( n arccos ⁡ x ) , ∣ x ∣ ⩽ 1. T_n(x)=\cos (n\arccos x),\vert x\vert \leqslant 1. Tn(x)=cos(narccosx),x1.
    若令 x = cos ⁡ θ , 则 T n ( x ) = cos ⁡ ( n θ ) , 0 ⩽ θ ⩽ π . x=\cos \theta ,则T_n(x)=\cos (n\theta),0\leqslant \theta \leqslant \pi. x=cosθ,Tn(x)=cos(nθ),0θπ.
    递推关系
    T n + 1 ( x ) = 2 x T n ( x ) − T n − 1 ( x ) , n = 1 , 2 , … , T 0 ( x ) = 1 , T 1 ( x ) = x . \begin{aligned} T_{n+1}(x)&=2xT_n(x)-T_{n-1}(x),\quad n=1,2,\ldots,\\ T_0(x)&=1,T_1(x)=x. \end{aligned} Tn+1(x)T0(x)=2xTn(x)Tn1(x),n=1,2,,=1,T1(x)=x.

    3.2 第二类切比雪夫多项式定义

    在 区 间 [ − 1 , 1 ] 上 带 权 ρ ( x ) = 1 − x 2 的 正 交 多 项 式 在区间[-1,1]上带权\rho (x)=\sqrt{1-x^2}的正交多项式 [1,1]ρ(x)=1x2 称 为 第二类切比雪夫多项式 , 其 表 达 式 为 称为\textbf{第二类切比雪夫多项式},其表达式为 第二类切比雪夫多项式,
    U n ( x ) = sin ⁡ [ ( n + 1 ) arccos ⁡ x ] 1 − x 2 . U_n(x)=\frac{\sin [(n+1)\arccos x]}{\sqrt{1-x^2}}. Un(x)=1x2 sin[(n+1)arccosx].
    递推关系
    U 0 ( x ) = 1 , U 1 ( x ) = 2 x , U n + 1 ( x ) = 2 x U n ( x ) − U n − 1 ( x ) , n = 1 , 2 , … . \begin{aligned} U_0(x)&=1,U_1(x)=2x,\\ U_{n+1}(x)&=2xU_n(x)-U_{n-1}(x),\quad n=1,2,\ldots. \end{aligned} U0(x)Un+1(x)=1,U1(x)=2x,=2xUn(x)Un1(x),n=1,2,.

    3.3 Python实现两类切比雪夫多项式

    # 自己原创
    def chebyshev_polynomial(symbol_x, degree, polynomial_kind=1):
        """
        实现degree次切比雪夫(Chebyshev)多项式
        :param polynomial_kind: 切比雪夫多项式类别,第一类或者第二类,默认第一类
        :param symbol_x:符号变量
        :param degree:多项式阶数
        :return:指定degree阶数的切比雪夫(Chebyshev)多项式
        """
        if polynomial_kind not in (1, 2):
            raise Exception("Error,chebyshev_polynomial must be the first or second kind,polynomial_kind=1 or 2.")
        chebyshev_t_list = np.array([1, polynomial_kind * symbol_x])
        if degree in (0, 1):
            return chebyshev_t_list[degree]
        for n in range(degree):
            chebyshev_t_list[0] = 2 * symbol_x * chebyshev_t_list[1] - chebyshev_t_list[0]
            # 第一种方式交换chebyshev_t_list
            chebyshev_t_list = chebyshev_t_list[::-1]
            # 第二种方式交换chebyshev_t_list
            # chebyshev_t_list[1], chebyshev_t_list[0] = chebyshev_t_list[0], chebyshev_t_list[1]
            # 第三种方式交换chebyshev_t_list
            # temp = chebyshev_t_list[1]
            # chebyshev_t_list[1]=chebyshev_t_list[0]
            # chebyshev_t_list[0] = temp
        return expand(chebyshev_t_list[0])
    

    3.4 一般区间的切比雪夫多项式零点

    第一类切比雪夫多项式 T n ( x ) T_n(x) Tn(x)在区间 [ − 1 , 1 ] 上 有 n 个 零 点 [-1,1]上有n个零点 [1,1]n
    x k = cos ⁡ 2 k − 1 2 n π , k = 1 , 2 , … , n x_k=\cos \frac{2k-1}{2n}\pi,\qquad k=1,2,\ldots,n xk=cos2n2k1π,k=1,2,,n
    第二类切比雪夫多项式 U n ( x ) U_n(x) Un(x)在区间 [ − 1 , 1 ] 上 有 n 个 零 点 [-1,1]上有n个零点 [1,1]n
    x k = cos ⁡ k π n + 1 , k = 1 , 2 , … , n x_k=\cos \frac{k\pi}{n+1},\qquad k=1,2,\ldots,n xk=cosn+1kπ,k=1,2,,n
    由于切比雪夫多项式是在区间 [ − 1 , 1 ] [-1,1] [1,1]上定义的,对于一般的区间 [ a , b ] [a,b] [a,b],要通过变量替换变换到 [ − 1 , 1 ] , 可 令 [-1,1],可令 [1,1]
    x = 1 2 [ ( b − a ) t + a + b ] , x=\frac{1}{2}[(b-a)t+a+b], x=21[(ba)t+a+b],
    则可将 x ∈ [ a , b ] 变 换 到 t ∈ [ − 1 , 1 ] . x\in [a,b]变换到t\in [-1,1]. x[a,b]t[1,1].

    3.5 Python实现一般区间的实现切比雪夫多项式零点

    # 自己原创
    def chebyshev_null_points(degree, a=-1, b=1, polynomial_kind=1):
        """
        利用区间变换和切比雪夫零点求一般区间[a,b]上的插值节点
        :param polynomial_kind: 切比雪夫多项式类别,第一类或者第二类,默认第一类
        :param degree: 切比雪夫多项式次数
        :param a: 区间左端点
        :param b: 区间右端点
        :return:指定区间上的切比雪夫插值节点
        """
        if polynomial_kind == 1:
            return [((b - a) / 2) * cos(((2 * k + 1) / (2 * degree)) * pi) + (b + a) / 2 for k in range(degree)]
        elif polynomial_kind == 2:
            return [((b - a) / 2) * cos((k * pi) / (degree + 1)) + (b + a) / 2 for k in range(1, degree + 1)]
        else:
            raise Exception("Error,chebyshev_polynomial must be the first or second kind,polynomial_kind=1 or 2.")
    

    4.拉盖尔多项式

    4.1 定义

    在 区 间 [ 0 , + ∞ ] 上 带 权 e − x 的 正 交 多 项 式 称 为 拉盖尔(Laguerre)多项式 , 其 表 达 式 为 在区间[0,+\infty]上带权e^{-x}的正交多项式称为\textbf{拉盖尔(Laguerre)多项式},其表达式为 [0,+]ex拉盖尔(Laguerre)多项式,
    L n ( x ) = e x d n d x n ( x n e − x ) . L_n(x)=e^x\frac{\mathrm{d}^n}{\mathrm{d}x^n}(x^ne^{-x}). Ln(x)=exdxndn(xnex).
    递推关系
    L 0 ( x ) = 1 , L 1 ( x ) = 1 − x , L n + 1 ( x ) = ( 1 + 2 n − x ) L n ( x ) − n 2 L n − 1 ( x ) , n = 1 , 2 , … . \begin{aligned} L_0(x)&=1,L_1(x)=1-x,\\ L_{n+1}(x)&=(1+2n-x)L_n(x)-n^2L_{n-1}(x),\quad n=1,2,\ldots. \end{aligned} L0(x)Ln+1(x)=1,L1(x)=1x,=(1+2nx)Ln(x)n2Ln1(x),n=1,2,.

    4.2 Python实现拉盖尔多项式

    # 自己原创
    def laguerre_polynomial(symbol_x, degree):
        """
        实现degree次拉盖尔(laguerre)多项式
        :param symbol_x:符号变量
        :param degree:多项式阶数
        :return:指定degree阶数的拉盖尔(laguerre)多项式
        """
        laguerre_l_list = np.array([1, 1 - symbol_x])
        if degree in (0, 1):
            return laguerre_l_list[degree]
        for n in range(1, degree + 1):
            laguerre_l_list[0] = (1 + 2 * n - symbol_x) * laguerre_l_list[1] - n * n * laguerre_l_list[0]
            # 第一种方式交换legendre_t_list
            laguerre_l_list = laguerre_l_list[::-1]
            # 第二种方式交换legendre_t_list
            # laguerre_l_list[1], laguerre_l_list[0] = laguerre_l_list[0], laguerre_l_list[1]
            # 第三种方式交换legendre_t_list
            # temp = laguerre_l_list[1]
            # laguerre_l_list[1]=laguerre_l_list[0]
            # laguerre_l_list[0] = temp
        return expand(laguerre_l_list[0])
    

    5.埃尔米特多项式

    5.1 定义

    在 区 间 [ − ∞ , + ∞ ] 上 带 权 e − x 2 的 正 交 多 项 式 称 为 埃尔米特(Hermite)多项式 , 其 表 达 式 为 在区间[-\infty,+\infty]上带权e^{-x^2}的正交多项式称为\textbf{埃尔米特(Hermite)多项式},其表达式为 [,+]ex2埃尔米特(Hermite)多项式,
    H n ( x ) = ( − 1 ) n e x 2 d n d x n ( e − x 2 ) , H_n(x)=(-1)^ne^{x^2}\frac{\mathrm{d}^n}{\mathrm{d}x^n}(e^{-x^2}), Hn(x)=(1)nex2dxndn(ex2),
    递推关系
    H 0 ( x ) = 1 , H 1 ( x ) = 2 x , H n + 1 ( x ) = 2 x H n ( x ) − 2 n H n − 1 ( x ) , n = 1 , 2 , … . \begin{aligned} H_0(x)&=1,H_1(x)=2x,\\ H_{n+1}(x)&=2xH_n(x)-2nH_{n-1}(x),\quad n=1,2,\ldots. \end{aligned} H0(x)Hn+1(x)=1,H1(x)=2x,=2xHn(x)2nHn1(x),n=1,2,.

    5.2 Python实现埃尔米特多项式

    # 自己原创
    def hermite_polynomial(symbol_x, degree):
        """
        实现degree次埃尔米特(hermite)多项式
        :param symbol_x:符号变量
        :param degree:多项式阶数
        :return:指定degree阶数的埃尔米特(hermite)多项式
        """
        hermite_l_list = np.array([1, 2 * symbol_x])
        if degree in (0, 1):
            return hermite_l_list[degree]
        for n in range(1, degree + 1):
            hermite_l_list[0] = 2 * symbol_x * hermite_l_list[1] - 2 * n * hermite_l_list[0]
            # 第一种方式交换hermite_t_list
            hermite_l_list = hermite_l_list[::-1]
            # 第二种方式交换hermite_t_list
            # hermite_l_list[1], hermite_l_list[0] = hermite_l_list[0], hermite_l_list[1]
            # 第三种方式交换hermite_t_list
            # temp = hermite_l_list[1]
            # hermite_l_list[1]=hermite_l_list[0]
            # hermite_l_list[0] = temp
        return expand(hermite_l_list[0])
    
    展开全文
  • 切比雪夫多项式(Chebyshev Polynomials)

    千次阅读 2019-09-27 05:51:52
    切比雪夫多项式在逼近理论中有重要的应用。这是因为第一类切比雪夫多项式的根(被称为切比雪夫节点)可以用于多项式插值。相应的插值多项式能最大限度地降低龙格现象,并且提供多项式在连续函数的最佳一致逼近。 ...

    切比雪夫多项式在逼近理论中有重要的应用。这是因为第一类切比雪夫多项式的根(被称为切比雪夫节点)可以用于多项式插值。相应的插值多项式能最大限度地降低龙格现象,并且提供多项式在连续函数的最佳一致逼近。

     

    参考资料:https://wenku.baidu.com/view/ba41a20f767f5acfa1c7cd9c.html

    https://wenku.baidu.com/view/544dab7502768e9951e73842.html

     

     

    转载于:https://www.cnblogs.com/huangshiyu13/p/6228848.html

    展开全文
  • 第二类切比雪夫多项式. 拉盖尔多项式. 埃尔米特多项式.

    勒让德多项式.

    • P 0 ( x ) = 1. P_0(x)=1. P0(x)=1.
    • P 1 ( x ) = x . P_1(x)=x. P1(x)=x.
    • P 2 ( x ) = 1 2 ( 3 x 2 − 1 ) . P_2(x)=\frac12(3x^2-1). P2(x)=21(3x21).
    • P 3 ( x ) = 1 2 ( 5 x 3 − 3 x ) . P_3(x)=\frac12(5x^3-3x). P3(x)=21(5x33x).
    • P 4 ( x ) = 1 8 ( 35 x 4 − 30 x 2 + 3 ) . P_4(x)=\frac18(35x^4-30x^2+3). P4(x)=81(35x430x2+3).
    • 勒让德多项式

    切比雪夫多项式.

    • T 0 ( x ) = 1. T_0(x)=1. T0(x)=1.
    • T 1 ( x ) = x . T_1(x)=x. T1(x)=x.
    • T 2 ( x ) = 2 x 2 − 1. T_2(x)=2x^2-1. T2(x)=2x21.
    • T 3 ( x ) = 4 x 3 − 3 x . T_3(x)=4x^3-3x. T3(x)=4x33x.
    • T 4 ( x ) = 8 x 4 − 8 x 2 + 1. T_4(x)=8x^4-8x^2+1. T4(x)=8x48x2+1.
    • 切比雪夫多项式

    第二类切比雪夫多项式.

    • 定义】在区间 [ − 1 , 1 ] [-1,1] [1,1] 带权函数 ρ ( x ) = 1 − x 2 \rho(x)=\sqrt{1-x^2} ρ(x)=1x2 的正交多项式称为第二类切比雪夫多项式,其表达式为 U n ( x ) = s i n [ ( n + 1 ) a r c c o s x ] 1 − x 2 . U_n(x)=\frac{sin[(n+1)arccosx]}{\sqrt{1-x^2}}. Un(x)=1x2 sin[(n+1)arccosx].
    • { U n ( x ) } \{U_n(x)\} {Un(x)} 可以由如下递推式计算: { U 0 ( x ) = 1 U 1 ( x ) = 2 x U n + 1 ( x ) = 2 x U n ( x ) − U n − 1 ( x ) , n = 1 , 2 , . . . \left\{ \begin{aligned} &U_0(x)=1\\ &U_1(x)=2x\\ &U_{n+1}(x)=2xU_n(x)-U_{n-1}(x),n=1,2,... \end{aligned} \right. U0(x)=1U1(x)=2xUn+1(x)=2xUn(x)Un1(x),n=1,2,...
    • 观察两类切比雪夫多项式的定义式,可以发现第一类切比雪夫多项式 c o s ( n ⋅ a r c c o s x ) cos(n·arccosx) cos(narccosx) [ − 1 , 1 ] [-1,1] [1,1] 上有 n n n 个零点 x i = c o s 2 i − 1 2 n π , i = 1 , 2 , . . . , n x_i=cos\frac{2i-1}{2n}\pi,i=1,2,...,n xi=cos2n2i1π,i=1,2,...,n;而第二类切比雪夫多项式的 n n n 个零点为 x k = c o s k π n + 1 , k = 1 , 2 , . . . , n . x_k=cos\frac{k\pi}{n+1},k=1,2,...,n. xk=cosn+1kπ,k=1,2,...,n.
    • 另外,关于在《分段低次插值法》中提到的龙格现象,可以将均匀插值节点替换为上面的第一类切比雪夫节点,从而有效避免了龙格现象,相关文章有《切比雪夫多项式、节点与插值龙格现象(Runge Phenomenon).

    拉盖尔多项式.

    • Laguerre是法国数学家,拉盖尔多项式是拉盖尔方程 x y ′ ′ + ( 1 − x ) y ′ + n y = 0 xy''+(1-x)y'+ny=0 xy+(1x)y+ny=0 的解

    • 定义】拉盖尔多项式在区间 [ 0 , + ∞ ) [0,+∞) [0,+) 带权函数 ρ ( x ) = e − x \rho(x)=e^{-x} ρ(x)=ex 的正交,其表达式为 L n ( x ) = e − x d n d x n ( x n e − x ) . L_n(x)=e^{-x}\frac{d^n}{dx^n}(x^ne^{-x}). Ln(x)=exdxndn(xnex).
    • { L n ( x ) } \{L_n(x)\} {Ln(x)} 可以由如下递推式计算: { L 0 ( x ) = 1 L 1 ( x ) = 1 − x L n + 1 ( x ) = ( 1 + 2 n − x ) L n ( x ) − n 2 L n − 1 ( x ) , n = 1 , 2 , . . . \left\{ \begin{aligned} &L_0(x)=1\\ &L_1(x)=1-x\\ &L_{n+1}(x)=(1+2n-x)L_n(x)-n^2L_{n-1}(x),n=1,2,... \end{aligned} \right. L0(x)=1L1(x)=1xLn+1(x)=(1+2nx)Ln(x)n2Ln1(x),n=1,2,...

    埃尔米特多项式.

    • 定义】在区间 [ − ∞ , + ∞ ) [-∞,+∞) [,+) 带权函数 ρ ( x ) = e − x 2 \rho(x)=e^{-x^2} ρ(x)=ex2 的正交多项式称为埃尔米特多项式,其表达式为 H n ( x ) = ( − 1 ) n e − x 2 d n d x n ( e − x 2 ) . H_n(x)=(-1)^ne^{-x^2}\frac{d^n}{dx^n}(e^{-x^2}). Hn(x)=(1)nex2dxndn(ex2).
    • { H n ( x ) } \{H_n(x)\} {Hn(x)} 可以由如下递推式计算: { H 0 ( x ) = 1 H 1 ( x ) = 2 x H n + 1 ( x ) = 2 x H n ( x ) − 2 n H n − 1 ( x ) , n = 1 , 2 , . . . \left\{ \begin{aligned} &H_0(x)=1\\ &H_1(x)=2x\\ &H_{n+1}(x)=2xH_n(x)-2nH_{n-1}(x),n=1,2,... \end{aligned} \right. H0(x)=1H1(x)=2xHn+1(x)=2xHn(x)2nHn1(x),n=1,2,...
      在这里插入图片描述
    展开全文
  • 高斯积分公式:高斯——勒让德、高斯——切比雪夫、高斯——拉盖尔和高斯——埃尔米特。高斯——勒让德(Gauss-Legendre)公式选择某些 勒让德多项式的根作为不等距节点 。类似的还有高斯——切比雪夫积分、高斯——...
    import numpy as np
    from scipy.integrate import quad
    from sympy import *
    init_printing() 
    import matplotlib.pyplot as plt
    

    数值积分

    数值积分的本质都是采用了微积分的思想:化整为零(将积分区间离散化),以直代曲(基于积分中值定理,用函数值的加权平均数近似表示区间的平均高度)

    • 闭型牛顿——科斯特公式:梯形公式、辛普森(simpson)公式和布尔(Boole)公式,都是选择等距节点
    • 高斯积分公式:高斯——勒让德、高斯——切比雪夫、高斯——拉盖尔和高斯——埃尔米特。高斯——勒让德(Gauss-Legendre)公式选择某些勒让德多项式的根作为不等距节点。类似的还有高斯——切比雪夫积分、高斯——拉盖尔积分和高斯——埃尔米特积分等等。
    • 积分中值定理——平均高度的各种近似法

    共同点:

    (a) 都依赖于步长(梯形宽度),权重一般呈中间高,两边低的对称分布。
    (b) 用基于各个节点 x 0 , x 1 , . . . , x M x_0, x_1,...,x_M x0,x1,...,xM f ( x ) f(x) f(x)的拉格朗日逼近多项式 P M ( x ) P_M(x) PM(x)来代替被积函数 f ( x ) f(x) f(x),本质上就是取各个节点的"加权平均数",这里的权重之和不一定为1。

    不同点

    (a) 闭型牛顿——科斯特公式选择等距节点,这限制了求积公式的代数精度;而高斯——勒让德(Gauss-Legendre)公式则取消了这个限制条件,因此能够极大地提高了代数精度。从数值分析可以知道, 高斯方法的确比梯形法, 辛普森, 龙格库塔法有优越性: 对被积函数的拟合精度高, 收敛快。

    1.闭型牛顿——科斯特公式

    假设积分区间固定为 [ a , b ] [a,b] [a,b],那么不同公式要使用不一样的步长 h h h

    1.梯形公式:2个点,将积分区间分为 1 1 1等分,精度为 n = 1 n=1 n=1,步长 h = b − a h=b-a h=ba

    2.辛普森公式:3个点,将积分区间分为 2 2 2等分,精度为 n = 3 n=3 n=3,步长 h = b − a 2 h=\frac{b-a}{2} h=2ba

    3.辛普森 3 8 \frac{3}{8} 83 公式:4个点,将积分区间分为 3 3 3等分,精度为 n = 3 n=3 n=3,步长 h = b − a 3 h=\frac{b-a}{3} h=3ba

    4.布尔公式:5个点,将积分区间分为 4 4 4等分,精度为 n = 5 n=5 n=5, 步长 h = b − a 4 h=\frac{b-a}{4} h=4ba

    5.组合梯形:将积分区间分为 M M M 等分, M M M 为正整数,共 ( M + 1 ) (M+1) (M+1)个点,步长为 h = b − a M h=\frac{b-a}{M} h=Mba,误差的阶为 O ( h 2 ) O(h^{2}) O(h2)

    6.组合辛普森公式:将积分区间分为 2 M 2M 2M等分,共 ( 2 M + 1 ) (2M+1) (2M+1)个点,步长为 h = b − a 2 M h=\frac{b-a}{2M} h=2Mba,误差的阶为 O ( h 4 ) O(h^{4}) O(h4)

    各公式的具体表达式如下:
    在这里插入图片描述

    Python 3.6 代码

    def trapezoid(h ,f):
        Integral_appro =  (h / 2) * (f[0] + f[1])  
        
        return Integral_appro
    
    
    def simpson(h, f):
        Integral_appro = (h / 3) * (f[0] + 4 * f[1] + f[2])
        
        return Integral_appro
    
    def simpson_3_8(h,f):
        Integral_appro = (3/8 * h) * (f[0] + 3 * f[1] + 3 * f[2] + f[3])
        
        return Integral_appro
    
    def boole(h, f):
        Integral_appro = (2/45 * h) * (7 * f[0] + 32 * f[1] + 12 * f[2] + 32 * f[3] + 7 * f[4])
        
        return Integral_appro
    
    

    闭型牛顿——科斯特公式假设积分区间为[0,1],那么各公式的步长 h 依次为1,1/2, 1/3, 1/4, 也就是分别将区间等分为1、2、3、4份,取各个节点的函数值 f ( x i ) f(x_i) f(xi) 的"加权平均数" w ( x i ) f ( x i ) w(x_i)f(x_i) w(xi)f(xi) 作为整个区间平均高度 f ( e ) f(e) f(e)的近似

    def func(x):
        f = 1 + np.exp(-x) * np.sin(4 * x)
        
        return f
    
    I_precise = quad(func,0,1)
    I_precise
    

    ( 1.3082506046426685 , 1.4524499432540732 e − 14 ) \left ( 1.3082506046426685, \quad 1.4524499432540732e-14\right ) (1.3082506046426685,1.4524499432540732e14)

    x_s = Symbol('x_s', real=True)
    f_s = 1 + exp(-x_s) * sin(4 * x_s)
    f_s
    

    1 + e − x s sin ⁡ ( 4 x s ) 1 + e^{- x_{s}} \sin{\left (4 x_{s} \right )} 1+exssin(4xs)

    Inte_f_symbol = Integral(f_s,(x_s,0, 1))  # 积分表达式(只是符号,没有求出原函数)
    Inte_f_s = integrate(f_s, x_s)           # 积分表达式(求出原函数)
    
    Inte_f_s_n1 = integrate(f_s, (x_s,0,1))          # 定积分
    Inte_f_s_n2 = integrate(f_s, (x_s,0,1)).evalf()  # 定积分,并将结果化成小数
    
    Inte_f_symbol,Inte_f_s,Inte_f_s_n1,Inte_f_s_n2
    

    ( ∫ 0 1 ( 1 + e − x s sin ⁡ ( 4 x s ) )   d x s , x s − e − x s 17 sin ⁡ ( 4 x s ) − 4 17 e − x s cos ⁡ ( 4 x s ) , − sin ⁡ ( 4 ) 17 e − 4 17 e cos ⁡ ( 4 ) + 21 17 , 1.30825060464267 ) \left ( \int_{0}^{1} \left(1 + e^{- x_{s}} \sin{\left (4 x_{s} \right )}\right)\, dx_{s}, \quad x_{s} - \frac{e^{- x_{s}}}{17} \sin{\left (4 x_{s} \right )} - \frac{4}{17} e^{- x_{s}} \cos{\left (4 x_{s} \right )}, \quad - \frac{\sin{\left (4 \right )}}{17 e} - \frac{4}{17 e} \cos{\left (4 \right )} + \frac{21}{17}, \quad 1.30825060464267\right ) (01(1+exssin(4xs))dxs,xs17exssin(4xs)174exscos(4xs),17esin(4)17e4cos(4)+1721,1.30825060464267)

    # 假设积分区间为[0,1],那么各公式的步长 h 依次为1,1/2, 1/3, 1/4,分别将区间分为1、2、3、4份,
    # 取各个节点的函数值的加权平均数作为整个区间平均高度的近似
    I_trapezoid = trapezoid(1,[func(0), func(1)])
    I_simpson = simpson(1/2, [func(0), func(1/2), func(1)])
    I_simpson_3_8 = simpson_3_8(1/3, [func(0), func(1/3), func(2/3), func(1)])
    I_boole = boole(1/4, [func(0), func(1/4), func(2/4), func(3/4),func(1)])
    I_trapezoid, I_simpson, I_simpson_3_8, I_boole
    

    ( 0.8607939604744832 , 1.3212758322698814 , 1.3143968149336276 , 1.3085919215646966 ) \left ( 0.8607939604744832, \quad 1.3212758322698814, \quad 1.3143968149336276, \quad 1.3085919215646966\right ) (0.8607939604744832,1.3212758322698814,1.3143968149336276,1.3085919215646966)

    def func(x):
        f = 2 + np.sin(2 * np.sqrt(x))
        
        return f
    
    # M 等分
    def composite_trapezoid(f, a, b, M):
        if  M < 1:
            print('M must be larger than or equal to 1')
            return
            
        h = (b - a) / M
        
        s1 = h / 2 * (f(a) + f(b))
        s2 = 0
        
        for k in range(1,M):
            x = a + h * k
            s2 += f(x)
            
        s = s1 + s2 * h
            
        return s
    
    # 2M 等分
    def composite_simpson(f, a, b, M):
        if  M < 1:
            print('M must be larger than or equal to 1')
            return
        
        h = (b - a) / (2 * M)
        s1 = h / 3 * (f(a) + f(b))
        
        s2 = 0
        
        # k = 1, 2,...,M
        for k in range(1,M+1):
            x = a + h * (2 * k - 1)
            s2 += f(x) 
        s2 = 4 * h / 3 * s2
        
        s3 = 0
        # k = 1,2,...,M-1
        for k in range(1, M):
            x = a + h * k * 2
            s3 += f(x)
        s3 = 2 * h / 3 * s3
        
        s = s1 + s2 + s3
        
        return s
        
    
    I_true = quad(func,1,6)
    I_tra_M_10 = composite_trapezoid(func, 1, 6, 10)
    I_tra_M_20 = composite_trapezoid(func, 1, 6, 20)
    I_tra_M_40 = composite_trapezoid(func, 1, 6, 40)
    I_tra_M_60 = composite_trapezoid(func, 1, 6, 60)
    I_tra_M_80 = composite_trapezoid(func, 1, 6, 80)
    I_tra_M_100 = composite_trapezoid(func, 1, 6, 100)
    I_true,I_tra_M_10,I_tra_M_20,I_tra_M_40,I_tra_M_60,I_tra_M_80,I_tra_M_100
    

    ( ( 8.183479207662728 , 1.79863015057564 e − 10 ) , 8.193854565172531 , 8.186049263770313 , 8.184120191790313 , 8.183763962635512 , 8.183639357318619 , 8.183581696027387 ) \left ( \left ( 8.183479207662728, \quad 1.79863015057564e-10\right ), \quad 8.193854565172531, \quad 8.186049263770313, \quad 8.184120191790313, \quad 8.183763962635512, \quad 8.183639357318619, \quad 8.183581696027387\right ) ((8.183479207662728,1.79863015057564e10),8.193854565172531,8.186049263770313,8.184120191790313,8.183763962635512,8.183639357318619,8.183581696027387)

    I_sim_M_10 = composite_simpson(func, 1, 6, 10)
    I_sim_M_20 = composite_simpson(func, 1, 6, 20)
    I_sim_M_10,I_sim_M_20
    

    ( 8.183447496636239 , 8.183477167796982 ) \left ( 8.183447496636239, \quad 8.183477167796982\right ) (8.183447496636239,8.183477167796982)

    2. 高斯——勒让德公式

    2.1 高斯积分

    高斯积分法是精度最高的插值型数值积分,具有 2 n − 1 2n-1 2n1阶精度,并且高斯积分总是稳定。而高斯求积系数,可以由Lagrange多项式插值系数进行积分得到。

    高斯积分有很多种,高斯——勒让德只是其中常用的一种。如果对具体的推导过程及其它类型的Gauss积分有兴趣,请查阅参考资料 [4] 高斯——勒让德公式–中南大学
    [5] 各种类型的高斯积分 ,讲得很详细!

    如果你想更进一步,请看这里!

    目前最高效的数值积分方法:Gauss–Kronrod quadrature formula及其变种,这是一种自适应的数值积分方法,在高斯——勒让德的 n n n个节点中,根据Stieltjes多项式增加了 n + 1 n+1 n+1个节点,因此一共有 2 n + 1 2n+1 2n+1个节点,特别适合于高度振荡的函数。
    详情请看[3] wiki:Gauss–Kronrod quadrature formula,目前最高效的实现为Laurie(1997)的论文[8] 及后来Calvetti 等人(2000)提出的改进版本[9](在百度学术上都能找到可免费下载的资源)

    Virginia TechJohn Burkardt 老师在2016年给出了 Gauss–Kronrod 积分的 Python 3实现:http://people.sc.fsu.edu/~jburkardt/py_src/kronrod/kronrod.html

    下面摘录Calvetti 等人(2000)的文章中一些关键的定义:
    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    好啦,来聊些简单的东西。
    首先看看高斯积分的定义:

    在这里插入图片描述

    注意:这张PPT是我从参考资料中随手截取的,其实它取了 n + 1 n+1 n+1个点,因此精度为 2 n + 1 2n+1 2n+1,而下面的讨论都是取 n n n个点,别蒙圈了兄弟

    在这里插入图片描述

    注:关于正交多项式的定义,在一个国外的课件找到另外一种定义,暂时还没搞清楚哪一种更准确,先记录一下:

    感叹一下:百度文库进步了,连文献和国外的PPT都有!

    https://wenku.baidu.com/view/1d88b420bcd126fff7050b0c.html?rec_flag=default

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    • 不同的权函数 ρ ( x ) \rho(x) ρ(x)对应不同的正交多项式 P ( x ) P(x) P(x)

    在这里插入图片描述

    • 2.1.1 高斯——勒让德积分

    高斯——勒让德积分的权函数 ρ ( x ) = 1 \rho(x)=1 ρ(x)=1,对应的正交多项式 P ( x ) P(x) P(x)为勒让德多项式 P n ( x ) P_n(x) Pn(x),积分区间为 [ − 1 , 1 ] [-1,1] [1,1]

    高斯——勒让德积分的本质就是被积函数 f ( x ) f(x) f(x) 在区间 ( − 1 , 1 ) (-1,1) (1,1) 内的积分近似于区间 ( − 1 , 1 ) (-1,1) (1,1) 内的 n n n个勒让德——多项式零点的函数值 f ( x k ) f(x_k) f(xk) 的加权平均数 s u m ( w k f ( x k ) ) sum(w_k f(x_k)) sum(wkf(xk)),权重之和不一定为1,权重依然呈现中间高,两边低的趋势。

    在这里插入图片描述

    • 2.1.2 高斯——切比雪夫积分

    高斯——切比雪夫积分的权函数 ρ ( x ) = 1 1 − x 2 \rho(x)=\frac{1}{1-x^2} ρ(x)=1x21,对应的正交多项式 P ( x ) P(x) P(x)为切比雪夫多项式 T n ( x ) T_n(x) Tn(x),积分区间为 [ − 1 , 1 ] [-1,1] [1,1]。**

    在这里插入图片描述

    • 2.1.3 高斯——拉盖尔积分

    高斯——拉盖尔积分的权函数 ρ ( x ) = e − x \rho(x)=e^{-x} ρ(x)=ex,对应的正交多项式 P ( x ) P(x) P(x)为拉盖尔多项式 L n ( x ) L_n(x) Ln(x),积分区间为 [ 0 , + ∞ ] [0,+\infty] [0,+]

    在这里插入图片描述

    • 2.1.4 高斯——埃尔米特积分
      高斯——埃尔米特积分的权函数 ρ ( x ) = e − x 2 \rho(x)=e^{-x^{2}} ρ(x)=ex2,对应的正交多项式 P ( x ) P(x) P(x)为埃尔米特多项式 H n ( x ) H_n(x) Hn(x),积分区间为 [ − ∞ , + ∞ ] [-\infty,+\infty] [,+]

    在这里插入图片描述

    numpy有对应的模块:

    1. Gauss-Legendre:
      节点和权值:numpy.polynomial.legendre.leggauss
      权函数 ρ ( x ) = 1 \rho(x)=1 ρ(x)=1numpy.polynomial.legendre.legweight

    2. Gauss-Chebyshev:
      节点和权值:numpy.polynomial.chebyshev.chebgauss
      权函数 ρ ( x ) = 1 1 − x 2 \rho(x)=\frac{1}{1-x^2} ρ(x)=1x21numpy.polynomial.chebyshev.chebweight

    3. Gauss-Laguerre:
      节点和权值:numpy.polynomial.laguerre.laggauss
      权函数 ρ ( x ) = e − x \rho(x)=e^{-x} ρ(x)=exnumpy.polynomial.laguerre.lagweight

    4. Gauss-Hermite:
      节点和权值:numpy.polynomial.hermite.hermgauss
      权函数 ρ ( x ) = e − x 2 \rho(x)=e^{-x^{2}} ρ(x)=ex2numpy.polynomial.hermite.hermweight

    • 对于任意有限区间 [ a , b ] , a , b ≠ ± ∞ [a,b], a,b≠±\infty [a,b],a,b̸=± 内的积分,可以借助线性变换将积分区间变换到 [ − 1 , 1 ] [-1,1] [1,1],从而利用高斯——勒让德积分和高斯——切比雪夫积分进行计算。

    2.2 高斯-勒让德积分

    高斯-勒让德求积公式是构造高精度差值积分的最好方法之一。他是通过让节点和积分系数待定,让函数 f ( x ) f(x) f(x) 依次取 i = 0 , 1 , 2.... n i=0,1,2....n i=0,1,2....n次多项式,使其尽可能多的能够精确成立来求出积分节点和积分系数。高斯积分的代数精度是 2 n − 1 2n−1 2n1,而且是最高的。通常运用的是 ( − 1 , 1 ) (−1,1) (1,1)的积分节点和积分系数,其他积分域是通过一定的变换变换到-1到1之间积分。

    勒让德多项式
    首先复习一下勒让德多项式:

    在这里插入图片描述

    一般 N N N点的高斯——勒让德公式对于次数小于等于 2 N − 1 2N-1 2N1次的多项式是精确的,即 G N ( f ) G_N(f) GN(f)精度为 n = 2 N − 1 n=2N-1 n=2N1,误差项 E [ f ] E[f] E[f]包含 2 N 2N 2N阶导数。

    • Q:为什么 N N N点的高斯——勒让德公式对于次数小于等于 2 N − 1 2N-1 2N1次的多项式是精确的呢?

    • A:因为 N N N点的高斯——勒让德公式包含 N N N个未知节点和相应的 N N N个未知权值,一个有 2 N 2N 2N个未知数。我们可以从0阶多项式开始构造方程,则 2 N 2N 2N个未知数需要 2 N 2N 2N个等式方程,需要多项式 x c , c = 0 , 1 , 2 , . . . 2 N − 1 x^c, c=0,1,2,...2N-1 xc,c=0,1,2,...2N1,所以对次数小于等于 2 N − 1 2N-1 2N1次的多项式是可以取等号的,因此是精确的,而对 2 N − 1 2N-1 2N1次及以上的多项式则只能取约等于号,存在误差。

    • 因此 2 2 2点的高斯——勒让德多项式对于 3 3 3次的多项式是精确的, 3 3 3点的高斯——勒让德多项式对于 5 5 5次的多项式是精确的。

    • 因此, 2 2 2点的高斯——勒让德多项式的误差项 E [ f ] E[f] E[f]包含 4 4 4阶导数, 3 3 3点的高斯——勒让德多项式的误差项 E [ f ] E[f] E[f]包含 6 6 6阶导数。

    N N N点的高斯——勒让德公式的节点就是 n n n阶勒让德多项式 P n ( x ) P_n(x) Pn(x)的根。

    想要在区间 t ∈ [ a , b ] t∈[a,b] t[a,b]上使用高斯——勒让德公式,只需作变量替换 t = ( a + b ) / 2 + ( b − a ) / 2 ∗ x t=(a+b)/2 + (b-a)/2 * x t=(a+b)/2+(ba)/2x,节点和权值必须从高斯——勒让德节点与权值表中获得。

    以下是Python3.6的代码实现。

    2.1 用Sympy和numpy求勒让德多项式的节点

    n阶勒让德多项式

    x = Symbol('x', real=True)
    n = Symbol('n', real=True)
    legendre(n,x)
    

    P n ( x ) P_{n}\left(x\right) Pn(x)

    0——4阶勒让德多项式及多项式的根

    legendre(0,x), solve(legendre(0,x),x)  # 0阶
    

    ( 1 , [ ] ) \left ( 1, \quad \left [ \right ]\right ) (1,[])

    legendre(1,x), solve(legendre(1,x),x)  # 1阶
    

    ( x , [ 0 ] ) \left ( x, \quad \left [ 0\right ]\right ) (x,[0])

    legendre(2,x), solve(legendre(2,x),x)  # 2阶
    

    ( 3 x 2 2 − 1 2 , [ − 3 3 , 3 3 ] ) \left ( \frac{3 x^{2}}{2} - \frac{1}{2}, \quad \left [ - \frac{\sqrt{3}}{3}, \quad \frac{\sqrt{3}}{3}\right ]\right ) (23x221,[33 ,33 ])

    legendre(3,x), solve(legendre(3,x),x)  # 3阶
    

    ( 5 x 3 2 − 3 x 2 , [ 0 , − 15 5 , 15 5 ] ) \left ( \frac{5 x^{3}}{2} - \frac{3 x}{2}, \quad \left [ 0, \quad - \frac{\sqrt{15}}{5}, \quad \frac{\sqrt{15}}{5}\right ]\right ) (25x323x,[0,515 ,515 ])

    legendre(4,x),solve(legendre(4,x),x)  # 4阶
    

    ( 35 x 4 8 − 15 x 2 4 + 3 8 , [ − − 2 30 35 + 3 7 , − 2 30 35 + 3 7 , − 2 30 35 + 3 7 , 2 30 35 + 3 7 ] ) \left ( \frac{35 x^{4}}{8} - \frac{15 x^{2}}{4} + \frac{3}{8}, \quad \left [ - \sqrt{- \frac{2 \sqrt{30}}{35} + \frac{3}{7}}, \quad \sqrt{- \frac{2 \sqrt{30}}{35} + \frac{3}{7}}, \quad - \sqrt{\frac{2 \sqrt{30}}{35} + \frac{3}{7}}, \quad \sqrt{\frac{2 \sqrt{30}}{35} + \frac{3}{7}}\right ]\right ) 835x4415x2+83,35230 +73 ,35230 +73 ,35230 +73 ,35230 +73

    f = 1 / x f = 1 / x f=1/x在[1,5]上的积分

    def func(x):
        f = 1 / x
        
        return f
    
    # nodes是标准的勒让德多项式的根
    # T是替换变量
    # 对于不同阶数的勒让德多项式,nodes和weights是不相同的
    def gauss_lengendre(fun, a,b, nodes,weights):
        nodes = np.array(nodes)
        weights = np.array(weights)
        T = (a+b)/2 + (b-a)/2 * nodes    # 变量替换
        quad = (b-a)/2 * np.sum(weights * fun(T)) # element-wise multiplication
         
        return quad
    

    精确值

    I_true = quad(func,1,5)
    I_true
    

    ( 1.6094379124341014 , 3.6599536780638603 e − 09 ) \left ( 1.6094379124341014, \quad 3.6599536780638603e-09\right ) (1.6094379124341014,3.6599536780638603e09)

    用3点勒让德多项式近似

    le_3 = legendre(3,x)
    nodes_3 = solve(le_3,x)
    nodes_3
    

    [ 0 , − 15 5 , 15 5 ] \left [ 0, \quad - \frac{\sqrt{15}}{5}, \quad \frac{\sqrt{15}}{5}\right ] [0,515 ,515 ]

    weights = np.array([5/9, 8/9, 5/9])
    nodes = np.array([-np.sqrt(15)/5, 0, np.sqrt(15)/5])
    a = 1
    b = 5
    I_n_3 =  gauss_lengendre(func,a,b, nodes, weights)
    error_n_3 = abs(I_true[0] - I_n_3) 
    I_n_3,error_n_3
    

    ( 1.6026936026936027 , 0.006744309740498666 ) \left ( 1.6026936026936027, \quad 0.006744309740498666\right ) (1.6026936026936027,0.006744309740498666)

    用8点勒让德多项式近似

    le_8 = legendre(8,x)
    nodes_8 = solve(le_8,x)    # 求出根节点
    nodes_8_f = [i.evalf() for i in nodes_8]    # list nodes_8_f 的每个元素都是 sympy.core.numbers.Float
    nodes_8_arr = np.array(nodes_8_f, dtype=float)  # 转换成ndarray,将数据类型改为float
    nodes_8_arr
    
    array([-0.18343464,  0.18343464, -0.52553241,  0.52553241, -0.79666648,
            0.79666648, -0.96028986,  0.96028986])
    
    weights_8_arr = np.array([0.3626837834, 0.3626837834, 0.3137066459, 0.3137066459, 
                              0.2223810345, 0.2223810345, 0.1012285363,0.1012285363], dtype=np.float64)
    weights_8_arr
    
    array([0.36268378, 0.36268378, 0.31370665, 0.31370665, 0.22238103,
           0.22238103, 0.10122854, 0.10122854])
    
    a = 1
    b = 5
    I_n_8 =  gauss_lengendre(func,a,b, nodes_8_arr, weights_8_arr)
    error_n_8 = abs(I_true[0] - I_n_8) 
    I_n_8, error_n_8
    

    ( 1.609437439052705 , 4.733813963042621 e − 07 ) \left ( 1.609437439052705, \quad 4.733813963042621e-07\right ) (1.609437439052705,4.733813963042621e07)

    2.2 用numpy.polynomial.legendre.leggauss(n)一键求出n阶高斯——勒让德节点和权值

    numpy.polynomial.legendre.leggauss(n) 函数可以一键求出 n n n阶高斯——勒让德节点和权值,在 n &lt; = 100 n&lt;=100 n<=100的范围内,这个函数的结果是准确的。

    n_100, w_100 = np.polynomial.legendre.leggauss(100)
    n_100, w_100
    
    (array([-0.99971373, -0.99849195, -0.99629513, -0.99312494, -0.9889844 ,
            -0.98387754, -0.97780936, -0.97078578, -0.96281365, -0.95390078,
            -0.94405587, -0.93328854, -0.9216093 , -0.90902957, -0.89556164,
            -0.88121868, -0.86601469, -0.84996453, -0.83308388, -0.81538924,
            -0.79689789, -0.77762791, -0.75759812, -0.73682809, -0.71533812,
            -0.6931492 , -0.67028302, -0.64676191, -0.62260886, -0.59784747,
            -0.57250193, -0.54659701, -0.52015802, -0.49321079, -0.46578165,
            -0.4378974 , -0.40958529, -0.38087298, -0.35178853, -0.32236034,
            -0.29261719, -0.26258812, -0.23230248, -0.20178986, -0.17108008,
            -0.14020314, -0.1091892 , -0.07806858, -0.04687168, -0.01562898,
             0.01562898,  0.04687168,  0.07806858,  0.1091892 ,  0.14020314,
             0.17108008,  0.20178986,  0.23230248,  0.26258812,  0.29261719,
             0.32236034,  0.35178853,  0.38087298,  0.40958529,  0.4378974 ,
             0.46578165,  0.49321079,  0.52015802,  0.54659701,  0.57250193,
             0.59784747,  0.62260886,  0.64676191,  0.67028302,  0.6931492 ,
             0.71533812,  0.73682809,  0.75759812,  0.77762791,  0.79689789,
             0.81538924,  0.83308388,  0.84996453,  0.86601469,  0.88121868,
             0.89556164,  0.90902957,  0.9216093 ,  0.93328854,  0.94405587,
             0.95390078,  0.96281365,  0.97078578,  0.97780936,  0.98387754,
             0.9889844 ,  0.99312494,  0.99629513,  0.99849195,  0.99971373]),
     array([0.00073463, 0.00170939, 0.00268393, 0.00365596, 0.00462445,
            0.00558843, 0.00654695, 0.00749907, 0.00844387, 0.00938042,
            0.0103078 , 0.01122511, 0.01213146, 0.01302595, 0.01390771,
            0.01477588, 0.01562962, 0.01646809, 0.01729046, 0.01809594,
            0.01888374, 0.01965309, 0.02040323, 0.02113344, 0.021843  ,
            0.02253122, 0.02319742, 0.02384096, 0.0244612 , 0.02505754,
            0.0256294 , 0.02617622, 0.02669746, 0.02719261, 0.0276612 ,
            0.02810276, 0.02851685, 0.02890309, 0.02926108, 0.02959049,
            0.02989098, 0.03016227, 0.03040408, 0.03061619, 0.03079838,
            0.03095048, 0.03107234, 0.03116384, 0.03122488, 0.03125542,
            0.03125542, 0.03122488, 0.03116384, 0.03107234, 0.03095048,
            0.03079838, 0.03061619, 0.03040408, 0.03016227, 0.02989098,
            0.02959049, 0.02926108, 0.02890309, 0.02851685, 0.02810276,
            0.0276612 , 0.02719261, 0.02669746, 0.02617622, 0.0256294 ,
            0.02505754, 0.0244612 , 0.02384096, 0.02319742, 0.02253122,
            0.021843  , 0.02113344, 0.02040323, 0.01965309, 0.01888374,
            0.01809594, 0.01729046, 0.01646809, 0.01562962, 0.01477588,
            0.01390771, 0.01302595, 0.01213146, 0.01122511, 0.0103078 ,
            0.00938042, 0.00844387, 0.00749907, 0.00654695, 0.00558843,
            0.00462445, 0.00365596, 0.00268393, 0.00170939, 0.00073463]))
    
    I_n_100 =  gauss_lengendre(func,a,b, n_100, w_100)
    error_n_100 = abs(I_true[0] - I_n_100) 
    I_n_100, error_n_100
    

    ( 1.6094379124340965 , 4.884981308350689 e − 15 ) \left ( 1.6094379124340965, \quad 4.884981308350689e-15\right ) (1.6094379124340965,4.884981308350689e15)

    error_n_3,error_n_8, error_n_100
    

    ( 0.006744309740498666 , 4.733813963042621 e − 07 , 4.884981308350689 e − 15 ) \left ( 0.006744309740498666, \quad 4.733813963042621e-07, \quad 4.884981308350689e-15\right ) (0.006744309740498666,4.733813963042621e07,4.884981308350689e15)

    比较不同阶数的计算误差,可见高阶的一般能取得较高精度。

    [1]高斯——勒让德积分中不同阶数下最大高斯节点间距的关系 节点数N与最大间距呈反相关;帖子给出了2-8阶勒让德多项式的权值
    [2] numpy.polynomial.legendre.leggauss
    [3] wiki:Gauss–Kronrod quadrature formula
    [4] 高斯——勒让德公式–中南大学
    [5] 各种类型的高斯积分
    [6] 高斯型求积公式
    [7] Calculation of Gauss Quadrature Rules
    [8] Laurie D P. Calculation of Gauss-Kronrod quadrature rules[J]. Mathematics of Computation, 1997, 66(219):1133-1145
    [9] Calvetti D, Golub G H, Gragg W B, et al. Computation of Gauss-Kronrod Quadrature Rules[J]. Mathematics of Computation, 2000, 69(231):1035-1052

    展开全文
  • 这些多项式是切比雪夫多项式、埃尔米特多项式、广义拉盖尔多项式和勒让德多项式。 您可以在这些基础上计算信号的广义频谱。 致谢: 该工具箱是在作者访问斯洛伐克科希策技术大学 BERG 学院生产过程控制与信息化...
  • 若机械求积公式具有阶代数精度,则称为Gauss型求积公式,而在上关于权函数的次正交多项式的零点就是Gauss型求积公式的Gauss点。 在Gauss型求积公式中,若权函数,区间为,则公式为 特别的称为Gauss-Legendre公式...
  • `Opolys` 类实现了可变正交多项式多项式如下: - 雅可比- 勒让德- 切比雪夫- 拉盖尔- 埃尔米特 此外,该类计算多项式的零点以及高斯正交的权重和节点。 在线文档: http : //ebertolazzi.github.io/Opoly
  • 天空一片蔚蓝, 清风添上了浪漫心里那份柔情蜜意, 似海无限———《最爱》李克勤1 正交多项式的定义 1.1 正交多项式定义定义:一个多项式序列 ,其阶数为 ,对于每一个 ,这个多项式序列在开区间 上关于权函数 正交...
  • 经典正交多项式介绍及其应用

    千次阅读 2020-07-11 20:05:26
    1 正交多项式的定义 1.1 正交多项式定义 定义: 一个多项式序列 ${ {p_n}(x)} _{n = 0}^\infty $,其阶数为 [pn(x)]=n[{p_n}(x)] = n[pn​(x)]=n ,对于每一个 nnn,这个多项式序列在开区间 (a,b)(a,b)(a,b) 上关于...
  • 数值分析(7)-正交多项式

    千次阅读 2019-06-06 09:57:22
    1. 误差 2. 多项式插值与样条插值 3. 函数逼近 4. 数值积分与数值微分 5. 线性方程组的直接解法 6. 线性方程组的迭代解法 7. 非线性方程求根 8. 特征值和特征向量的计算 9. 常微分方程初值问题的数值解
  • class numpy.poly1d(c_or_r,r = False,variable = None )一维多项式类。   参数:  c_or_r : array_like r = False多项式的系数,以递减的幂, r = True多项式的根(多项式求值为0的值) variable: ...
  • 切比雪夫 拉盖尔 赫米特人 此外,该类还计算多项式的零点和权重以及高斯正交的节点。 Matlab界面 安装工具箱(从下载)。 安装完成后,在Matlab的命令窗口中编译“工具箱”: > CompileOPolyLib 用法 实例化多项式 %...
  • 习题

    2019-06-14 17:15:00
    1.求证:切比雪夫-拉盖尔(Chebyshev-Laguerre)多项式\[L_{n}(x)=\mathrm{e}^{x} \frac{\mathrm{d}^{n}}{\mathrm{d} x^{n}}\left(x^{n} \mathrm{e}^{-x}\right)\]有$n$个不同的零点. 2.求证:切比雪夫-埃尔米特...
  • 广义傅立叶级数(正弦,余弦,切比雪夫,勒让德,厄米,球谐函数) 常微分方程(Euler,Runge-Kutta,指数图) 偏微分方程(波动,热量,Navier-Stokes) 物理模拟(n体,分子动力学) 孤子(NLSE,KdV,Sine-Gordon...
  • percent 百分数 percentiles 百分位数 pie chart 饼图 point estimate 点估计 poisson distribution 泊松分布 polynomial curve 多项式曲线 polynomial regression 多项式回归 polynomials 多项式positive ...
  • 023_《Delphi常用数值算法集》

    千次阅读 2010-11-26 11:36:00
    8.6 求复系数多项式根的拉盖尔(Laguerre)方法 8.7 求实系数多项式根的贝尔斯托(Bairstou)方法 8.8 非线性方程组的牛顿—拉斐森方法 第9章 函数的极值和最优化 9.1 黄金分割搜索法 9.2 不用导数...
  • 多项式微分矩阵 有界空间:切比雪夫微分矩阵 半有界空间:Hermite 微分矩阵 无界空间:拉盖尔微分矩阵 周期空间:傅立叶和 Sinc 微分矩阵 与时间无关的边值问题 瞬态边值问题 特征值问题 积分和求积公式 边界条件 ...
  • 17·8 拉盖尔函数与拉盖尔多项式 17·9 切比雪夫多项式 17·10 超几何函数 17·11 合流超几何函数 17·12 椭圆积分与椭圆函数 第十八章 数值分析 18·1 误差和有效数字 18·2 插值法 18·3 数值逼近 18·4 数值微分 ...
  • 处理多项式,包括根和多项式拟合, 例如拉盖尔和穆勒的方法。 插值和函数逼近重心拉格朗日插值,Pade和有理插值,切比雪夫或三角逼近。 一些特殊功能例如,菲涅耳积分,黎曼Zeta或复数伽马函数,以及兰伯特W通过牛顿...
  • 数学算法原书光盘

    2012-05-11 17:38:03
    6.求复系数多项式根的拉盖尔方法 7.求实系数多项式根的贝尔斯托方法 8.非线性方程组的牛顿拉斐斯方法 第9章函数的极值和最优化 1.黄金分割搜索法 2.不用导数的布伦特法 3.用导数的布伦特法 4.多元函数的下山单纯形法...
  • 6.求复系数多项式根的拉盖尔方法 7.求实系数多项式根的贝尔斯托方法 8.非线性方程组的牛顿拉斐斯方法 第9章函数的极值和最优化 1.黄金分割搜索法 2.不用导数的布伦特法 3.用导数的布伦特法 4.多元函数的下山单纯形法...
  • delphi算法集源码

    2012-07-24 09:46:04
    6.求复系数多项式根的拉盖尔方法 7.求实系数多项式根的贝尔斯托方法 8.非线性方程组的牛顿拉斐斯方法 第9章函数的极值和最优化 1.黄金分割搜索法 2.不用导数的布伦特法 3.用导数的布伦特法 4.多元函数的下山...
  • 求复系数多项式根的拉盖尔方法7.求实系数多项式根的贝尔斯托方法8.非线性方程组的牛顿拉斐斯方法第9章函数的极值和最优化1.黄金分割搜索法2.不用导数的布伦特法3.用导数的布伦特法4.多元函数的下山单纯形法5.多元...

空空如也

空空如也

1 2 3 4 5
收藏数 96
精华内容 38
关键字:

切比雪夫拉盖尔多项式