11/18 数値計算(2)


前回の感想,質問より

Q.
12/25の試験が本郷の試験と重なっているがなんとかならないか?
A.
2年生の受講科目に関しては,教養学部側から進学先の各学部に試験日程が重ならないように連絡してあります.本郷の試験に関する情報を提供してもらったら,教養学部から確認が可能のようです.
Q.
simpson.rb の 穴埋めは正しくできたつもりだが,
ruby check.rb ex06.rb
を実行すると関数fが定義されていないというエラーが出てチェックが通らなかった.
A.
チェックプログラムは,simpson.rb をloadするだけで他のファイルをloadしなくても, 関数simpsonが動くことを想定して書かれています.第6章の練習,投票のサンプルプログラムでは,
load("./trapezoid.rb")
def f(x)
  x/((x+1.0)*(x+2.0))
end
としているので,simpson.rb にこの行を加えればチェックが通ります.
Q.
質問です。 simpsonのプログラムで、n=100の時、
sum = sum + 2*f(xs+2*i*deltax)+4*f(xs+(2*i+1)*deltax)
とした場合は、0.11778303563894311
sum = sum + (2*f(xs+2*i*deltax)+4*f(xs+(2*i+1)*deltax))
とした場合は、0.11778303563894317 となり、値がわずかに違うのですが、なぜでしょうか? nを様々な値にして試してみましたが、常にわずかに後者の方が大きい値をとりました。
A.
前者は,
sum = (sum + 2*f(xs+2*i*deltax))+4*f(xs+(2*i+1)*deltax)
のように解釈されます.第6章の今日の講義などで出ますが,実数計算で大きな数と小さな数の加減算をおこなうと誤差が発生するので,それが影響している可能性が高いですね.

前回の課題について


投票システム

vote.rbをダウンロードして,ホームディレクトリに保存してください.ドックからターミナルを起動して,
ruby vote.rb 選択肢番号
のように使います.

今日の練習,投票


今日の課題