while文と二分法

1. プログラムの流れの制御(while文)の復習

while文は、継続条件を指定し、不定回数を繰り返しを行います。

構文

while 条件式
    実行コード
end

例: 卒業要件124単位と取るまでに、授業を履修して単位と取ること

 total_unit = 0
 while total_unit < 124 
    unit = randi(8);
    total_unit = total_unit + unit;
 end

ここで、randi(n) はnまでの正の整数(即ち、$1,2,\cdots, n$中から疑似乱数を返す。

上記の例では、総単位数が124になるまでに、単位を繰り返し取っています。

while文を途中で終了する場合、break文を使用します。

例えば、「履修科目の数は50以上なると卒業できる」という卒業要件がある場合、while文を途中で終了する可能性があります。(実際、このような卒業要件がないです。)

 total_unit = 0;
 lecture_num=0;
 while total_unit < 124 
    unit = randi(4);
    total_unit = total_unit + unit;
    lecture_num = lecture_num + 1;
    if lecture_num >=50
       break
    end
 end

以下のコートを実行してみてください。

演習1

「1からnまでの整数の2乗の和が50に超える」と満たす最小のnを求めよ。即ち、 $$ \sum_{i=1}^{n-1} i^2 < 50, ~~ \sum_{i=1}^n i^2 \ge 50 $$ を満たす$n$を計算する。

二分法

区間$(a,b)$上の関数$f$の根を計算するために、二分法が使用されます。

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

まず、$y=f(x)$のグラフを書いておきます。

注意:

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

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

演習2

$|b-a|<0.02$まで、上記のコードを手で繰り返して計算してください。 ただし、毎回の計算では、aを更新するか、bを更新するか、手動でコードを調整するのは必要です。

二分法のアルゴリズム

終了条件:

計算アルゴリズム

詳細

演習3:

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

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