* 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: svn+ssh://ci.ruby-lang.org/ruby/trunk@12096 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
33163ad123
commit
de3770d158
@ -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>
|
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
|
* regparse.c, etc.: K&R to ANSI code cleanup patch from Stefan
|
||||||
|
@ -599,15 +599,21 @@ class Matrix
|
|||||||
a = src.to_a
|
a = src.to_a
|
||||||
|
|
||||||
for k in 0..size
|
for k in 0..size
|
||||||
if (akk = a[k][k]) == 0
|
i = k
|
||||||
i = k
|
akk = a[k][k].abs
|
||||||
begin
|
for j in (k+1)..size
|
||||||
Matrix.Raise ErrNotRegular if (i += 1) > size
|
v = a[j][k].abs
|
||||||
end while a[i][k] == 0
|
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]
|
a[i], a[k] = a[k], a[i]
|
||||||
@rows[i], @rows[k] = @rows[k], @rows[i]
|
@rows[i], @rows[k] = @rows[k], @rows[i]
|
||||||
akk = a[k][k]
|
|
||||||
end
|
end
|
||||||
|
akk = a[k][k]
|
||||||
|
|
||||||
for i in 0 .. size
|
for i in 0 .. size
|
||||||
next if i == k
|
next if i == k
|
||||||
|
Loading…
x
Reference in New Issue
Block a user