2分法による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

2分法で計算する。

clear; close all;

f = @(x) x^3+6*x^2+21*x+32;
a(1)=-3;
b(1)=0;
c=zeros(1,100);

k=2;
delta=1e-10;
epsilon=0.5e-5;
res1=1e4;
res2=1e4;
while res1>delta && res2>epsilon
  c(k)=1/2*(a(k-1)+b(k-1));  
  check = f(a(k-1))*f(c(k));
  if check<0
    a(k) = a(k-1);
    b(k) = c(k);
  else 
    a(k) = c(k);
    b(k) = b(k-1);  
  end
  res1=abs(f(c(k)));
  res2=abs(a(k-1)-b(k-1));
  k = k+1;
  %disp(res2);
end
fprintf('ans\n = %d\n',c(k-1));

計算結果

ans
 = -2.637833e+00

解が計算できていることがわかる。