#include <stdio.h>
#include <stdlib.h>
void Newton(int n, int m, double x[], double y[], double xs[], double ys[], double d[][25]);
int main(){
int n, m;
scanf("%d %d", &n, &m);
double x[25], y[25], d[25][25];
double *xs = (double *) malloc(m * sizeof(double));
double *ys = (double *) malloc(m * sizeof(double));
for (int i = 0; i < n; i++) {
scanf("%lf %lf", &x[i], &y[i]);
}
for(int i = 0; i < m; i++){
scanf("%lf", &xs[i]);
}
Newton(n, m, x, y, xs, ys, d);
free(xs);
free(ys);
}
void Newton(int n, int m, double x[], double y[], double xs[], double ys[], double d[][25]){
double ret = 0;
for(int i = 0; i < n; i++){
d[i][0] = y[i];
for (int j = 1; j <= i; j ++) {
d[i][j] = (d[i][j-1] - d[i-1][j-1]) / (x[i] - x[i-j]);
}
}
for (int _ = 0; _ < m; _ ++) {
double ret = 0;
double fac = 1;
for(int i = 0; i < n; i++){
ret += d[i][i] * fac;
fac *= (xs[_] - x[i]);
}
printf("%lf %lf\n", xs[_], ret);
}
}
Newton插值
最新推荐文章于 2024-09-14 16:21:49 发布