본문 바로가기

프로그래밍/숙제도둑질

[C|MFC|수치해석] 라그랑지 다항식

반응형
라그랑지 다항식. 주어진 n 개의 점들을 지나는 n-1차 다항식을 구하는 것. 공식은 위키백과 영문판을 참고했다.

#include <stdio.h>
#include <math.h>

typedef struct _data {
double x;
double y;
} DATA;

double l(DATA *dataList, int nData, int j, double x)
{
double prod = 1;

for(int i=0; i<nData; i++)
{
if(i==j)
continue;
prod *= ((x-dataList[i].x)/(dataList[j].x -dataList[i].x));
}

return prod;
}

double lagrange(DATA *dataList, int nData, double x)
{
// L(x) = sum (j=0 to k) y_j x l_j(x)
//
// x -x_i
// where l_j(x) = prod (i=0, i!=j to k) -----
// x_j-x_i
double sum = 0;

for(int j=0; j<nData; j++)
{
sum += dataList[j].y * l(dataList, nData, j, x);
}
return sum;
}

int main()
{
DATA data[4] = {
{ 0, 1 },
{ 1, 2.7183 },
{ 2, 7.3891 },
{ 3, 20.0855}
};
int k = 4;
double xs[4] = {1.5, 2.5, 3.5, 4.5 };

for(int i=0; i<4; i++)
{
printf("f_l(%lf) = %lf\n", xs[i], lagrange(data, 4, xs[i]));
}

return 0;
}

mfc로 짜본 것.

사용자 삽입 이미지

소스는

invalid-file

라그랑지 mfc 소스.

여기. 마음껏 고치라.

728x90