1999 年度「計算機基礎論3B」 1999-12-03

ウィルス、およびウィルスに関するデマ情報について

みなさんにメールを送ってウィルスに関するデマ情報に注意を呼びかけましたが、 その後、 Network Associates Inc. (http://www.nai.com) のウイルス情報のページ (http://www.nai.com/japan/VirusInfo/vinfo.asp) の存在を教えてもらいました。 特に、ウイルスデマへの対処方法 (http://www.nai.com/japan/virusinfo/vlibrary.asp?a=HOAXTAISHO) には私が気がつかなかったことも書いてあります。 ただし、 《「このメールを開いただけでウイルスに感染する」 といった内容には惑わされないでください》 とありますが、 HTML 対応のメールツール(この WS のはそうではないはずです) の場合、 開いただけでよくないことが起こることもあるそうです。

※ 上で Network Associates Inc. のページにリンクが張ってないのは “リンクを張る場合はご一報ください”とあったから。 法律上は連絡を強要できないらしいが、 無視するのもなんだしメール書くのもめんどくさいし。

課題2:Newton 法で三乗根を求めるCプログラムを書き、メールでレポートする

f が微分可能関数のとき、 方程式 f(x) = 0 の根を計算機で近似的に求める方法のひとつに 「Newton 法」があります。

※ 以下で 「a_n」は a の右下に小さな n のついた、数列の n 項めの記号、 「a_{n+1}」は n+1 項めの記号。 これらは TeX から借りてきたものだが、 コンピュータで添え字が使えない場合にもはや標準的と言っていいほどよく使われる。 TeX については年が明けたら実習する予定。

曲線 y = f(x) 上の点 (a_n, f(a_n)) におけるこの曲線の接線が x 軸に平行でないと仮定し、 その接線が x 軸と交わる点の x 座標を a_{n+1} とします。 f(x) = 0 の根αに近い数 a_1 から始めて上のようにして数列 a_1, a_2, ..., a_n, ... をつくると、 数列 {a_n} はαに収束します。 この原理で根αを求めるのが Newton 法です。 どのくらい a_1 が根αに「近い」と収束するのか、 の厳密な議論はちょっとおいておいて、 (紙に)グラフを書いてこの感じをつかんでください。

そこで課題です。 「あなたのログイン名の最後の二ケタに 26 を加えた数を a とするとき、 Newton 法で a の三乗根、 すなわち 「x^3 - a = 0」の根を求めるCプログラムを書いてください」。 以下でくわしく説明します。

※ 「x^3」は x の三乗。これも TeX の記号。 Cでは別の意味になる。

※ 諸君のログイン名の下二ケタは 02 から 37 なので、 a は 28 から 63 となる。 よって 3^3 < a < 4^3 となり、 a が立方数になる人はいないのだ。

まず、初期値 a_1 は、 プログラムが動き出してからユーザに入力を求めるようにしてください。 そうすることで、 どのように初期値を選んだらどのくらいの速さで収束するか実験することができます。 プログラムは a_1, a_2, ... を出力するようにしてください。 何項まで出すかは、実験しながら各自決めてください。 小数点以下何ケタ出力するかも、各自の判断にまかせます。 そして、最後の項 a_n を三乗したものも出力するようにしてください。 そうすることで、 結果が正しいかどうか確かめることができます。

できあがったら、次のような体裁でレポートにし、メールで送ってください。

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

宛て先は私(岩瀬)の実習用アカウント cf7175 です。 実習用 WS からは To: のところに cf7175 と書くだけで届きます。 Subject は「kadai 2」 (すべて小文字、スペースにも注意!)にしてください。 自分の学籍番号、氏名(フルネーム)も忘れずに。 私はメールを受けとったら数日以内にプログラムを読み、 コンパイルし、 貼り付けてあった実行結果のとおり動くことをチェックして、 「OK」なり「やり直し!」なりの返事をメールで送ります。 「やり直し!」だった人は「OK」 がもらえるまでやり直して再提出しないと課題をこなしたことになりません。

締め切りは 1999 年 12 月 24 日(金)16 時 30 分とします。 これは、 その日時までに私にメールを送るように、 という意味です。 締め切り間際にメールを送ってくれた場合は私からの返事は締め切り後になるかもしれません。

※ それで「やり直し!」だとまずいので、できれば早めに提出するように!

※ 今回のプログラムは ~iwase/prog をさがしても見つかりません。:-)

この課題の提出期限は「ほぼ今年いっぱい」ということになりますが、 今年中にはもう課題がでない、といっているわけではありません。 また、今年中はもう課題をださない場合でも、 何かC言語に関する話題を提供しますので、 早くできてしまった人も 10 日(金)、17 日(金)はいままでどおり出席してください。

※ Newton 法で x^3 - x = 0 の根を求めようとすると、 初期値 a_1 によっていろいろな根に収束するそうだ。 収束しない場合もあるらしい。 プログラムを書いて実験したうえで理論的にも考えてみるとおもしろいかもしれない。


岩瀬順一 <iwase@kappa.s.kanazawa-u.ac.jp>