From 387e0dbe3fac787adc110a4e879d1026debc7f49 Mon Sep 17 00:00:00 2001 From: marcandre Date: Wed, 19 Nov 2014 17:44:46 +0000 Subject: * lib/matrix.rb: Vector#independent? and associated class method patch by gogo tanaka [#10451] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48506 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- lib/matrix.rb | 41 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) (limited to 'lib/matrix.rb') diff --git a/lib/matrix.rb b/lib/matrix.rb index 4d211ddd78..569680f600 100644 --- a/lib/matrix.rb +++ b/lib/matrix.rb @@ -1691,6 +1691,11 @@ end # * #each2(v) # * #collect2(v) # +# Properties of vectors: +# * #angle_with(v) +# * Vector.independent?(*vs) +# * #independent?(*vs) +# # Vector arithmetic: # * #*(x) "is matrix or number" # * #+(v) @@ -1699,7 +1704,6 @@ end # * #-@ # # Vector functions: -# * #angle_with(v) # * #inner_product(v), dot(v) # * #cross_product(v), cross(v) # * #collect @@ -1832,6 +1836,41 @@ class Vector end end + #-- + # PROPERTIES -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- + #++ + + # + # Returns +true+ iff all of vectors are linearly independent. + # + # Vector.independent?(Vector[1,0], Vector[0,1]) + # => true + # + # Vector.independent?(Vector[1,2], Vector[2,4]) + # => false + # + def Vector.independent?(*vs) + vs.each do |v| + raise TypeError, "expected Vector, got #{v.class}" unless v.is_a?(Vector) + Vector.Raise ErrDimensionMismatch unless v.size == vs.first.size + end + return false if vs.count > vs.first.size + Matrix[*vs].rank.eql?(vs.count) + end + + # + # Returns +true+ iff all of vectors are linearly independent. + # + # Vector[1,0].independent?(Vector[0,1]) + # => true + # + # Vector[1,2].independent?(Vector[2,4]) + # => false + # + def independent?(*vs) + self.class.independent?(self, *vs) + end + #-- # COMPARING -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- #++ -- cgit v1.2.3