けいじゅ@日本ラショナルソフトウェアです. In [ruby-list :17059 ] the message: "[ruby-list:17059] ", on Sep/23 23:51(JST) "Nishikawa,Yasuhiro" writes: >にゃす といいます。初めまして。 ども. >突然でなんなのですが、 >ruby-1.4.2付属のmatrix.rbのrankメソッドで問題を見つけましたのでご報告します。 >以下のテスト用スクリプトで、零行列以外ランクが3になってます。 >================= >require 'matrix' > >def printfa m > print m.to_s,"\n" > print m.rank,"\n" >end >printfa Matrix[ [0,0,0],[0,0,0],[0,0,0] ] #rank 0 >printfa Matrix[ [1,2,3],[2,4,6],[3,6,9] ] #rank 1 >printfa Matrix[ [1,2,3],[2,4,6],[1,1,1] ] #rank 2 >printfa Matrix[ [1,2,3],[2,3,4],[3,9,27] ] #rank 3 > >================== > >matrix.rbに対するパッチは >622c622 >< i = -1 >--- >> i = k > >です。 おお. 気が付かなかった(^^;;; でも, さらにバグを見つけてしまいました (^^;;;; >#数値モノはやっかいですね... ですね... 特異(境界)点回りのテストが難しい... >なぜ見つけたかというと、これを参考に別プログラム作ってて動かなかった >からなのでした。(ライブラリの中もなにかと使わせていただいてます) どもどもです. 以下にパッチを流します. 松本さん更新お願いしますね. -- ここから diff -u -r1.9 matrix.rb --- matrix.rb 1999/08/24 10:25:00 1.9 +++ matrix.rb 1999/10/06 11:02:08 @@ -2,8 +2,8 @@ # # matrix.rb - # $Release Version: 1.0$ -# $Revision: 1.9 $ -# $Date: 1999/08/24 10:25:00 $ +# $Revision: 1.11 $ +# $Date: 1999/10/06 11:01:53 $ # Original Version from Smalltalk-80 version # on July 23, 1985 at 8:37:17 am # by Keiju ISHITSUKA @@ -186,7 +186,7 @@ end class Matrix - @RCS_ID='-$Id: matrix.rb,v 1.9 1999/08/24 10:25:00 keiju Exp $-' + @RCS_ID='-$Id: matrix.rb,v 1.11 1999/10/06 11:01:53 keiju Exp keiju $-' # extend Exception2MessageMapper include ExceptionForMatrix @@ -621,17 +621,36 @@ k = 0 begin if (akk = a[k][k]) == 0 - i = -1 - nothing = FALSE + i = k + exists = true begin if (i += 1) > column_size - 1 - nothing = TRUE + exists = false break end end while a[i][k] == 0 - next if nothing - a[i], a[k] = a[k], a[i] - akk = a[k][k] + if exists + a[i], a[k] = a[k], a[i] + akk = a[k][k] + else + i = k + exists = true + begin + if (i += 1) > row_size - 1 + exists = false + break + end + end while a[k][i] == 0 + if exists + k.upto(column_size - 1) do + |j| + a[j][k], a[j][i] = a[j][i], a[j][k] + end + akk = a[k][k] + else + next + end + end end (k + 1).upto(row_size - 1) do |i| __ ..............................石塚 圭樹@日本ラショナルソフトウェア... ----------------------------------->> e-mail: keiju / rational.com <<---