Bug #10855 ยป matrix_inverse_to_integer.patch
ChangeLog | ||
---|---|---|
Mon Feb 16 03:37:45 2015 Lito Nicolai <lito.nicolai@gmail.com>
|
||
* lib/matrix.rb (inverse_from): return a matrix of integers
|
||
whenever possible
|
||
* test/matrix/test_matrix.rb (test_inverse): test for fix
|
||
Sat Feb 7 22:13:08 2015 Masaki Suketa <masaki.suketa@nifty.ne.jp>
|
||
* test/win32ole/test_win32ole_record.rb: remove test using .NET
|
lib/matrix.rb | ||
---|---|---|
@rows[k][j] = @rows[k][j].quo(akk)
|
||
end
|
||
end
|
||
self
|
||
integral_from_rational(self)
|
||
end
|
||
private :inverse_from
|
||
def integral_from_rational(src) # :nodoc:
|
||
n = Matrix.build(src.row_count) do |i , j|
|
||
elem = src[i, j]
|
||
if elem.is_a?(Rational) && elem.denominator == 1
|
||
elem.to_i
|
||
else
|
||
break
|
||
end
|
||
end
|
||
n.nil? ? src : n
|
||
end
|
||
private :integral_from_rational
|
||
#
|
||
# Matrix exponentiation.
|
||
# Equivalent to multiplying the matrix by itself N times.
|
test/matrix/test_matrix.rb | ||
---|---|---|
def test_inverse
|
||
assert_equal(Matrix.empty(0, 0), Matrix.empty.inverse)
|
||
assert_equal(Matrix[[-1, 1], [0, -1]], Matrix[[-1, -1], [0, -1]].inverse)
|
||
assert Matrix[[-1, 1], [0, -1]].eql? Matrix[[-1, -1], [0, -1]].inverse
|
||
assert Matrix[[1, 2], [3, 4]].inverse.eql?(
|
||
Matrix[[Rational(-2), Rational(1)],
|
||
[Rational(3, 2), Rational(-1, 2)]]
|
||
)
|
||
assert_raise(ExceptionForMatrix::ErrDimensionMismatch) { @m1.inverse }
|
||
assert_raise(ExceptionForMatrix::ErrNotRegular) {
|
||
Matrix[[0, 0], [0, 0]].inverse
|
||
}
|
||
end
|
||
def test_determinant
|