diff options
author | Marc-Andre Lafortune <github@marc-andre.ca> | 2020-04-30 18:00:47 -0400 |
---|---|---|
committer | Marc-Andre Lafortune <github@marc-andre.ca> | 2020-05-01 03:25:11 -0400 |
commit | 3cb038cc7a9b1e01685a7e8a513e7ac7fb56b112 (patch) | |
tree | 879208c7c3bde20cd860eef55a9780f1a1b854e1 | |
parent | 7d360efe92d2db11a4e51820ed2f52de36b3257f (diff) | |
download | ruby-3cb038cc7a9b1e01685a7e8a513e7ac7fb56b112.tar.gz |
[ruby/matrix] Fix Matrix#orthogonal?
-rw-r--r-- | lib/matrix.rb | 7 | ||||
-rw-r--r-- | test/matrix/test_matrix.rb | 7 |
2 files changed, 11 insertions, 3 deletions
diff --git a/lib/matrix.rb b/lib/matrix.rb index 9d6650370d..7d35b61fc5 100644 --- a/lib/matrix.rb +++ b/lib/matrix.rb @@ -890,11 +890,12 @@ class Matrix # def orthogonal? raise ErrDimensionMismatch unless square? - rows.each_with_index do |row, i| - column_count.times do |j| + + rows.each_with_index do |row_i, i| + rows.each_with_index do |row_j, j| s = 0 row_count.times do |k| - s += row[k] * rows[k][j] + s += row_i[k] * row_j[k] end return false unless s == (i == j ? 1 : 0) end diff --git a/test/matrix/test_matrix.rb b/test/matrix/test_matrix.rb index 9206678261..f963b2d06a 100644 --- a/test/matrix/test_matrix.rb +++ b/test/matrix/test_matrix.rb @@ -800,4 +800,11 @@ class TestMatrix < Test::Unit::TestCase assert_equal false, @a3.unitary? assert_raise(Matrix::ErrDimensionMismatch) { @m1.unitary? } end + + def test_orthogonal + assert_equal true, @rot.orthogonal? + assert_equal false, ((0+1i) * @rot).orthogonal? + assert_equal false, @a3.orthogonal? + assert_raise(Matrix::ErrDimensionMismatch) { @m1.orthogonal? } + end end |