summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorkeiju <keiju@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2010-01-27 14:28:47 +0000
committerkeiju <keiju@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2010-01-27 14:28:47 +0000
commitafc9fce01f0557751d38376ed56221e6d5e99488 (patch)
treef9d21199ebdfa1ccae4686fcd04333c0d5ac1f2e /lib
parent606f59bbffe149112efeb5322cb4f6d22362589a (diff)
* lib/matrix.rb: add exception Matrix::ErrOperationNotImplemented
[ruby-dev:40149]. * lib/matrix.rb: change message of exception Matrix::ErrOperationNotDefined [ruby-dev:40150], [ruby-dev:40176]. * lib/matrix.rb: add method Vector#/ [ruby-dev:40151]. * lib/matrix.rb(Matrix::Scalar#+,-,/): delete meaningless when switch. [ruby-dev:40149] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@26448 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib')
-rw-r--r--lib/matrix.rb44
1 files changed, 30 insertions, 14 deletions
diff --git a/lib/matrix.rb b/lib/matrix.rb
index 358ac04416..e6f5fe107c 100644
--- a/lib/matrix.rb
+++ b/lib/matrix.rb
@@ -26,7 +26,8 @@ module ExceptionForMatrix # :nodoc:
def_exception("ErrDimensionMismatch", "\#{self.name} dimension mismatch")
def_exception("ErrNotRegular", "Not Regular Matrix")
- def_exception("ErrOperationNotDefined", "This operation(%s) can\\'t defined")
+ def_exception("ErrOperationNotDefined", "Operation(%s) can\\'t be defined: %s op %s")
+ def_exception("ErrOperationNotImplemented", "Sorry, Operation(%s) not implemented: %s op %s")
end
#
@@ -497,7 +498,7 @@ class Matrix
def +(m)
case m
when Numeric
- Matrix.Raise ErrOperationNotDefined, "+"
+ Matrix.Raise ErrOperationNotDefined, "+", self.class, m.class
when Vector
m = Matrix.column_vector(m)
when Matrix
@@ -525,7 +526,7 @@ class Matrix
def -(m)
case m
when Numeric
- Matrix.Raise ErrOperationNotDefined, "-"
+ Matrix.Raise ErrOperationNotDefined, "-", self.class, m.class
when Vector
m = Matrix.column_vector(m)
when Matrix
@@ -649,9 +650,9 @@ class Matrix
x *= x
end
elsif other.kind_of?(Float) || defined?(Rational) && other.kind_of?(Rational)
- Matrix.Raise ErrOperationNotDefined, "**"
+ Matrix.Raise ErrOperationNotImplemented, "**", self.class, other.class
else
- Matrix.Raise ErrOperationNotDefined, "**"
+ Matrix.Raise ErrOperationNotDefined, "**", self.class, other.class
end
end
@@ -976,9 +977,7 @@ class Matrix
when Numeric
Scalar.new(@value + other)
when Vector, Matrix
- Scalar.Raise WrongArgType, other.class, "Numeric or Scalar"
- when Scalar
- Scalar.new(@value + other.value)
+ Scalar.Raise ErrOperationNotDefined, "+", @value.class, other.class
else
x, y = other.coerce(self)
x + y
@@ -990,9 +989,7 @@ class Matrix
when Numeric
Scalar.new(@value - other)
when Vector, Matrix
- Scalar.Raise WrongArgType, other.class, "Numeric or Scalar"
- when Scalar
- Scalar.new(@value - other.value)
+ Scalar.Raise ErrOperationNotDefined, "-", @value.class, other.class
else
x, y = other.coerce(self)
x - y
@@ -1016,7 +1013,7 @@ class Matrix
when Numeric
Scalar.new(@value / other)
when Vector
- Scalar.Raise WrongArgType, other.class, "Numeric or Scalar or Matrix"
+ Scalar.Raise ErrOperationNotDefined, "/", @value.class, other.class
when Matrix
self * other.inverse
else
@@ -1030,9 +1027,10 @@ class Matrix
when Numeric
Scalar.new(@value ** other)
when Vector
- Scalar.Raise WrongArgType, other.class, "Numeric or Scalar or Matrix"
+ Scalar.Raise ErrOperationNotDefined, "**", @value.class, other.class
when Matrix
- other.powered_by(self)
+ #other.powered_by(self)
+ Scalar.Raise ErrOperationNotImplemented, "**", @value.class, other.class
else
x, y = other.coerce(self)
x ** y
@@ -1214,6 +1212,8 @@ class Vector
Vector.elements(els, false)
when Matrix
Matrix.column_vector(self) * x
+ when Vector
+ Vector.Raise ErrOperationNotDefined, "*", self.class, x.class
else
s, x = x.coerce(self)
s * x
@@ -1258,6 +1258,22 @@ class Vector
end
end
+ #
+ # Vector division.
+ #
+ def /(x)
+ case x
+ when Numeric
+ els = @elements.collect{|e| e / x}
+ Vector.elements(els, false)
+ when Matrix, Vector
+ Vector.Raise ErrOperationNotDefined, "/", self.class, x.class
+ else
+ s, x = x.coerce(self)
+ s / x
+ end
+ end
+
#--
# VECTOR FUNCTIONS -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
#++