diff options
| author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2007-03-19 05:39:07 +0000 |
|---|---|---|
| committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2007-03-19 05:39:07 +0000 |
| commit | a4ce5481823f320482c3558e6d2b7fb3d2280809 (patch) | |
| tree | 956c5071e8a980dd8478e9b5ee38db8c5083ab34 | |
| parent | e9ef9e807a07a32027cede2ff9c63758a651032c (diff) | |
| download | ruby-a4ce5481823f320482c3558e6d2b7fb3d2280809.tar.gz ruby-a4ce5481823f320482c3558e6d2b7fb3d2280809.tar.xz ruby-a4ce5481823f320482c3558e6d2b7fb3d2280809.zip | |
* lib/matrix.rb (Matrix::inverse_from): adding partial pivoting to
the Gauss-Jordan algorithm, making it stable. a patch from
Peter Vanbroekhoven. [ruby-core:10641]
git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@12096 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
| -rw-r--r-- | ChangeLog | 6 | ||||
| -rw-r--r-- | lib/matrix.rb | 18 |
2 files changed, 18 insertions, 6 deletions
@@ -1,3 +1,9 @@ +Mon Mar 19 14:12:25 2007 Yukihiro Matsumoto <matz@ruby-lang.org> + + * lib/matrix.rb (Matrix::inverse_from): adding partial pivoting to + the Gauss-Jordan algorithm, making it stable. a patch from + Peter Vanbroekhoven. [ruby-core:10641] + Mon Mar 19 12:13:36 2007 Yukihiro Matsumoto <matz@ruby-lang.org> * regparse.c, etc.: K&R to ANSI code cleanup patch from Stefan diff --git a/lib/matrix.rb b/lib/matrix.rb index 8142a5231..d49e16b8f 100644 --- a/lib/matrix.rb +++ b/lib/matrix.rb @@ -599,15 +599,21 @@ class Matrix a = src.to_a for k in 0..size - if (akk = a[k][k]) == 0 - i = k - begin - Matrix.Raise ErrNotRegular if (i += 1) > size - end while a[i][k] == 0 + i = k + akk = a[k][k].abs + for j in (k+1)..size + v = a[j][k].abs + if v > akk + i = j + akk = v + end + end + Matrix.Raise ErrNotRegular if akk == 0 + if i != k a[i], a[k] = a[k], a[i] @rows[i], @rows[k] = @rows[k], @rows[i] - akk = a[k][k] end + akk = a[k][k] for i in 0 .. size next if i == k |
