割線法による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

マラー法に比べて実装がかなり簡単だった。
精度も問題なさそうなので、まず割線法の利用を考えた方が良さそう。

clear; close all;

f = @(x) x^3+6*x^2+21*x+32;
buf=20;
x=zeros(1,buf);
x(1)=0;
x(2)=-1;
k=2;
res=1e4;
delta=1e-8;
while res>delta
    x(k+1) = (x(k)*f(x(k-1))-x(k-1)*f(x(k)))/...
        (f(x(k-1))-f(x(k)));
    res=abs(f(x(k+1)));    
    disp(res);
    k = k+1;
end
fprintf('ans =\n %d\n',x(k));

計算結果

ans =
 -2.637834e+00