1次元ニュートンラフソン法による3次方程式の複素解の計算

 x^3+6x^2+21x+32=0
カルダノの方法によって、解は
 x_1=-\sqrt[3]{9}+\sqrt[3]{3}-2=-2.637834253
 x_2= -\sqrt[3]{9}e^{\frac{2}{3}\pi i}+\sqrt[3]{3}e^{\frac{4}{3}\pi i}-2=1.6810829-3.0504302i
 x_3= -\sqrt[3]{9}e^{\frac{4}{3}\pi i}+\sqrt[3]{3}e^{\frac{2}{3}\pi i}-2=-1.6810829‐ +3.0504302i

xをzとおいた f(z)=z^3+6z^2+21z+32は解析関数(微分可能な複素関数)なので、1次元ニュートンラフソン法でも複素解が計算できる。(一般的にf(z)が解析関数であるのはまれ)
初期値を複素数に置くのがミソ。初期値が実数(たとえばz(1)=0)だと実解に収束する。

clear; close all;

f = @(z) z^3+6*z^2+21*z+32;
dfdz = @(z) 3*z^2+12*z+21;

z=zeros(1,100);
z(1)=-1-3i;

delta=1e-10;
res=1e4;
k=2;
while res>delta
  z(k) = z(k-1) - f(z(k-1))/dfdz(z(k-1));    
  res = abs(f(z(k)));
  %disp(res);
  k = k+1;
end
disp(z(k-1));

計算結果

  -1.6811 - 3.0504i