拉格朗日插值法基于python的实现方法

一、插值

   设函数y=f(x)在区间[a,b]上连续,给定n+1个点

               a≤x0<x1<....<xn≤b

   已知,f(xk)=yk(k=0,1....n),在函数类P中寻找一个函数Φ(x)。作为f(x)的近似表达式,使满足:

             Φ(xk)=f(xk)=yk, k=0,1,2,3,4....n                (2)

  f(x)为被插值函数,Φ(x)为插值函数,x0,x1....xn为插值节点。(2)为插值节点。

二、拉格朗日插值法

   线性插值:拉格朗日插值法中最简单的是线性插值,我们先来了解线性插值函数的构成。在此基础上了解多次插值,

   已知两点(x0,y0)和(x1,y1),这里f(x0)=y0,f(x1)=y1,通过这两个点的插值多项式是一条直线,如下:

   (x-x1)/(x0-x1)*y0+(x-x0)/(x1-x0)*y1    可以看出当x=x0的时候,函数值y0,当x=x1的时候,函数值为y1.

  • 流程图

代码

import numpy as np
def lagelangr(xk, yk, x):
    n = len(xk)
    lk = []
    y = 0
    for k in range(n):
        fenzi = 1
        fenmu = 1
        for j in range(n):
            if j != k:
                fenzi *= (x - xk[j])
                fenmu *= (xk[k] - xk[j])
        lk.append(fenzi / fenmu)
    for i in range(n):
        y += lk[i] * yk[i]
    return y
if __name__ == '__main__':
    xk = input("xk的值为:").split(',')
    yk = input("yk的值为:").split(',')
    x = input("要估计的值为:")
    print('\n')
    xk = np.array(xk).astype(np.float64)
    yk = np.array(yk).astype(np.float64)
    x = np.array(x).astype(np.float64)
    Y = lagelangr(xk, yk, x)
    print("值为:"+str(Y)+'\n')

猜你喜欢

转载自blog.csdn.net/m0_54570435/article/details/132410350