#include #define MAX_N 100 double lagrange(double varx, int n, double x[], double y[]); //============================================================== // メイン関数 //============================================================== int main(void) { double x[MAX_N], y[MAX_N]; int i; double xx, yy, h; x[0]=1; y[0]=1; x[1]=3; y[1]=2; x[2]=4; y[2]=5; h = 6.0/100; for(i=0; i<=100; i++){ xx=-1+i*h; yy=lagrange(xx, 2, x, y); printf("%f\t%f\n", xx, yy); } return 0; } //============================================================== // ラグランジュ補間 //============================================================== double lagrange(double varx, int n, double x[], double y[]) { int k, j; double Lk, sum=0.0; for(k=0; k<=n; k++){ Lk=1.0; for(j=0; j<=n; j++){ if(j!=k){ Lk *= (varx-x[j])/(x[k]-x[j]); } } sum += Lk*y[k]; } return sum; }