「非線型方程式(前編)」(2009年3月号)

プログラム

複素Newton法のプログラム

例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;
}

参考文献リンク

  1. [7] 東北大学和算ポータル

お気づきのことがありましたら、下記のメールアドレスにご一報ください。

メールアドレス 長田直樹 <osada "at" cis.twcu.ac.jp> (スパム防止のため@を"at"で置き換えています。)
Last modified: Mar Wed 11 13:57:23 JST 2009
Valid HTML 4.01 Strict