[#30426] CGI でグラフを描くときにお勧めのライブラリは? — 堀川 久 <vzw00011@...>

こんにちは。

12 messages 2001/07/01

[#30453] syntax check without execution? — Tanaka Akira <akr@...17n.org>

最近、eRuby のまねごとをしていて、そのなかで Ruby のコードを生成してい

16 messages 2001/07/04
[#30455] Re: syntax check without execution? — matz@... (Yukihiro Matsumoto) 2001/07/04

まつもと ゆきひろです

[#30479] Object#dup — "Shin'ya Adzumi" <adzumi@...>

あづみです。

20 messages 2001/07/05

[#30512] open errno EALREADY triggerd — "Inoue" <inoue@...>

井上です。

16 messages 2001/07/08

[#30514] Ruby module frame work? — Takahiro Kambe <taca@...>

こんにちは。

16 messages 2001/07/09
[#30515] Re: Ruby module frame work? — matz@... (Yukihiro Matsumoto) 2001/07/09

まつもと ゆきひろです

[#30529] InterBase を使用したい — "YOUJI KUROKAWA" <CQE10242@...>

環境

22 messages 2001/07/09

[#30530] Question about script on the book "Ruby nyuumon" — NAWATE Masahiko <agul@...>

縄手@松江と言います。

17 messages 2001/07/09
[#30531] Re: Question about script on the book "Ruby nyuumon" — rubikitch <rubikitch@...> 2001/07/09

From: NAWATE Masahiko <agul@mag.shimane-u.ac.jp>

[#30533] Re: Question about script on the book "Ruby nyuumon" — NAWATE Masahiko <agul@...> 2001/07/09

縄手@松江です。

[#30734] UML クラス図と Ruby の記述についての対応 — Ken-ichi HASHIMOTO <ken@...>

橋本@福井県在住です。

13 messages 2001/07/28

[#30764] int/int => float? — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです

50 messages 2001/07/31
[#30767] Re: int/int => float? — keiju@... (石塚圭樹) 2001/07/31

けいじゅ@日本ラショナルソフトウェアです.

[#30768] Re: int/int => float? — matz@... (Yukihiro Matsumoto) 2001/07/31

まつもと ゆきひろです

[#30770] Re: int/int => float? — Take_tk <ggb03124@...> 2001/07/31

たけ(tk)です。

[#30771] Re: int/int => float? — matz@... (Yukihiro Matsumoto) 2001/07/31

まつもと ゆきひろです

[#30785] Re: int/int => float? — Konishi@... (Hiromasa KONISHI) 2001/07/31

 KONISHI Hiromasaです。

[ruby-list:30703] division problem in matrix.rb

From: IKEGAMI Daisuke <daisu-ik@...>
Date: 2001-07-23 10:16:40 UTC
List: ruby-list #30703
いけがみです。

ruby 1.6.4 に標準でついてくる matrix.rb について、
いくつかのメソッド(後述)で、
割り算による副作用のせいで、計算の誤り(に見える)が存在します。

副作用の例 (ruby 1.6.4 , matrix.rb Revision 1.11):

  require 'matrix'
  p (Matrix[[2, 3], [3, 4]].determinant) #=> 2 (本来のdeterminantは-1)
  p (Matrix[[2, 3], [3, 4]].inverse)     #=> Matrix[[1, -1], [-1, 1]]
  # 本来の inverse は Matrix[[-4, 3], [3, -2]]

原因:
  a, b が Integer のとき b/a が商しか返さないので
  本来 matrix.rb がやろうとしている計算と食い違う、
  特に a > b のとき b/a = 0 になることにより、それ以降の計算が間違い。

これは、該当する割り算をすべて
  a.to_f / b.to_f に書き直す
ことで解決できると思います。もうひとつの解決法は Rational を用いることです。
どちらがいいですか? もしくは別の解決法がありますか?

強制的に小数に直したり、分数に直したりするのは、議論が必要だと思います。
Rational については別のメールで話題になっているところですし。
Rational について : [ruby-list:30698] Re: overwride method

一方、小数にすると、こんどは精度の問題がでてきます。
また 分母 b が 0 に近いと a.to_f / b.to_f が超巨大な数になります。
が、matrix.rb ではその配慮はいまのところしてません。
(今のアルゴリズムを別のアルゴリズムにとりかえることにより
 巨大な数になる問題は回避できます)

割り算による(好ましくない)副作用を持つメソッド
 -- /
 -- inverse_from
 -- inverse
 -- **
 -- determinant
 -- rank

僕は、「小数にする + 割り算を用いているルーチンを"LU 分解アルゴリズム"
と呼ばれるアルゴリズムでおきかえる」という解決策がいいと考えます。
--
池上 大介
Daisuke IKEGAMI <daisu-ik@is.aist-nara.ac.jp>
奈良先端科学技術大学院大学 情報科学研究科
情報処理学専攻 情報基礎学講座 関研究室

In This Thread

Prev Next