分段线性插值问题...

来源:百度知道 编辑:UC知道 时间:2024/05/27 02:51:29
已知:
x=0.0,0.1,0.195,0.3,0.401,0.5时,
f(x)分别=0.39894,0.39695,0.39142,0.38138,0.36812,0.35206
要用C语言编一个程序,分别用分段线性插值,分段二次插值及拉格郎日插值计算f(x)的近似值...
分段线性插值的我编好了,怎样把后面那两个加进去呢?谢谢各位了...
附上我编的一部分:
#include <stdio.h>
void main()
{
double x[6] = {0.0, 0.1, 0.195, 0.3, 0.401, 0.5};
double f[6] = {0.39894,0.39695,0.39142,0.38138,0.36812,0.35206};
double input;
double output;
int i,j,k;

scanf("%lf", &input);

for (i=0;i<5;i++)
{
if (x[i] <= input && x[i+1] >= input)
{
output=f[i] +(f[i+1]-f[i])*(input-x[i])/(x[i+1]-x[i]);
break;
}
}
printf("%.5f\n", output);
}

写急了 写的不清楚,重写了一遍

#include<stdio.h>
#include<math.h>
double Lagrange1(double *x, double *y, double xx) //拉格郎日插值
{
int i,j;
double *a,yy=0.000;
a=new double[6];
for(i=0;i< 6;i++)
{
a[i]=y[i];
for(j=0;j< 6;j++)
if(j!=i)
a[i]*=(xx-x[j])/(x[i]-x[j]);
yy+=a[i];
}
delete a;
return yy;
}
double Lagrange2(double *x, double *y, double input) //分段线性插值
{

double output;
int i;

for (i=0;i<5;i++)
{
if (x[i] <= input && x[i+1] >= input)
{
output=y[i] +(y[i+1]-y[i])*(input-x[i])/(x[i+1]-x[i]);
break;
}
}
return output;
}

double Lagrange3(double *x,double *y,double u) //分段二次插值
{
int i,k=0;
double v;
for(i=0;i<6;i++)
{
if(u<x[1])
{
k=0;
v=y[k]*(u-x[k+1])*(u-x[k+2])/((x[k]