二分法による方程式の近似解を求める

概要

二分法によって、区間$[a,b]$における関数$f$の根の近似計算法を検討します。

1. 二分法のアィディア

関数$f=x^3-2$を例にして、区間$[0,3]$の中で$f(x)=0$の解の計算方法を説明します。

準備として、関数fを定義します。 MATLABでは、以下の文法で関数を定義します。

function 戻り値の変数 = 関数名(入力変数)
  %関数の中では、関数値を計算して、その値を「戻り値の変数」にします。
end

以下の関数の例では、xが入力変数、valueが戻り値の変数(出力変数)です。

function value = f(x)
  value = x.^3 -2
end
補足: 「x.^3」の中の「.」演算子の役割 xが配列であるとき、「x.^3」はxの各成分の3乗を計算して、計算結果を配列として返します。ここで、「.」という演算子によって、配列の成分毎の計算ができます。

以下、$y=f(x)$のグラフを描いてみます。

補足: 「hold on」の役割 二つのグラフを一つの軸に描くために、「hold on」という命令を使用します。以下の例では、y=0とy=f(x)を描いています。

グラフによる考察:

以下のコードでは、$a$, $b$を更新して、より小さい区間で近似解を検討します。

$$ f(a)\cdot f(p)<0 $$

上記の計算を繰り返しすると、解の存在範囲を小さくすることができます。$a$と$b$が十分近いであれば、$f(x)=0$の近似解を$(a+b)/2$にすることができます。

演習1

$|b-a|<0.02$まで、上記のコードを手で繰り返して計算してください。 ただし、毎回の計算では、aを更新するか、bを更新するか、手動でコードを調整することが必要です。 途中の計算結果を以下のセルに書いてください。

  1. a=0, b=3, p=1.5, f(a)*f(p)<0
  2. a=0, b=1.5, p=0.75, f(a)*f(p)>0
  3. ...

2. プログラムで二分法のアルゴリズムを書く

上記の操作をwhile文のループで行うと、効率な計算ができます。

終了条件:

計算アルゴリズム

アルゴリズムの計算の流れ

演習2

二分法のアルゴリズムのコードを書いて、$[0,3]$の中で$x^3-2=0$の解を計算しなさい。

ただし、$N=20$,$TOL=0.00001$とする。