반응형
미분가능한 연속함수의 해를 구하는 방법.
임의의 점 x 를 구하면 (x, f(x))의 좌표를 알게된다.
함수를 미분하면 이 좌표에서의 기울기를 알게 되므로,
(기울기 = y변화량 / x변화량) 의 식을 이용하여,
f'(x0) = f(x0)/x0-x1의 값이 되므로 식을 변형하여.
x1 = x0 - f(x0)/f'(x0)의 추정점의 식이 나오게된다.
여기서 나온 x1을 이용하여 또다시 기울기를 구해주는 것을 반복하면
결과적으로 점점 해의값에 근접하게 된다.
아래에는 뉴턴법에대한 소스코드이다.
y=x^2-2의 함수에 대한 예시로 입력한 수에 따라 얼추 1.414..., -1.414... 가 나온다.
(0을 넣으면 기울기가 0이 되므로 재입력창이 생긴다.)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | #include <stdio.h> #include <math.h> double graph (double x); double diff_graph (double x); double newton (double a); double graph (double x){ double y; y = (x*x) - 2; return y; } double diff_graph (double x){ double y; y = 2*x; return y; } double newton (double a){ double l0,l,x0,x,y0,y; x0=a; int co =1; while(1){ y0 = graph(x0); l0 = diff_graph(x0); x = x0 - (y0/l0); printf("%d %lf \n",co,x); if(fabs(graph(x0)-graph(x))<0.000001){ break; } y= fabs(x0-x); if(y<0.000001){ break; } x0=x; co++; } printf("The value is %lf \n",x); return 0; } int main (int argc, const char * argv[]) { double a; printf("Input the number : \n"); scanf("%lf",&a); while(a==0){ printf("One more : \n"); scanf("%lf",&a); } newton(a); return 0; } |
반응형