大家好,欢迎来到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=0的n次多项式,ρ(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)−nPn−1(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)=1−x21,区间为[−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),∣x∣⩽1.
若令 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)−Tn−1(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)=1−x2的正交多项式 称为 第二类切比雪夫多项式 , 其表达式为 称为\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)=1−x2sin[(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)−Un−1(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=cos2n2k−1π,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+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[(b−a)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,+∞]上带权e−x的正交多项式称为拉盖尔(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(xne−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 , … . \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)=1−x,=(1+2n−x)Ln(x)−n2Ln−1(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)多项式},其表达式为 在区间[−∞,+∞]上带权e−x2的正交多项式称为埃尔米特(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(e−x2),
递推关系
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)−2nHn−1(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