Ruby 2.6 adds Matrix#antisymmetric?

Ruby 2.6.0-preview2 was recently released.

A matrix according to Wikipedia is a rectangular array of numbers. Matrix class in ruby represents a mathematical matrix.

>> x = Matrix[[1, 2], [3, 4]]
=> Matrix[[1, 2], [3, 4]]

Ruby 2.5.0

Let’s say we want to find out if a matrix is a skew-symmetric (or antisymmetric) matrix.

>> matrix1 = Matrix[[0, 1], [-1, 0]]
=> Matrix[[0, 1], [-1, 0]]
>> matrix1 == -matrix1.transpose
=> true

=> matrix2 = Matrix[[0, 2, -1], [-2, 0, -4], [1, 4, 0]]
>> matrix2 == -matrix2.transpose
=> true

Ruby 2.6.0

In Ruby 2.6, we can use Matrix#antisymmetric? method to check if the matrix is skew-symmetric (or antisymmetric or antimetric) matrix. It returns true for skew-symmetric matrix.

>> matrix1 = Matrix[[0, 1], [-1, 0]]
=> Matrix[[0, 1], [-1, 0]]
>> y.antisymmetric?
=> true

>> matrix2 = Matrix[[0, 2, -1], [-2, 0, -4], [1, 4, 0]]
=> Matrix[[0, 2, -1], [-2, 0, -4], [1, 4, 0]]
>> matrix2.antisymmetric?
=> true

Matrix#antisymmetric? returns true for a 0x0 empty matrix.

>> Matrix.empty
=> Matrix.empty(0, 0)
>> Matrix.empty.antisymmetric?
=> true

It returns false for a non-antisymmetric matrix.

>> x = Matrix[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
=> Matrix[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
>> x.antisymmetric?
=> false

It raises a Matrix::ErrDimensionMismatch error for rectangular matrix i.e. a matrix for which horizontal and vertical dimensions are not the same.

>> x = Matrix[[1, 2, 3], [4, 5, 6]]
=> Matrix[[1, 2, 3], [4, 5, 6]]
>> x.antisymmetric?
Traceback (most recent call last):
        3: from /home/atul/.rvm/rubies/ruby-2.6.0-preview2/bin/irb:11:in `<main>'
        2: from (irb):24
        1: from /home/atul/.rvm/rubies/ruby-2.6.0-preview2/lib/ruby/2.6.0/matrix.rb:809:in `antisymmetric?'
ExceptionForMatrix::ErrDimensionMismatch (Matrix dimension mismatch)

Here is the relevant commit and discussion for the change.

Comments

comments powered by Disqus