무한 급수 중에 테일러(Taylor) 급수라는 놈이 있는데,
f(x)의 값은 f의 테일러 급수의 충분히많은 항들을 더해줌으로써 요구되는 정확도의 범위안에서 근사 시킬수 있다
대표적인 간단한 테일러 급수로는
를 들수 있겠다.
과연 n을 무한데로 보내면 e^x 와 숫자와 수렴할까?
아래 코딩을 통해 알아보자.
x 를 -2.0 에서 2.0 까지 증가시키며 n을 1부터 5까지 증가시키며 원래 e^x 와의 오차를 비교하는 프로그램이다.
#include <stdio.h>#include <math.h>// programmed by kaspyx#define e 2.71828 //e는 근사치로 상수로 정의double power(double x,int pdg) // x를인자로 받아 pdg 제곱하여 결과를 리턴{double pow=1;if ( pdg == 0)return 1;while( pdg >0){pow *=x;pdg--;}return pow;}double fact(double dg) // dg를 매개변수로 받아서 팩토리얼(!)한 값을 리턴 하는 함수{double f=1;while ( dg > 0 ){f *=dg;dg--;}return f;}double tprog(double x,double dg) // 1+f(x)/n!+f(x^2)/n!..계산하는함수로 그합을 리턴.{double sum=1;if ( dg == 1){return ( x + 1);}while ( dg > 0){sum += (power(x,dg))/(fact(dg));dg--;}return sum;}double prog_func(int dg)//x가 -2.0부터 2.0 까지 0.1씩 증가시키며 오차 분석해주는 함수{double x = -2.0;double ex;double sc;if ( dg == 0)return 1;while ( x <= 2.1){printf("when x = %f ",x);sc = tprog(x,dg);ex = (pow(e,x)-(sc))/(pow(e,x));printf("%f ex = %f and dif ",sc,ex);if ( ex < 0)ex *=(-1); //오차는 항상 양수가 나오게함printf("%f%%",ex*100);printf("\n");x+=0.1;}return x;}void main(){int dg = 1;while ( dg <= 5 ) //degree를 1부터 5까지 반복시킴{printf("degree = %d \n",dg);prog_func(dg);dg++;}getchar();}
'IT > Numerical analysis' 카테고리의 다른 글
Secant Method c언어로 구현하기 (0) | 2015.05.11 |
---|---|
False Position Method c언어로 구현하기 (2) | 2015.05.11 |
야코비(Jacobi) Method C언어로 구현하기 (0) | 2015.03.31 |
Bisection Method C언어로 구현하기 (0) | 2015.03.31 |