12/7 数値計算(2)


補足


前回の感想,質問より

Q.
最初"2*i"と書くべきところを、2iと書いていて、プログラムを実行してみたら
simpson(0,1,1000)
=> (0.039428039133911824+0.0003325003552482901i)
というようになった。 しかし、for文のiをjに変え、2jのようにかくと、エラーになった。 これらのことから、プログラムで2iのようにかくとiは虚数として扱われるとして理解して良いのでしょうか?
A.
はい。それで正しいです。教科書の範囲は外れていますが、2iのような表記は虚数を表すのに使われています
Q.
irb(main):026:0> (PI/4 - montecarlo(100000)).abs()
=> 4.183660255174804e-05
のような値が出たことがあるのだが、これはどういう意味だろうか。
A.
4.183660255174804e-05
というのは、
4.183660255174804 * (10 ** -5)
を意味しています。この表記法は「科学的表記法」と呼ばれて多くのプログラミング言語で用いられています.「e」は指数部(exponent)の頭文字からきていて,大文字の「E」も用いられます.
Q.
初めてシンプソン法というものを使った。 シンプソンズという海外のアニメは知っていたが、シンプソンは知らなかった。 驚きの事実である。シンプソン法とシンプソンズには何らかの関係があるのではないだろうか。これは僕の仮定なのだが、もし関係があればあのアニメの中に積分する話が出てくるだろう。
A.
シンプソン(Simpson)は姓ですね. シンプソンズはシンプソンという姓を持つ一家の話であり, シンプソン法は公式を広めた(発見者は別という話),18世紀のイギリスの数学者トーマス・シンプソンにちなんでいるので,語源的には関係あります.
Q.
今更聞くのも恥ずかしい質問なのですが、for文の中でiという文字は初めて登場しているように思えます。これは前もってi=1などと定義しておかなくても大丈夫なのですね…。今までにもあったのかもしれませんが気付きませんでした。
A. (TA森永さん)
rubyでは大丈夫ですね。 c言語で
for (i = 0; i < 10; i++){
    ...
}
と書くように、初期化文、条件文、再初期化文を書かないといけない言語もありますが、rubyやpythonなどの言語はこのように構文が簡単化されています。 for i in ... という構文は...のそれぞれの要素を順にiに割り当ててループを実行していくという意味なので、 for i in 0..10 のようなrangeによる指定以外にもfor i in ["a","b","c"] のような形で配列を使って書くことでできます。
Q.
教科書を読んで、このプログラムで用いられているrand()はどのように生成されたどのような種類に当てはまる乱数なのだろうかとふと思った。
A.
メルセンヌ・ツイスタという松本眞(現 広島大)さんらが提案した乱数を使っているようです.メルセンヌ・ツイスタは性質も良く(暗号への使用は向いていませんが),生成速度も速いので広く使われていますね.
Q.
ところでスライド13pのソースコード内に4みたいな整数がある一方で最終行は3.0みたいな小数の形で書いていますが特別な意味があれば教えていただけると幸いです。
A.
一般には,
irb(main):002:0> x = 4
=> 4
irb(main):003:0> x / 3.0
=> 1.3333333333333333
irb(main):004:0> x / 3
=> 1
のように,被除数が整数の時は3.0で割るのと3で割るのを区別することに 意味があります.ただし,このプログラムでは,
  deltax=(xe-xs)*0.5/n
を実行しているため,deltaxは実数データで表現されると見なされ,deltax * sum も実数データと見なされています.したがって,3.0の代わりに3と書いても結果は同じになります.それでも 3.0 と書いているのは「ここでの除算は余りのない除算でおこなう」ことを明示的に表すためだと思います.

前回の課題について


今日の練習,投票

講義資料


講義フォルダの作成


配付プログラムのダウンロード


投票システム

vote.rbをダウンロードして(「リンク先のファイルを別名で保存」で,ホームフォルダの下のalgo16を選択(なければ作る).".txt"を「追加しない」を選ぶ),ホームディレクトリに保存します.ドックからターミナルを起動して,
cd algo16
を済ませてから,
ruby vote.rb 選択肢番号
のように使います.

irbを使いながら(一旦終了せずに),投票システムも使うには,ターミナルのメニューバーの「シェル」->「新規タブ」を選ぶか,[Command]+[T]で別のタブを開いて(あるいは[Command]+[N]で別のウィンドウを開いて),投票システムを使うことをお勧めします.このあたりのことは,「はいぱーワークブック」15.4 ターミナルの便利な使い方に書いてあるので参考にしてください.


テキストの補足


今日の課題



自宅で自習をする人のために

アルゴリズム入門共通資料の中に講義で使うRuby言語の処理系のインストール法があります.