数值分析——拉格朗日插值法

  具体代码见我的下载。

"""
    拉格朗日插值法   
"""

import numpy as np
from sympy.abc import x,y,z

# 插值节点
nodes = [(0.0, 0.0),\
         (0.5, 1.6),\
         (1.0, 2.0),\
         (6.0, 1.5),\
         (7.0, 1.5),\
         (9.0, 0.0)]   # (x, y)

#
def lagrange(cond):
    """
        拉格朗日插值法
    """

    # Part-1 : 求拉格朗日插值基函数
    base_funcs = []
    for i in range(len(cond)):
        base_func = 1
        den = 1   # 分子
        num = 1   # 分母
        for j in range(len(cond)):
            if i != j:
                den = den * (x-cond[j][0])
                num = num * (cond[i][0]-cond[j][0])
                base_func = den / num
        base_funcs.append(base_func)
    # Part-2 : 求拉格朗日插值函数
    f = 0
    for i in range(len(cond)):
        f = f + cond[i][1]*base_funcs[i]
    # Part-3 返回多项式函数
    return f, base_funcs
    
        
def main():
    """
        main函数
    """

    # Part-1 : 插值多项式
    f, base_funcs = lagrange(nodes)
    
    # Part-2 : 打印输出
    print('*'*25,'基函数','*'*25)
    counter = 0
    for base_func in base_funcs:
        print('# L',counter,':' ,base_func)
        counter += 1
    print('*'*25,'插值多项式','*'*25)
    print('# f(x) = ', f)
    
    print('Please press any keys to exit...')
    
if __name__ == "__main__":
    main()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值