版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/walkandthink/article/details/42683729
关于Lagrange插值多项式的定义如下:
计算实现的代码如下:
<span style="font-size:18px;">#include <iostream>
#include <cmath>
using namespace std;
double PointsInsert(int n,double xi,double *x,double *y)
{
//n为插值点的个数
//N=2为两点高斯插值,即线性插值
//N=3为三点高斯插值,即二次插值
//xi为目标点的坐标,x和y为插值点的坐标值和数值
int i,j;
double *L;
double up,low,result;
L=new double[n+1];
for (i=1;i<=n;i++)
{
up=1.0;low=1.0;
for (j=1;j<=n;j++)
{
if (j!=i)
{
up=up*(xi-x[j]);
low=low*(x[i]-x[j]);
}
}
L[i]=up/low;
}
result=0.0;
for (i=1;i<=n;i++)
{
result=result+L[i]*y[i];
}
delete[] L;
return result;
}
int main()
{
int n,i;
double *x,*y,xi;
n=2;
while (n>1)
{
cout<<"请输入插值点的个数(-1结束运算):";
cin>>n;
if (n>1)
{
cout<<"您要求"<<n<<"点插值计算!"<<endl;
x=new double[n+1];
y=new double[n+1];
cout<<"请输入"<<n<<"个点的x,y值:"<<endl;
for (i=1;i<=n;i++)
{
cin>>x[i]>>y[i];
}
cout<<"请输入需要插值的点的x:";
cin>>xi;
cout<<"插值计算结果为:"<<PointsInsert(n,xi,x,y)<<endl;
cout<<"插值计算完成!"<<endl;
cout<<"********************"<<endl;
delete[] x;
delete[] y;
}
}
return 0;
}</span>
程序运行的结果如下: