sandbox/hugoj/test_interp/test_interp.c
Test for my bilinear interpolation.
Target is x2+y2 at x=y=0.5 so target = 0.5
I test interpolating from a 2D grid to this target point. I build a grid x=y=[-1,1] with NxN points The grid has increasing number of points, which should result in increasing accuracy. *
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include "interpolate.h"
#include "constant.h"
int main() {
int N;
int aN[6] = {10,20,40,60,80,100};
double X=0.5;
double Y=0.5;
double Fi;
printf("true result F(%f,%f)=%f\n",X, Y, X*X+Y*Y);
for (int i=0; i<6; ++i) {
N = aN[i];
double xi[N];
double yi[N];
for (int i=0; i<N; ++i){
xi[i] = -1.0 +2.0*i / (N-1);
yi[i] = -1.0 +2.0*i / (N-1);
}
double F[N*N]; // f(x)=x^2
for (int i=0; i<N;++i){
for (int j=0; j<N;++j){
F[i*N+j] = xi[i]*xi[i] + yi[i]*yi[i];
}
}
// interp
Fi = interp_lin(xi, yi, N, N, X, Y, F);
printf("N=%d ",N);
printf("interpolated Fi = %f\n",Fi);
Fi = interp_lin(xi, yi, N, N, 0.05, 0.05, F);
}
return 0;
}