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

正交多项式-勒让德多项式,两类切比雪夫多项式及零点,拉盖尔多项式,埃尔米特多项式1 正交多项式设 n x 是 a b 上首项系数 an 0 的 n 次多项式 x 为 a b 上的权函数 设 varphi n x 是 a b 上首项系数 a n neq0 的 n 次多项式 rho x

大家好,欢迎来到IT知识分享网。

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,\uad\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,\uad 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},\uad k=1,2,\ldots,n xk=cosn+1,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]) 

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/138770.html

(0)
上一篇 2025-06-10 21:00
下一篇 2025-06-10 21:10

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信