表3と表4の出力に用いたCプログラム(文字コードはUTF-8)
#include <stdio.h> #include <math.h> #define EPS 1.0e-15 #define NMAX 30 double f(double); double df(double); int main(void) { int n = 0; double x,fx; printf("初期値を入力してください。"); scanf("%lf",&x); fx = f(x); printf("-------------------------------------\n"); printf("%3s %10s %18s \n","nu","x_nu","f(x_nu)"); printf("-------------------------------------\n"); printf("%3d %20.15f %8.2g\n",n,x,fx); while(fabs(fx) > EPS && n < NMAX){ x = x - fx/df(x); fx = f(x); n++; printf("%3d %20.15f %8.2g\n",n,x,fx); } printf("-------------------------------------\n"); return 0; } double f(double x) { double y; y = -2.0 + x * (5.0 + x * (-4.0 + x)); return y; } double df(double x) { double y; y= 5.0 + x * (-8.0 + 3.0 * x); return y; }
gcc version 4.0.1 (Apple Computer, Inc. build 5250) によるコンパイルと実行
$ cc -Wall -lm newton.c $ ./a.out 初期値を入力してください。2.1 ------------------------------------- nu x_nu f(x_nu) ------------------------------------- 0 2.100000000000000 0.12 1 2.015384615384615 0.016 2 2.000452488687783 0.00045 3 2.000000408936907 4.1e-07 4 2.000000000000334 3.3e-13 5 2.000000000000000 0 -------------------------------------