#include <stdio.h> #include <math.h> #define EPS pow(10.0,-8.0) /* epsilon 의 설정 */ #define NMAX 10 /* 최대반복횟수 */ void newton(double x, double(*)(double), double(*)(double)); /* Newton법 */ double f1(double x); /* f(x) 계산 */ double df1(double x); /* f'(x)의 계산 */ double f2(double x); /* f(x) 계산 */ double df2(double x); /* f'(x)의 계산 */ int main(void){ double x; double (*fp1)(double), (*dfp1)(double), (*fp2)(double), (*dfp2)(double); fp1=&f1; dfp1=&df1; fp2=&f2; dfp2=&df2; printf("함수1의 초기값x0을 입력하세요\n"); scanf("%lf",&x); newton(x, f1, df1); printf("함수2의 초기값x0을 입력하세요\n"); scanf("%lf",&x); newton(x, f2, df2); return 0; } /* Newton법 */ void newton(double x, double(*f)(double), double(*df)(double)){ int n=0; double d; do{ d=-(*f)(x)/(*df)(x); x=x+d; n++; }while(fabs(d)>EPS&&n<NMAX); if(n==NMAX){ printf("답을 발견하지 못했습니다.\n"); } else{ printf("답은 x=%f 입니다.\n",x); } } /* 함수의 정의 */ double f1(double x){ return 3.0*x*x*x+4.0*x*x-5.0; } /* 함수의 정의 */ double f2(double x){ return exp(3.0*x)-10*x; } double df1(double x){ return 9.0*x*x+8.0*x; } double df2(double x){ return 3.0*exp(3.0*x)-10; }
'c·c++ > c 프로그래밍' 카테고리의 다른 글
strdup 활용하기 (0) | 2012.06.13 |
---|---|
한줄의 단어를 역순으로 출력하기 (0) | 2012.06.13 |
.smi 파일에서 영어만 추출하기. (0) | 2012.06.11 |
threaded binary tree (0) | 2012.06.09 |
scanf_s 의 사용법 (0) | 2012.06.09 |