• ラグランジュの補間法
#include <stdio.h>
#include <math.h>
#define N 6

double x[N] = {0.0,1.0,2.0,3.0,3.1,5.0};
double y[N] = {0.0,1.1,2.5,4.0,4.1,5.0};
double lagrange( double );
 
void main(){
 double xx , yy;
 printf("XX\t\tYY\n");
 for( xx = 0.0 ; xx <= 5.0 ; xx += 0.25){
  yy = lagrange(xx);
  printf("%8.2lf\t%8.2lf\n",xx,yy);
 }
 return;
}

double lagrange(double xx){
 double z[N];
 double yy = 0.0;
 int i , j ;
 for( i = 0 ; i < N ; i++ ){
  z[i] = 1.0;
  for(j = 0 ; j < N ; j++ )
   if(i != j){
    z[i] *= (xx - x[j]);
    z[i] /= (x[i] - x[j]);
  }
  yy += z[i] * y[i];
 }
 return yy;
}
最終更新:2007年01月23日 12:00