Ruby は最新のオブジェクト指向プログラミング言語のひとつです。整数の型が FIXNUM から BIGNUM へと,扱っている数の大きさによってシームレスに変わるため,1000桁ぐらいの整数も楽々計算できます。またmathn という数学ライブラリーを持っていて,有理数と複素数を扱うことが可能です。 さらに,それに加えて,irb という対話的なツールがあって,コマンドラインから1行ずつ実行してみては結果を見ていくことができます。つまりプログラムを書かなくても簡単な計算が実行できるというわけです。電卓代わりですね。

irb を使うにはコマンドラインから単に irb と打ち込むだけです。すると下のようにプロンプトが表示されるので,キーボードから入力していきます。

irb
irb(main):001:0>

これでいろいろな計算ができます。ここでは数学ライブラリーを扱うので, require 'mathn' と入力します。

irb(main):001:0> require 'mathn'
=> true

これで 2/3 のような既約分数がそのまま扱えるようになり,既約でないものは自動的に約分が行われます。

それでは連分数を試してみましょう。次の式は 8/3 の連分数展開です。

1+1/(1+1/(1+1/(1+1/(1+1/(1)))))

これを延々と繰り返していくと,sqrt(2) に漸近します。でも打ち込むのは面倒ですね。

上の式をよく見ると入れ子になっていますから,再帰的な構造で表現できるはずです。つまり 1 + 1 / (1 + x) の x に,それ自身を代入していけばよさそう。

x = 1
100.times{x = 1 + 1/(1+x)}

これで100段の連分数が一気に計算できます。もっとも,このままでは巨大な分数式が表示されるだけで何がなんだか分からないので,浮動小数点数で表示させてみましょう。

x.to_f

これで 1.41421356...という値が得られるはずです。(小波)


連分数によるπの表現ですか.. πについては色々と読みましたが,授業に扱った教材として面白いものを見てきました. ラマヌジャンがどのようにしてあんな発想が浮かんだのか.....


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS