非線形方程式の反復解法

非線形方程式 f(x) = 0 の解を各種の反復法によって効率的に求めよう.


基礎知識

基本的な反復解法の概要は次の通り.

なお,単調増加/単調減少とは次のような性質である.

また,f'(x) = df(x)/dx である.


実験

平方根 √A の計算の基本プログラム sqrt.c(DL)について, 以下の作業に取り組め.

  1. まずは,sqrt.c のコードおよびコメントを熟読せよ.
  2. ソースファイルに記述されている「実験(1) ニュートン法」を実行し, 解析結果が正しいことを確認せよ. また,ニュートン法と二分法の反復回数を比較せよ. さらに,関数f(x) の定義を単調増加 → 単調減少へ変更し, 二分法が失敗することを確認せよ.

  3. ニュートン法の動作イメージ

    二分法の動作イメージ
  4. 「実験(2) 反復写像の不適切な使用例」を実行し, 解析に失敗する(収束しない)ことを確認せよ. そして,その原因を考察せよ. Hint:Lipschitz 条件の成立する範囲は?
  5. 「実験(3) 反復写像の適切な使用例」を実行し, 解析に成功することを確認せよ. そして,その原因を考察せよ. Hint:同上

  6. 不適切な反復写像の動作イメージ

    適切な反復写像(縮小写像)の動作イメージ

課題

基本プログラムを元にして, ニュートン法および二分法による 立方根3√A の計算プログラム cbrt.c を作成せよ.

結果が正しいかどうかは,3乗してAと比較すれば確認できる.

ただし,二分法については, 関数f(x) が単調増加/単調減少のどちらの場合であっても 適切に動作するように実装せよ. (基本プログラムでは単調増加の場合だけしか対応していない.) この場合,f(x) がどちらの性質をもつのか? 自動判別する機能も追加する必要がある.

Hint: 初期値(下限値と上限値)を入れ替えると簡単. 例えば,f(x0)>0 なら x0 を上限値, x1 を下限値にする. x1>x0(下限値>上限値)だとしても気にしないでよい.

Why?:単調増加から単調減少への変更は, 厳密にはY軸の反転(グラフの上下反転)ではあるのだが, 右上がりか?左上がりか?という大まかな性質にだけ注目すると, X軸の反転(グラフの左右反転)でもあるので, x の上限値と下限値を交換しても構わない.

なお,不要なコードについてはすべて取り除いておくこと. コメント文や表示内容についても適切に変更しておくこと.

レポート提出

(c) 2017, yanagawa@kushiro-ct.ac.jp