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...という値が得られるはずです。(小波)

ちょっと追加。次の形なら黄金比が得られます

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

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


久しぶりのWikiネタですね。しかもrubyで計算。いやあ懐かしい・・・。暫く触ってませんでした。新しい職場のお隣が情報も教える方なので,rubyは如何?と訊いたら,知ってはいるけど・・・って言う返事。グラフィックはともかくお手頃だと思うのですが・・・。パイの連分数表示は,一昔二昔前の本ですがエリマオールという人の数の歴史とか言う本でたくさん見れます。一昔前なら最近新訂された?解析教程上下が面白いかも。

早速試してみました。Macだと標準装備?なので,ターミナルを開けてirbと打ち込むだけで動きます。調子に乗って10000.times...としたら,戻ってきません。トホホ。

irb(main):011:0> x=1
=> 1
irb(main):012:0> 1000.times{x=1+1/(1+x)}
=> 1000
irb(main):013:0> x.to_f
/usr/lib/ruby/1.8/rational.rb:240: warning: Bignum out of Float range
/usr/lib/ruby/1.8/rational.rb:240: warning: Bignum out of Float range
=> NaN

でした。そりゃそうか。


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2009-03-02 (月) 23:25:43 (5533d)