//アキマ(秋間 浩)の補間法 #define MAX 32 class akima{ double x[MAX],f[MAX]; int N; //ユーザーが設定した分点の数 double zet(double d); double pow(double base,int n); double m(int j); double t(int j); double h(int j); double a(int j,int k); double P(int j,double xx); double A(int k,double xx,int n); double q(double xx,int n); void swap(double *x,double *y); void sort(); void add(); public: void set(double px[],double pf[],int n); void set(int px[],int pf[],int n); double hokan(double xx); }; double akima::zet(double d) //絶対値(zettaichi) { return (d<0)?d*(-1):d; } double akima::pow(double base,int n) { double d=1; for(int i=0;i=0){ int i,j; for(i=3,j=-1;i<=k;i++) if(x[i-1]>x[i]){ j=i-1; swap(&x[i],&x[j]); swap(&f[i],&f[j]); } k=j; } } void akima::add() { int n=2; x[n-2]=x[n]+x[n]-x[n+2]; x[n-1]=x[n]+x[n+1]-x[n+2]; f[n-2]=q(x[n-2],n+2); f[n-1]=q(x[n-1],n+2); n=N+1; x[n+1]=x[n]+x[n-1]-x[n-2]; x[n+2]=x[n]+x[n]-x[n-2]; f[n+1]=q(x[n+1],n); f[n+2]=q(x[n+2],n); } void akima::set(double px[],double pf[],int n) { for(int i=2;i=x[j] && xx<=x[j+1]) return P(j,xx); return q(xx,N+1); //if(xx>x[N+1]) }