打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
勒让德(Legendre)多项式及其python编程实现

在数值分析中勒让德(Legendre)多项式是比较常见的,本文主要记录勒让德(Legendre)多项式的一些基本性质以及其编程实现。

1. 定义

在区间[一1,1] 带权函数的正交多项式为

以上即勒让德(Legendre)多项式的定义

2. 递推关系

根据其表达式的性质 可推出如下的递推关系

3. python代码实现勒让德多项式

3.1 代码

根据以上的递推关系,可以编写如下的python代码,代码基于sympy符号运算库。实现的过程主要利用了前面的递推关系,程序中通过循环实现该递推关系。

def LegendrePolynomials(N,x):
    '''
    N 为勒让德多项式的阶数
    x 为自变量 sym.symbol对象
    '''

    if N == 0:
        return 1
    if N == 1:
        return x
    p0 = LegendrePolynomials(0,x)
    p1 = LegendrePolynomials(1,x)
    assert N>=2
    for i in range(1,N):
        p = (2*i+1)/(i+1)*x*p1 - i/(i+1)*p0
        p0 = p1
        p1 = p
    return sym.simplify(p1)
                          

3.2 验算

验算如下,与真实解答吻合:

3.3 将sympy表达式转换为numpy表达式

sympy经常需要与numpy混合使用,因此本节在此记录如何将sympy表达式转换为numpy表达式,在上述代码的基础上进行转换,首先获得勒让德多项式的表达式,再通过sympy.lambdify进行转换:

import numpy as np
## 表达式转numpy表达式
expr = LegendrePolynomials(4,x)
expr = sym.lambdify([x],expr,'numpy')
xs = np.linspace(-1,1)
ys = expr(xs)

3.4 勒让德多项式函数图像

有了前面3.3的方法,可以轻松获取不同勒让德多项式的函数表达式,可以拿来绘图

import matplotlib.pyplot as plt
def get_expr_np(N,x):
    expr = LegendrePolynomials(N,x)
    return sym.lambdify([x],expr,'numpy')
fig = plt.figure(figsize=(15,7))
ax = fig.add_subplot(111)
xs = np.linspace(-1,1,101)
for i in range(2,8):
    expr_ = get_expr_np(i,x)
    ys_ = expr_(xs)
    ax.plot(xs,ys_,label=r'$N={}$'.format(i))
ax.legend()

最终结果如下所示:

4 参考资料

  • https://baike.baidu.com/item/%E5%8B%92%E8%AE%A9%E5%BE%B7%E5%A4%9A%E9%A1%B9%E5%BC%8F?fromModule=lemma_search-box
  • https://baike.baidu.com/item/Legendre%E5%A4%9A%E9%A1%B9%E5%BC%8F/6860140
  • 张晓丹,郑连存,丁军,卫宏儒,郑权.应用计算方法教程 第2版:机械工业出版社,2015.08
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
python – 使用(numpy)浮点数时Sympy的结果不正确
Sympy 符号计算包使用
SymPy库常用函数
Python圈中的符号计算库-Sympy
sympy 的练习
sympy实战
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服