2006 年度「計算機基礎論3B」 2006-12-01

§27 Newton 法

(27.1) y = f(x) が微分可能関数のとき、 方程式 f(x) = 0 の根をコンピュータで近似的に求める方法のひとつに 「Newton 法」がある。

(27.2) 曲線 y = f(x) 上の点 (an, f(an)) におけるこの曲線の接線が x 軸に平行でないと仮定し、 その接線が x 軸と交わる点の x 座標を an+1 とする。 f(x) = 0 の一つの根 α に近い数 a0 から始めて上のようにして数列 a0, a1, a2, ..., an, ... をつくると、数列 {an} は α に収束する。 この原理で根 α を求めるのが Newton 法である。 (紙に)グラフを書いてこの感じをつかめ。

(27.3) きちんと考えるには、 a0 が根 α にどのくらい近いと α に収束するのかなどの議論が必要であるが、 ここでは深入りしない。

§28 課題1

(28.1) 君のユーザ id の下二ケタ n に対し、a = 1 + 0.02n, b = 0.01n と置く。 三次方程式 f(x) = x³ - ax + b = 0 を考えたい。 (たとえばユーザ id の下二ケタが 29 の人の場合、 x³ - 1.58x + 0.29 = 0 を考えることになる。)

(28.2) この方程式の解を、以下のようにしてコンピュータで求め、レポートせよ。

(28.3) その1. x を適当に動かして、それぞれの x について f(x) の値を出力させるプログラムを書け。 x の範囲や(どれだけずつ増やすかの)刻みは、 実験をくり返しつつ、三つの実数解の近似値がある程度わかるように決めよ。 (わかった近似値はどこかにメモしておけ。)

(28.4) その2. この三次方程式の三つの実数解のうち最大のものを、 上の節で述べた Newton 法で求めるプログラムを書け。

最後のほうの f(an) は 0 に近い値のはずである。

(28.5) できあがったら、次のような体裁でレポートにし、メールで送れ。

求められているプログラムは二つだから、貼り付けるべきものは 「第一のプログラム」「第一のプログラムの出力結果」 「第二のプログラム」「第二のプログラムの出力結果」の四つである。

(28.6) ※ メールでは x3 や an のような記法は使えないので、 代わりに x^3, a_n などと書くとよい。 an+1 は中カッコを用いて a_{n+1} とする。

(28.7) ※ 感想などがあれば添えてもよいが、 無理に書かなくてよろしい。

(28.8) 宛て先は私(岩瀬)の実習用アカウント cf2956@mailedu1.ipc.kanazawa-u.ac.jp である。 件名は「kadai1」(←全て半角文字、アルファベットは小文字、 途中にスペースをいれない)とせよ。 自分の学籍番号、氏名(として大学に届けてあるもの) をメールの本文内に書くのを忘れずに。

(28.9) 私はメールを受けとったらプログラムを読み、コンパイルし、 動作をチェックして、 「OK」なり「やり直し!」なりの返事をメールで送る。 「やり直し!」だった人は「OK」 がもらえるまでやり直して再提出しないと課題を提出したことにならない。

(28.10) 返事が送られてきたことをすぐに知りたい人は、(23.27) に書いたようにしてメールを携帯電話などのメールアドレスにも転送するよう設定しておくとよいだろう。 携帯によっては受け取れる文字数に制限があることは私も知っているので、 「OK」「やり直し!」はなるべくメールの初めのほうに書くつもりである。

(28.11) 締め切りは 2006 年 12 月 22 日(金)10 時 30 分。 きょうの実習時間はこれにあてる。 来週以降は新しい内容を用意してくるので、 そちらの練習問題に取り組んでもよいし、この課題をやってもよい。

(28.12) ※ 締め切りまでに時間があるからといって、 時間をかけて取り組むことを求めているわけではない。

(28.13) ※ タブは emacs では 4 カラムごとに、 Active! mail のメール作成画面では 8 カラムごとに展開されるので、 たとえば

    for (i = 0; i < 10; i++) {
        ....
    }
を貼りつけると
        for (i = 0; i < 10; i++) {
                ....
        }
のように変わる。しかし、気にしないこと。

(28.14) ※ レポートの場合には、メールの最初の「呼びかけ」は書かないのが普通である。


岩瀬順一