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


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


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



拉格朗日插值法 拉格朗日插值法 拉格朗日插值法 拉格朗日插值法 拉格朗日插值法 拉格朗日插值法 拉格朗日插值法 拉格朗日插值法 拉格朗日插值法 拉格朗日插值法
 
粤ICP备14056181号  © 2014-2020 ITdaan.com