Go to the first, previous, next, last section, table of contents.


プログラミング 練習問題 8 解答「ニュートン法」

第一段階は導関数 f'(x)x - f(x)/f'(x) を計算することです。

(この定義は長いので、最後にまとめたものを付けておきます。 学習者はそれを M-# m で読込むことができます。 マクロ中で本体を Z ` Z ' で囲んで入力している限り、 Calc はそのキーストロークを実行せず単に学習するだけなのですが、 ここでは説明のため Calc があたかも実行したかのように図示します。)

2:  sin(cos(x)) - 0.5            3:  4.5
1:  4.5                          2:  sin(cos(x)) - 0.5
    .                            1:  -(sin(x) cos(cos(x)))
                                     .

' sin(cos(x))-0.5 RET 4.5  m r  C-x ( Z `  TAB RET a d x RET

2:  4.5
1:  x + (sin(cos(x)) - 0.5) / sin(x) cos(cos(x))
    .

    /  ' x RET TAB -   t 1

さあ、ループを入力します。 何らかの理由で収束に失敗したときのために、 繰返しループを上限 20回に制限して使います。 (普通は 20回繰返す前に、 Z / コマンドがループを止めます。)

1:  4.5         3:  4.5                     2:  4.5
    .           2:  x + (sin(cos(x)) ...    1:  5.24196456928
                1:  4.5                         .
                    .

  20 Z <          RET r 1 TAB                 s l x RET

これが x の新しい推定値です。 ここでこれを旧推定値と比較して、 収束したかどうか調べます。

3:  5.24196     2:  5.24196     1:  5.24196     1:  5.26345856348
2:  5.24196     1:  0               .               .
1:  4.5             .
    .

  RET M-TAB         a =             Z /             Z > Z ' C-x )
    (ESC TAB) 

ほんの数ステップでループはこの値まで収束します。 この結果を確かめるには、 単に元の方程式に代入します。

2:  5.26345856348
1:  0.499999999997
    .

 RET ' sin(cos($)) RET

新定義をもう一度試してみましょう。

2:  x^2 - 9           1:  3.
1:  1                     .
    .

  ' x^2-9 RET 1           X

もう一度、 これがニュートン法のフル定義です。

C-x ( Z `  TAB RET a d x RET  /  ' x RET TAB -  t 1
           20 Z <  RET r 1 TAB  s l x RET
                   RET M-TAB  a =  Z /
              Z >
      Z '
C-x )

Calc は組込みコマンドを持っていて、 式を収束するまで繰返し適用します。 その使い方は、Nesting and Fixed Points 参照 .

それからもちろん、 a R は(他にもあるが中でも)ニュートン法を使って 任意の方程式の数値解を探す組込みコマンドです。 根の探索(Root Finding) 参照 .


Go to the first, previous, next, last section, table of contents.     利用度数