例4の出力に用いたもの。
/* Newton method */ #include <stdio.h> #include <math.h> #include <complex.h> #define IMAX 10 #define EPS 1.0e-12 // If |f(z_i)|< EPS then stop. double complex f(double complex z); double complex df(double complex z); int main(void) { int i; double absfz; double complex z,u,fz,dfz; z = -1.0 + 1.0 * I; i = 0; absfz = cabs(f(z)); printf("%2s %20s %20s %10s s\n","i","Re(z_i) ","Im(z_i) ","|f(z_i)|"); printf("%2d %20.15f %20.15f %10.3e\n",i,creal(z),cimag(z),absfz); while(absfz > EPS && i < IMAX) { fz = f(z); dfz = df(z); u = fz/dfz; z = z - u; i++; absfz = cabs(f(z)); printf("%2d %20.15f %20.15f %10.3e\n",i,creal(z),cimag(z),absfz); } return 0; } double complex f(double complex z) { double complex w; w=-5.0+z*(-2.0+z*z); return w; } double complex df(double complex z) { double complex w; w=-2.0 + 3.0 * z * z; return w; }
お気づきのことがありましたら、下記のメールアドレスにご一報ください。
メールアドレス 長田直樹 <osada "at" cis.twcu.ac.jp> (スパム防止のため@を"at"で置き換えています。)