正交多项式-勒让德多项式,两类切比雪夫多项式及零点,拉盖尔多项式,埃尔米特多项式

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])

你可能感兴趣的:(数值分析,人工智能数理基础,算法,python)