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

2023-11-17

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])
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 通过 add_subplot 添加子图后如何共享轴?

    我有一个像这样的数据框 df pd DataFrame A 0 3 0 2 0 5 0 2 B 0 1 0 0 0 3 0 1 C 0 2 0 5 0 0 0 7 D 0 6 0 3 0 4 0 6 index list abcd A B
  • 为什么需要在 Python 方法中显式使用“self”参数? [复制]

    这个问题在这里已经有答案了 当在 Python 中的类上定义方法时 它看起来像这样 class MyClass object def init self x y self x x self y y 但在其他一些语言中 例如 C 您可以使用
  • Flask 中“缺少 CSRF 令牌”,但它在模板中呈现

    问题 当我尝试登录 使用 Flask login 时 我得到Bad Request The CSRF session token is missing但令牌正在呈现 在模板中 secret key 已设置 并且我在本地运行localhost
  • 为什么在访问 Python 对象属性时使用 getattr() 而不是 __dict__ ?

    在具有一定程度的 Python 对象自省的源代码示例和 SO 答案中 常见的模式是 getattr some object attribute name string 是否有理由优先选择这种模式 some object dict attri
  • 将 Python Pandas DataFrame 写入 Word 文档

    我正在努力创建一个使用 Pandas DataFrames 的 Python 生成的报告 目前我正在使用DataFrame to string 方法 但是 这会作为字符串写入文件 有没有办法让我实现这一目标 同时将其保留为表格 以便我可以使
  • 带有 mkdocs 的本地 mathjax

    我想在无法访问互联网的计算机上使用 MathJax 和 Mkdocs 因此我不能只调用 Mathjax CDN Config mkdocs yml site name My Docs extra javascript javascripts
  • 用 Python 绘制直方图

    我有两个列表 x 和 y x 包含字母表 A Z Y 包含它们在文件中的频率 我尝试研究如何在直方图中绘制这些值 但在理解如何绘制它方面没有成功 n bins patches plt hist x 26 normed 1 facecolor
  • 如何从hdfs读取文件[重复]

    这个问题在这里已经有答案了 我在 project1目录下的hadoop文件系统中有一个文本文件名mr txt 我需要编写 python 代码来读取文本文件的第一行 而不将 mr txt 文件下载到本地 但我无法从 hdfs 打开 mr tx
  • 设置高亮大括号的 vim 颜色主题

    如何更改突出显示大括号的 vim 配色方案 我希望实际编辑 vim 主题文件以使更改永久生效 问候 克雷格 匹配括号的自动高亮颜色称为MatchParen 您可以通过执行以下操作来更改 vimrc 中的颜色 highlight MatchP
  • 高级描述熊猫

    有没有像 pandas 那样更高级的功能 通常我会继续这样 r pd DataFrame np random randn 1000 columns A r describe 我会得到一份很好的总结 就像这样 A count 1000 000
  • Python-验证我的文档 xls 中是否存在工作表

    我正在尝试在空闲时间设计一个小程序 加载 xls 文件 然后在要扫描的文档中选择一张纸 步骤1 用户导入 xls文件 导入程序后检查文件是否存在 我能做到的 第 2 步 我要求用户提供要分析的文档表 xls 的名称 这就是它停止的地方 该程
  • 是否可以在Python中将日+月(不是年)与当前日+月进行比较?

    我正在获取 5 月 10 日 格式的数据 我试图弄清楚它是今年还是明年 该日期仅一年 因此 5 月 10 日表示 2015 年 5 月 10 日 而 5 月 20 日表示 2014 年 5 月 20 日 为此 我想将字符串转换为日期格式并进
  • 如何在matplotlib中调整x轴

    I have a graph like this x轴上的数据表示小时 所以我希望x轴设置为0 24 48 72 而不是现在的值 很难看到 0 100 之间的数据 fig1 plt figure ax fig1 add subplot 11
  • Django 将 JSON 数据传递给静态 getJSON/Javascript

    我正在尝试从 models py 中获取数据并将其序列化为views py 中的 JSON 对象 模型 py class Platform models Model platformtype models CharField max len
  • 无需访问 Internet 即可部署 Django 的简单方法?

    我拥有的是使用 Django 开发的 Intranet 站点的开发版本以及放置在 virtualenv 中的一些外部库 它运行良好 我可以在任何具有互联网连接的计算机上使用相同的参数 使用 pip 轻松设置 virtualenv 但是 不幸
  • Python 读取未格式化的直接访问 Fortran 90 给出不正确的输出

    这是数据的写入方式 它是一个二维浮点矩阵 我不确定大小 open unit 51 file rmsd nn output form unformatted access direct status replace recl Npoints
  • 没有名为“turtle”的模块

    我正在学习并尝试用Python3制作贪吃蛇游戏 我正在进口海龟 我正在使用 Linux mint 19 PyCharm python37 python3 tk Traceback most recent call last File hom
  • 使用 MPI 的 Allreduce 对 Python 对象求和

    我正在使用使用 Python 中的字典和计数器构建的稀疏张量数组操作 我想让并行使用这个数组操作成为可能 最重要的是 我最终在每个节点上都有计数器 我想使用 MPI Allreduce 或另一个不错的解决方案 将其添加在一起 例如 使用计数
  • 如何使用 Python/Django 在 Facebook 中获取(和使用)扩展权限

    我正在尝试编写一个简单的应用程序 让用户授予我的代码写入其页面的 Facebook 流的权限 据我了解 它应该很简单 让用户单击一个按钮 启动一个弹出窗口 其中包含我的 Facebook 应用程序中的页面 在该页面中 他们单击授予的内容流发
  • Biopython 可以执行 Seq.find() 来解释歧义代码吗

    我希望能够在 Seq 对象中搜索考虑歧义代码的子序列 Seq 对象 例如 以下内容应该是正确的 from Bio Seq import Seq from Bio Alphabet IUPAC import IUPACAmbiguousDNA

随机推荐