例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"で置き換えています。)