线性插值
线性插值
法一:
#include<iostream>
using namespace std;
#define L 2
int main()
{
int C,i,k;
double x;
double y=0.0;
double t=1.0;
cout<<"请输入已知有多少个点对"<<endl;
cin>>C;
double (*p)[L]=new double[C][L];
cout<<"输入各个点对的值"<<endl;
for(i=0;i<C;i++)
for(k=0;k<L;k++)
cin>>p[i][k];
cout<<"输入你要估算的x的值";
cin>>x;
for(k=0;k<C;k++)
{
for(i=0;i<C;i++)
{
if(i==k) continue ;
t=(x-p[i][0])/(p[k][0]-p[i][0])*t;
}
y=y+t*p[k][1];
t=1;
}
cout<<"当x="<<x<<" 时,估计的结果为:"<<y<<endl;
delete[] p;
}
法二:
#include <stdio.h>
#include <math.h>
#define N 4
double lagrange(double x[N],double y[N],double xx)//定义一个函数
{
double yy,t;
int j,k;
yy=0.0;
for(j=0;j<N;j++)
{t=1.0;
for(k=0;k<N;k++)
if(k!=j)
t=t*(xx-x[k])/(x[j]-x[k]);
yy=yy+t*y[j];
}
return yy;
}
int main()
{
double xx,yy;
double x[N]={10,11,12,13};
double y[N]={2.3026,2.3979,2.4849,2.5649};
xx=11.75;
yy=lagrange(x,y,xx);//调用函数
printf("y=%lf\n",yy);
}
//结果: 2.463857

浙公网安备 33010602011771号