拉格朗日插值法(程式碼實現及部分證明)
阿新 • • 發佈:2018-12-31
6來飛起
圖片的i=j?下面第二個應該為temp = temp / (xi - xj);
#include "cstdio"
const int MAXN = (int) 1e5 + 5;
struct point {
double x, y;
} list[MAXN];
int n, m;
double x;
double Lagrange( point *list, int qnum, double x ) {
double rt = 0, tmp = 1.0;
for(int i = 1; i <= qnum; rt += list[i].y * tmp, tmp = 1.0 , ++i)
for(int j = 1; j <= qnum; ++j)
if(i != j)
tmp *= (x - list[j].x) / (list[i].x - list[j].x);
return rt;
}
int main() {
scanf("%d", &n);
for(int i = 1; i <= n; scanf("%lf%lf", &list[i].x, &list[i].y), ++i);
scanf("%d", &m);
while ( m-- )
scanf("%lf", &x), printf("%lf\n", Lagrange(list, n, x));
}
感覺自己學了假的OI, 姚班大神虐蒟蒻~
大家都很強, 可與之共勉。
2017.3.18