зеркало из https://github.com/github/ruby.git
* lib/matrix.rb: Allow non integer exponents for Matrix#**
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@32352 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
Родитель
004c34f9de
Коммит
59a3d59496
|
@ -1,3 +1,7 @@
|
|||
Fri Jul 1 15:21:14 2011 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
|
||||
|
||||
* lib/matrix.rb: Allow non integer exponents for Matrix#**
|
||||
|
||||
Fri Jul 1 15:13:25 2011 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
|
||||
|
||||
* lib/matrix: Add Eigenvalue Decomposition
|
||||
|
|
1
NEWS
1
NEWS
|
@ -178,6 +178,7 @@ with all sufficient information, see the ChangeLog file.
|
|||
* Matrix#each and #each_with_index can iterate on a subset of the elements
|
||||
* Matrix#find_index returns [row, column] and can iterate on a subset
|
||||
of the elements
|
||||
* Matrix#** implements Numeric exponents (using the eigensystem)
|
||||
* Matrix.zero can build rectangular matrices
|
||||
|
||||
* net/http
|
||||
|
|
|
@ -956,8 +956,10 @@ class Matrix
|
|||
private :inverse_from
|
||||
|
||||
#
|
||||
# Matrix exponentiation. Currently implemented for integer powers only.
|
||||
# Matrix exponentiation.
|
||||
# Equivalent to multiplying the matrix by itself N times.
|
||||
# Non integer exponents will be handled by diagonalizing the matrix.
|
||||
#
|
||||
# Matrix[[7,6], [3,9]] ** 2
|
||||
# => 67 96
|
||||
# 48 99
|
||||
|
@ -977,8 +979,9 @@ class Matrix
|
|||
return z if (other >>= 1).zero?
|
||||
x *= x
|
||||
end
|
||||
when Float, Rational
|
||||
Matrix.Raise ErrOperationNotImplemented, "**", self.class, other.class
|
||||
when Numeric
|
||||
v, d, v_inv = eigensystem
|
||||
v * Matrix.diagonal(*d.each(:diagonal).map{|e| e ** other}) * v_inv
|
||||
else
|
||||
Matrix.Raise ErrOperationNotDefined, "**", self.class, other.class
|
||||
end
|
||||
|
|
Загрузка…
Ссылка в новой задаче