1. 程式人生 > >拉格朗日插值法(程式碼實現及部分證明)

拉格朗日插值法(程式碼實現及部分證明)

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