Lagrange多项式插值计算

版权声明:本文为博主原创文章,未经博主允许不得转载。 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>
程序运行的结果如下:



猜你喜欢

转载自blog.csdn.net/walkandthink/article/details/42683729