[前][次][番号順一覧][スレッド一覧]

ruby-changes:49659

From: stomar <ko1@a...>
Date: Fri, 12 Jan 2018 04:36:39 +0900 (JST)
Subject: [ruby-changes:49659] stomar:r61775 (trunk): matrix.rb: add Matrix#antisymmetric?

stomar	2018-01-12 04:36:30 +0900 (Fri, 12 Jan 2018)

  New Revision: 61775

  https://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=revision&revision=61775

  Log:
    matrix.rb: add Matrix#antisymmetric?
    
    * lib/matrix.rb: add Matrix#antisymmetric?.
      Proposed by Yilo (@yiloo). Patch by Marcus Stollsteimer (@stomar).
      [Fix GH-1788]
    * spec/ruby/library/matrix/antisymmetric_spec.rb: add specs.

  Added files:
    trunk/spec/ruby/library/matrix/antisymmetric_spec.rb
  Modified files:
    trunk/lib/matrix.rb
Index: spec/ruby/library/matrix/antisymmetric_spec.rb
===================================================================
--- spec/ruby/library/matrix/antisymmetric_spec.rb	(nonexistent)
+++ spec/ruby/library/matrix/antisymmetric_spec.rb	(revision 61775)
@@ -0,0 +1,35 @@ https://github.com/ruby/ruby/blob/trunk/spec/ruby/library/matrix/antisymmetric_spec.rb#L1
+require File.expand_path('../../../spec_helper', __FILE__)
+require 'matrix'
+
+describe "Matrix#antisymmetric?" do
+  it "returns true for an antisymmetric Matrix" do
+    Matrix[[0, -2, Complex(1, 3)], [2, 0, 5], [-Complex(1, 3), -5, 0]].antisymmetric?.should be_true
+  end
+
+  it "returns true for a 0x0 empty matrix" do
+    Matrix.empty.antisymmetric?.should be_true
+  end
+
+  it "returns false for non-antisymmetric matrices" do
+    [
+      Matrix[[1, 2, 3], [4, 5, 6], [7, 8, 9]],
+      Matrix[[1, -2, 3], [2, 0, 6], [-3, -6, 0]],  # wrong diagonal element
+      Matrix[[0, 2, -3], [2, 0, 6], [-3, 6, 0]]    # only signs wrong
+    ].each do |matrix|
+      matrix.antisymmetric?.should be_false
+    end
+  end
+
+  it "raises an error for rectangular matrices" do
+    [
+      Matrix[[0], [0]],
+      Matrix[[0, 0]],
+      Matrix.empty(0, 2),
+      Matrix.empty(2, 0),
+    ].each do |rectangular_matrix|
+      lambda {
+        rectangular_matrix.antisymmetric?
+      }.should raise_error(Matrix::ErrDimensionMismatch)
+    end
+  end
+end
Index: lib/matrix.rb
===================================================================
--- lib/matrix.rb	(revision 61774)
+++ lib/matrix.rb	(revision 61775)
@@ -802,6 +802,18 @@ class Matrix https://github.com/ruby/ruby/blob/trunk/lib/matrix.rb#L802
   end
 
   #
+  # Returns +true+ if this is an antisymmetric matrix.
+  # Raises an error if matrix is not square.
+  #
+  def antisymmetric?
+    Matrix.Raise ErrDimensionMismatch unless square?
+    each_with_index(:upper) do |e, row, col|
+      return false unless e == -rows[col][row]
+    end
+    true
+  end
+
+  #
   # Returns +true+ if this is a unitary matrix
   # Raises an error if matrix is not square.
   #

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]