2022年度プログラミング演習A・B

第5回レポート課題の解説

演習1



上記のニュートン法のアルゴリズムを実現するコードを書き、関数 $f(x)=x^2-2$ に対して方程式 $f(x)=0$ の近似解を求めてください。ただし、初期値 $x_0=0.5$、微小正数 $EPS=10^{-10}$、反復回数の上限 $N=20$ とします。

赤字部分における $x\_new$ の初期化・更新の式は、

$$ x\_new=x\_old-\frac{f(x\_old)}{f\_dif(x\_old)} $$

である。

演習2(オプション)

ニュートン法が収束しないような関数と初期値を与えて、それを確認するコードを書いてください。特に、生成された数列の各項($x\_new$)を画面に出力して、収束しない様子が分かるようにしてください。

「接線の $x$ 切片が数列の次の項になる」というニュートン法の性質からグラフの望まれる形状を考えると、関数

$$ f(x)=\sqrt[3]{x} $$

に対しては初期値 $x_0$ を適切に与えればニュートン法が収束しないと予想される。実際、

$$ f'(x)=\frac{1}{3\sqrt[3]{x^2}} $$

であるから、

$$ x_1=x_0-\frac{f(x_0)}{f'(x_0)}=x_0-3x_0=-2x_0 $$

となる。同様の計算から

$$ x_n=(-2)^n x_0 $$

が得られるため、初期値 $x_0\neq 0$ であれば数列 $\{x_n\}$ が振動することが分かる。

参考までに関数 $y=f(x)$ のグラフと $x$ 軸を描画すると、次のようになる(グラフの描画方法は第1回および第4回の授業資料を参照)。

演習3

セカント法のアルゴリズムを実現するコードを書き、関数 $f(x)=x^2-2$ に対して方程式 $f(x)=0$ の近似解を求めてください。ただし、初期値 $x_{-1}=0.3$、$x_0=0.5$、微小正数 $EPS=10^{-10}$、反復回数の上限 $N=20$ とします。

セカント法のアルゴリズムは、次のようにまとめられる。



なお、以前の二分法に関する演習と同様に、関数 $f$ の値の計算回数を最小限にするように新たな変数を用意してコードを改良すると、現状の $3n$ 回を $(n+1)$ 回に抑えることができる。