ニュートン法を用いた問題で
方程式 f(x) = x^2 − 2 として,方程式 f(x) = 0 を
実行時に与えた初期値のもとで
Newton 法によって解くプログラムを作成したいのですが思い通りの結果になりません。
Newton 反復を 1 回行う関数の戻り値がよくわかっていないためだと思います。
変更すべき点を教えていただければ幸いです。
#include <stdio.h> #include <math.h> #define K_MAX 100 #define DX 1.0e-10 #define EPS 1.0e-10 void input(double *x); double f(double x); double df(double x); double g(double x); int newton(double *x); int main(void) { double x; int k; input(&x); k = newton(&x); printf("\n<%d> f(%.16f) = %.16f\n",k,x,f(x)); return 0; } void input(double *x) { printf("input x: "); scanf("%lf",x); } double f(double x) { return (x * x - 2); } double df(double x) { /* return (2 * x); */ return ( (f(x + DX) - f(x)) / DX ); } double g(double x) { return (x * x - 2); } int dgtof(int m) { int ans = 1; while (m >= 10) { ans++; m = m / 10; } return ans; } int newton(double *x) { double newx, oldx = *x; int dgt = dgtof(K_MAX); int k; for (k = 1; k <= K_MAX; k++) { newx = g(oldx); printf("<%*d> g(%.16f) = %.16f\n",dgt,k,oldx,newx); if (fabs(newx - oldx) < EPS) break; oldx = newx; } *x = newx; return ((k < K_MAX) ? k : -1); }
回答2件
あなたの回答
tips
プレビュー