拉格朗日插值法(伪代码 c/c++ python 实现)

来源:互联网 发布:电信的客户端软件 编辑:程序博客网 时间:2024/05/21 23:32

插值法又称“内插法”,是利用函数f (x)在某区间中已知的若干点的函数值,作出适当的特定函数,在区间的其他点上用这特定函数的值作为函数f (x)的近似值,这种方法称为插值法。如果这特定函数是多项式,就称它为插值多项式。

拉格朗日插值是n次多项式插值,其成功地用构造插值基函数的 方法解决了求n次多项式插值函数问题。

其基本思想是将待求的n次多项式插值函数p(x)改写成另一种表示方式,再利用插值条件⑴确定其中的待定函数,从而求出插值多项式。



套用相关公式,即可实现相关的程序。

算法的流程图:


伪代码如下:

LagrangeInterpolationPolynomia(ele, n, x[], y[]) //ele是需要预测的元素值,n是提供的值的数量,x[]与y[]分别存储着已知的x值与所对应的y值sum <- 0k <- 0while k < n dot <- 1j <- 0while j < n doif j != kt <- ((ele - x[j])/(x[k] - x[j]))*tsum <- t * y[k] + sumendj <- j + 1end k <- k + 1end return sum

c/c++的代码:

#include <iostream>using namespace std;float LagrangeInterpolationPolynomia(float x,int n,float a[],float b[]);int main (){float x,y,t,a[100],b[100];int i,j,k,n;cout << "输入n的值"<<endl;cin >> n;cout << "输入x的值"<<endl;cin >> x;y = 0;for (i=0;i<n;i++){cout<< "输入x"<<i<<"的数据:";cin >> a[i];cout<< "输入y"<<i<<"的数据:";cin >> b[i];}cout << "y="<<LagrangeInterpolationPolynomia(x,n,a,b)<<endl;return 0;}float LagrangeInterpolationPolynomia(float x,int n,float a[],float b[]){int k;float t,y=0;int j;for (k = 0;k < n;k++){t = 1;for (j = 0;j < n;j++){if (j != k)t = ((x - a[j])/(a[k]-a[j]))*t;}y = t * b[k]+y;cout << y << endl;}return y;}
python的代码:

def LagrangeInterpolationPolynomia(ele, n, x, y):    sum_num = 0    for k in range(0, n):        t = 1        for j in range(0, n):            if j != k:                t = ((ele - x[j])/(x[k] - x[j]))*t                sum_num = t * y[k] + sum_num    return sum_numx = [1, 3]y = [1, 2]print LagrangeInterpolationPolynomia(1.5, len(x), x, y)




原创粉丝点击