1886 lines
50 KiB
Ruby
Generated
1886 lines
50 KiB
Ruby
Generated
# typed: true
|
|
|
|
# DO NOT EDIT MANUALLY
|
|
# This is an autogenerated file for types exported from the `matrix` gem.
|
|
# Please instead update this file by running `bin/tapioca gem matrix`.
|
|
|
|
|
|
# source://matrix//lib/matrix.rb#17
|
|
module ExceptionForMatrix; end
|
|
|
|
# source://matrix//lib/matrix.rb#18
|
|
class ExceptionForMatrix::ErrDimensionMismatch < ::StandardError
|
|
# @return [ErrDimensionMismatch] a new instance of ErrDimensionMismatch
|
|
#
|
|
# source://matrix//lib/matrix.rb#19
|
|
def initialize(val = T.unsafe(nil)); end
|
|
end
|
|
|
|
# source://matrix//lib/matrix.rb#28
|
|
class ExceptionForMatrix::ErrNotRegular < ::StandardError
|
|
# @return [ErrNotRegular] a new instance of ErrNotRegular
|
|
#
|
|
# source://matrix//lib/matrix.rb#29
|
|
def initialize(val = T.unsafe(nil)); end
|
|
end
|
|
|
|
# source://matrix//lib/matrix.rb#38
|
|
class ExceptionForMatrix::ErrOperationNotDefined < ::StandardError
|
|
# @return [ErrOperationNotDefined] a new instance of ErrOperationNotDefined
|
|
#
|
|
# source://matrix//lib/matrix.rb#39
|
|
def initialize(vals); end
|
|
end
|
|
|
|
# source://matrix//lib/matrix.rb#48
|
|
class ExceptionForMatrix::ErrOperationNotImplemented < ::StandardError
|
|
# @return [ErrOperationNotImplemented] a new instance of ErrOperationNotImplemented
|
|
#
|
|
# source://matrix//lib/matrix.rb#49
|
|
def initialize(vals); end
|
|
end
|
|
|
|
# The +Matrix+ class represents a mathematical matrix. It provides methods for creating
|
|
# matrices, operating on them arithmetically and algebraically,
|
|
# and determining their mathematical properties such as trace, rank, inverse, determinant,
|
|
# or eigensystem.
|
|
#
|
|
# source://matrix//lib/matrix/version.rb#3
|
|
class Matrix
|
|
include ::Enumerable
|
|
include ::ExceptionForMatrix
|
|
include ::Matrix::CoercionHelper
|
|
extend ::Matrix::ConversionHelper
|
|
|
|
# Matrix.new is private; use ::rows, ::columns, ::[], etc... to create.
|
|
#
|
|
# @return [Matrix] a new instance of Matrix
|
|
#
|
|
# source://matrix//lib/matrix.rb#322
|
|
def initialize(rows, column_count = T.unsafe(nil)); end
|
|
|
|
# Matrix multiplication.
|
|
# Matrix[[2,4], [6,8]] * Matrix.identity(2)
|
|
# # => 2 4
|
|
# # 6 8
|
|
#
|
|
# source://matrix//lib/matrix.rb#1058
|
|
def *(m); end
|
|
|
|
# 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
|
|
#
|
|
# source://matrix//lib/matrix.rb#1237
|
|
def **(exp); end
|
|
|
|
# Matrix addition.
|
|
# Matrix.scalar(2,5) + Matrix[[1,0], [-4,7]]
|
|
# # => 6 0
|
|
# # -4 12
|
|
#
|
|
# @raise [ErrDimensionMismatch]
|
|
#
|
|
# source://matrix//lib/matrix.rb#1093
|
|
def +(m); end
|
|
|
|
# source://matrix//lib/matrix.rb#1283
|
|
def +@; end
|
|
|
|
# Matrix subtraction.
|
|
# Matrix[[1,5], [4,2]] - Matrix[[9,3], [-4,1]]
|
|
# # => -8 2
|
|
# # 8 1
|
|
#
|
|
# @raise [ErrDimensionMismatch]
|
|
#
|
|
# source://matrix//lib/matrix.rb#1120
|
|
def -(m); end
|
|
|
|
# Unary matrix negation.
|
|
#
|
|
# -Matrix[[1,5], [4,2]]
|
|
# # => -1 -5
|
|
# # -4 -2
|
|
#
|
|
# source://matrix//lib/matrix.rb#1292
|
|
def -@; end
|
|
|
|
# Matrix division (multiplication by the inverse).
|
|
# Matrix[[7,6], [3,9]] / Matrix[[2,9], [3,1]]
|
|
# # => -7 1
|
|
# # -3 -6
|
|
#
|
|
# source://matrix//lib/matrix.rb#1147
|
|
def /(other); end
|
|
|
|
# Returns whether the two matrices contain equal elements.
|
|
#
|
|
# source://matrix//lib/matrix.rb#1021
|
|
def ==(other); end
|
|
|
|
# Returns element (+i+,+j+) of the matrix. That is: row +i+, column +j+.
|
|
#
|
|
# source://matrix//lib/matrix.rb#337
|
|
def [](i, j); end
|
|
|
|
# :call-seq:
|
|
# matrix[range, range] = matrix/element
|
|
# matrix[range, integer] = vector/column_matrix/element
|
|
# matrix[integer, range] = vector/row_matrix/element
|
|
# matrix[integer, integer] = element
|
|
#
|
|
# Set element or elements of matrix.
|
|
#
|
|
# @raise [FrozenError]
|
|
#
|
|
# source://matrix//lib/matrix.rb#351
|
|
def []=(i, j, v); end
|
|
|
|
# Returns the absolute value elementwise
|
|
#
|
|
# source://matrix//lib/matrix.rb#1299
|
|
def abs; end
|
|
|
|
# Returns the adjoint of the matrix.
|
|
#
|
|
# Matrix[ [i,1],[2,-i] ].adjoint
|
|
# # => -i 2
|
|
# # 1 i
|
|
#
|
|
# source://matrix//lib/matrix.rb#1595
|
|
def adjoint; end
|
|
|
|
# Returns the adjugate of the matrix.
|
|
#
|
|
# Matrix[ [7,6],[3,9] ].adjugate
|
|
# # => 9 -6
|
|
# # -3 7
|
|
#
|
|
# @raise [ErrDimensionMismatch]
|
|
#
|
|
# source://matrix//lib/matrix.rb#793
|
|
def adjugate; end
|
|
|
|
# Returns +true+ if this is an antisymmetric matrix.
|
|
# Raises an error if matrix is not square.
|
|
#
|
|
# @raise [ErrDimensionMismatch]
|
|
# @return [Boolean]
|
|
#
|
|
# source://matrix//lib/matrix.rb#973
|
|
def antisymmetric?; end
|
|
|
|
# The coerce method provides support for Ruby type coercion.
|
|
# This coercion mechanism is used by Ruby to handle mixed-type
|
|
# numeric operations: it is intended to find a compatible common
|
|
# type between the two operands of the operator.
|
|
# See also Numeric#coerce.
|
|
#
|
|
# source://matrix//lib/matrix.rb#1648
|
|
def coerce(other); end
|
|
|
|
# Returns the (row, column) cofactor which is obtained by multiplying
|
|
# the first minor by (-1)**(row + column).
|
|
#
|
|
# Matrix.diagonal(9, 5, -3, 4).cofactor(1, 1)
|
|
# # => -108
|
|
#
|
|
# @raise [RuntimeError]
|
|
#
|
|
# source://matrix//lib/matrix.rb#778
|
|
def cofactor(row, column); end
|
|
|
|
# Returns the Laplace expansion along given row or column.
|
|
#
|
|
# Matrix[[7,6], [3,9]].laplace_expansion(column: 1)
|
|
# # => 45
|
|
#
|
|
# Matrix[[Vector[1, 0], Vector[0, 1]], [2, 3]].laplace_expansion(row: 0)
|
|
# # => Vector[3, -2]
|
|
#
|
|
# @raise [ErrDimensionMismatch]
|
|
#
|
|
# source://matrix//lib/matrix.rb#810
|
|
def cofactor_expansion(row: T.unsafe(nil), column: T.unsafe(nil)); end
|
|
|
|
# Returns a matrix that is the result of iteration of the given block over all
|
|
# elements of the matrix.
|
|
# Elements can be restricted by passing an argument:
|
|
# * :all (default): yields all elements
|
|
# * :diagonal: yields only elements on the diagonal
|
|
# * :off_diagonal: yields all elements except on the diagonal
|
|
# * :lower: yields only elements on or below the diagonal
|
|
# * :strict_lower: yields only elements below the diagonal
|
|
# * :strict_upper: yields only elements above the diagonal
|
|
# * :upper: yields only elements on or above the diagonal
|
|
# Matrix[ [1,2], [3,4] ].collect { |e| e**2 }
|
|
# # => 1 4
|
|
# # 9 16
|
|
#
|
|
# source://matrix//lib/matrix.rb#508
|
|
def collect(which = T.unsafe(nil), &block); end
|
|
|
|
# Invokes the given block for each element of matrix, replacing the element with the value
|
|
# returned by the block.
|
|
# Elements can be restricted by passing an argument:
|
|
# * :all (default): yields all elements
|
|
# * :diagonal: yields only elements on the diagonal
|
|
# * :off_diagonal: yields all elements except on the diagonal
|
|
# * :lower: yields only elements on or below the diagonal
|
|
# * :strict_lower: yields only elements below the diagonal
|
|
# * :strict_upper: yields only elements above the diagonal
|
|
# * :upper: yields only elements on or above the diagonal
|
|
#
|
|
# @raise [FrozenError]
|
|
#
|
|
# source://matrix//lib/matrix.rb#526
|
|
def collect!(which = T.unsafe(nil)); end
|
|
|
|
# Returns column vector number +j+ of the matrix as a Vector (starting at 0
|
|
# like an array). When a block is given, the elements of that vector are
|
|
# iterated.
|
|
#
|
|
# source://matrix//lib/matrix.rb#477
|
|
def column(j); end
|
|
|
|
# Returns the number of columns.
|
|
#
|
|
# source://matrix//lib/matrix.rb#456
|
|
def column_count; end
|
|
|
|
# Returns the number of columns.
|
|
#
|
|
# source://matrix//lib/matrix.rb#456
|
|
def column_size; end
|
|
|
|
# Returns an array of the column vectors of the matrix. See Vector.
|
|
#
|
|
# source://matrix//lib/matrix.rb#1669
|
|
def column_vectors; end
|
|
|
|
# :call-seq:
|
|
# combine(*other_matrices) { |*elements| ... }
|
|
#
|
|
# Creates new matrix by combining with <i>other_matrices</i> entrywise,
|
|
# using the given block.
|
|
#
|
|
# x = Matrix[[6, 6], [4, 4]]
|
|
# y = Matrix[[1, 2], [3, 4]]
|
|
# x.combine(y) {|a, b| a - b} # => Matrix[[5, 4], [1, 0]]
|
|
#
|
|
# source://matrix//lib/matrix.rb#315
|
|
def combine(*matrices, &block); end
|
|
|
|
# Returns element (+i+,+j+) of the matrix. That is: row +i+, column +j+.
|
|
#
|
|
# source://matrix//lib/matrix.rb#337
|
|
def component(i, j); end
|
|
|
|
# Returns the conjugate of the matrix.
|
|
# Matrix[[Complex(1,2), Complex(0,1), 0], [1, 2, 3]]
|
|
# # => 1+2i i 0
|
|
# # 1 2 3
|
|
# Matrix[[Complex(1,2), Complex(0,1), 0], [1, 2, 3]].conjugate
|
|
# # => 1-2i -i 0
|
|
# # 1 2 3
|
|
#
|
|
# source://matrix//lib/matrix.rb#1583
|
|
def conj; end
|
|
|
|
# Returns the conjugate of the matrix.
|
|
# Matrix[[Complex(1,2), Complex(0,1), 0], [1, 2, 3]]
|
|
# # => 1+2i i 0
|
|
# # 1 2 3
|
|
# Matrix[[Complex(1,2), Complex(0,1), 0], [1, 2, 3]].conjugate
|
|
# # => 1-2i -i 0
|
|
# # 1 2 3
|
|
#
|
|
# source://matrix//lib/matrix.rb#1583
|
|
def conjugate; end
|
|
|
|
# Returns the determinant of the matrix.
|
|
#
|
|
# Beware that using Float values can yield erroneous results
|
|
# because of their lack of precision.
|
|
# Consider using exact types like Rational or BigDecimal instead.
|
|
#
|
|
# Matrix[[7,6], [3,9]].determinant
|
|
# # => 45
|
|
#
|
|
# @raise [ErrDimensionMismatch]
|
|
#
|
|
# source://matrix//lib/matrix.rb#1317
|
|
def det; end
|
|
|
|
# deprecated; use Matrix#determinant
|
|
#
|
|
# source://matrix//lib/matrix.rb#1398
|
|
def det_e; end
|
|
|
|
# Returns the determinant of the matrix.
|
|
#
|
|
# Beware that using Float values can yield erroneous results
|
|
# because of their lack of precision.
|
|
# Consider using exact types like Rational or BigDecimal instead.
|
|
#
|
|
# Matrix[[7,6], [3,9]].determinant
|
|
# # => 45
|
|
#
|
|
# @raise [ErrDimensionMismatch]
|
|
#
|
|
# source://matrix//lib/matrix.rb#1317
|
|
def determinant; end
|
|
|
|
# deprecated; use Matrix#determinant
|
|
#
|
|
# source://matrix//lib/matrix.rb#1398
|
|
def determinant_e; end
|
|
|
|
# Returns +true+ if this is a diagonal matrix.
|
|
# Raises an error if matrix is not square.
|
|
#
|
|
# @raise [ErrDimensionMismatch]
|
|
# @return [Boolean]
|
|
#
|
|
# source://matrix//lib/matrix.rb#839
|
|
def diagonal?; end
|
|
|
|
# Yields all elements of the matrix, starting with those of the first row,
|
|
# or returns an Enumerator if no block given.
|
|
# Elements can be restricted by passing an argument:
|
|
# * :all (default): yields all elements
|
|
# * :diagonal: yields only elements on the diagonal
|
|
# * :off_diagonal: yields all elements except on the diagonal
|
|
# * :lower: yields only elements on or below the diagonal
|
|
# * :strict_lower: yields only elements below the diagonal
|
|
# * :strict_upper: yields only elements above the diagonal
|
|
# * :upper: yields only elements on or above the diagonal
|
|
#
|
|
# Matrix[ [1,2], [3,4] ].each { |e| puts e }
|
|
# # => prints the numbers 1 to 4
|
|
# Matrix[ [1,2], [3,4] ].each(:strict_lower).to_a # => [3]
|
|
#
|
|
# source://matrix//lib/matrix.rb#556
|
|
def each(which = T.unsafe(nil), &block); end
|
|
|
|
# Same as #each, but the row index and column index in addition to the element
|
|
#
|
|
# Matrix[ [1,2], [3,4] ].each_with_index do |e, row, col|
|
|
# puts "#{e} at #{row}, #{col}"
|
|
# end
|
|
# # => Prints:
|
|
# # 1 at 0, 0
|
|
# # 2 at 0, 1
|
|
# # 3 at 1, 0
|
|
# # 4 at 1, 1
|
|
#
|
|
# source://matrix//lib/matrix.rb#616
|
|
def each_with_index(which = T.unsafe(nil)); end
|
|
|
|
# Returns the Eigensystem of the matrix; see +EigenvalueDecomposition+.
|
|
# m = Matrix[[1, 2], [3, 4]]
|
|
# v, d, v_inv = m.eigensystem
|
|
# d.diagonal? # => true
|
|
# v.inv == v_inv # => true
|
|
# (v * d * v_inv).round(5) == m # => true
|
|
#
|
|
# source://matrix//lib/matrix.rb#1550
|
|
def eigen; end
|
|
|
|
# Returns the Eigensystem of the matrix; see +EigenvalueDecomposition+.
|
|
# m = Matrix[[1, 2], [3, 4]]
|
|
# v, d, v_inv = m.eigensystem
|
|
# d.diagonal? # => true
|
|
# v.inv == v_inv # => true
|
|
# (v * d * v_inv).round(5) == m # => true
|
|
#
|
|
# source://matrix//lib/matrix.rb#1550
|
|
def eigensystem; end
|
|
|
|
# Returns element (+i+,+j+) of the matrix. That is: row +i+, column +j+.
|
|
#
|
|
# source://matrix//lib/matrix.rb#337
|
|
def element(i, j); end
|
|
|
|
# Deprecated.
|
|
#
|
|
# Use <code>map(&:to_f)</code>
|
|
#
|
|
# source://matrix//lib/matrix.rb#1692
|
|
def elements_to_f; end
|
|
|
|
# Deprecated.
|
|
#
|
|
# Use <code>map(&:to_i)</code>
|
|
#
|
|
# source://matrix//lib/matrix.rb#1700
|
|
def elements_to_i; end
|
|
|
|
# Deprecated.
|
|
#
|
|
# Use <code>map(&:to_r)</code>
|
|
#
|
|
# source://matrix//lib/matrix.rb#1708
|
|
def elements_to_r; end
|
|
|
|
# Returns +true+ if this is an empty matrix, i.e. if the number of rows
|
|
# or the number of columns is 0.
|
|
#
|
|
# @return [Boolean]
|
|
#
|
|
# source://matrix//lib/matrix.rb#848
|
|
def empty?; end
|
|
|
|
# Hadamard product
|
|
# Matrix[[1,2], [3,4]].hadamard_product(Matrix[[1,2], [3,2]])
|
|
# # => 1 4
|
|
# # 9 8
|
|
#
|
|
# source://matrix//lib/matrix.rb#1167
|
|
def entrywise_product(m); end
|
|
|
|
# @return [Boolean]
|
|
#
|
|
# source://matrix//lib/matrix.rb#1027
|
|
def eql?(other); end
|
|
|
|
# :call-seq:
|
|
# index(value, selector = :all) -> [row, column]
|
|
# index(selector = :all){ block } -> [row, column]
|
|
# index(selector = :all) -> an_enumerator
|
|
#
|
|
# The index method is specialized to return the index as [row, column]
|
|
# It also accepts an optional +selector+ argument, see #each for details.
|
|
#
|
|
# Matrix[ [1,2], [3,4] ].index(&:even?) # => [0, 1]
|
|
# Matrix[ [1,1], [1,1] ].index(1, :strict_lower) # => [1, 0]
|
|
#
|
|
# @raise [ArgumentError]
|
|
#
|
|
# source://matrix//lib/matrix.rb#679
|
|
def find_index(*args); end
|
|
|
|
# Returns the submatrix obtained by deleting the specified row and column.
|
|
#
|
|
# Matrix.diagonal(9, 5, -3, 4).first_minor(1, 2)
|
|
# # => 9 0 0
|
|
# # 0 0 0
|
|
# # 0 0 4
|
|
#
|
|
# @raise [RuntimeError]
|
|
#
|
|
# source://matrix//lib/matrix.rb#751
|
|
def first_minor(row, column); end
|
|
|
|
# source://matrix//lib/matrix.rb#534
|
|
def freeze; end
|
|
|
|
# Hadamard product
|
|
# Matrix[[1,2], [3,4]].hadamard_product(Matrix[[1,2], [3,2]])
|
|
# # => 1 4
|
|
# # 9 8
|
|
#
|
|
# source://matrix//lib/matrix.rb#1167
|
|
def hadamard_product(m); end
|
|
|
|
# Returns a hash-code for the matrix.
|
|
#
|
|
# source://matrix//lib/matrix.rb#1044
|
|
def hash; end
|
|
|
|
# Returns +true+ if this is an hermitian matrix.
|
|
# Raises an error if matrix is not square.
|
|
#
|
|
# @raise [ErrDimensionMismatch]
|
|
# @return [Boolean]
|
|
#
|
|
# source://matrix//lib/matrix.rb#856
|
|
def hermitian?; end
|
|
|
|
# Returns a new matrix resulting by stacking horizontally
|
|
# the receiver with the given matrices
|
|
#
|
|
# x = Matrix[[1, 2], [3, 4]]
|
|
# y = Matrix[[5, 6], [7, 8]]
|
|
# x.hstack(y) # => Matrix[[1, 2, 5, 6], [3, 4, 7, 8]]
|
|
#
|
|
# source://matrix//lib/matrix.rb#1412
|
|
def hstack(*matrices); end
|
|
|
|
# Returns the imaginary part of the matrix.
|
|
# Matrix[[Complex(1,2), Complex(0,1), 0], [1, 2, 3]]
|
|
# # => 1+2i i 0
|
|
# # 1 2 3
|
|
# Matrix[[Complex(1,2), Complex(0,1), 0], [1, 2, 3]].imaginary
|
|
# # => 2i i 0
|
|
# # 0 0 0
|
|
#
|
|
# source://matrix//lib/matrix.rb#1608
|
|
def imag; end
|
|
|
|
# Returns the imaginary part of the matrix.
|
|
# Matrix[[Complex(1,2), Complex(0,1), 0], [1, 2, 3]]
|
|
# # => 1+2i i 0
|
|
# # 1 2 3
|
|
# Matrix[[Complex(1,2), Complex(0,1), 0], [1, 2, 3]].imaginary
|
|
# # => 2i i 0
|
|
# # 0 0 0
|
|
#
|
|
# source://matrix//lib/matrix.rb#1608
|
|
def imaginary; end
|
|
|
|
# :call-seq:
|
|
# index(value, selector = :all) -> [row, column]
|
|
# index(selector = :all){ block } -> [row, column]
|
|
# index(selector = :all) -> an_enumerator
|
|
#
|
|
# The index method is specialized to return the index as [row, column]
|
|
# It also accepts an optional +selector+ argument, see #each for details.
|
|
#
|
|
# Matrix[ [1,2], [3,4] ].index(&:even?) # => [0, 1]
|
|
# Matrix[ [1,1], [1,1] ].index(1, :strict_lower) # => [1, 0]
|
|
#
|
|
# @raise [ArgumentError]
|
|
#
|
|
# source://matrix//lib/matrix.rb#679
|
|
def index(*args); end
|
|
|
|
# Overrides Object#inspect
|
|
#
|
|
# source://matrix//lib/matrix.rb#1733
|
|
def inspect; end
|
|
|
|
# Returns the inverse of the matrix.
|
|
# Matrix[[-1, -1], [0, -1]].inverse
|
|
# # => -1 1
|
|
# # 0 -1
|
|
#
|
|
# @raise [ErrDimensionMismatch]
|
|
#
|
|
# source://matrix//lib/matrix.rb#1178
|
|
def inv; end
|
|
|
|
# Returns the inverse of the matrix.
|
|
# Matrix[[-1, -1], [0, -1]].inverse
|
|
# # => -1 1
|
|
# # 0 -1
|
|
#
|
|
# @raise [ErrDimensionMismatch]
|
|
#
|
|
# source://matrix//lib/matrix.rb#1178
|
|
def inverse; end
|
|
|
|
# Returns the Laplace expansion along given row or column.
|
|
#
|
|
# Matrix[[7,6], [3,9]].laplace_expansion(column: 1)
|
|
# # => 45
|
|
#
|
|
# Matrix[[Vector[1, 0], Vector[0, 1]], [2, 3]].laplace_expansion(row: 0)
|
|
# # => Vector[3, -2]
|
|
#
|
|
# @raise [ErrDimensionMismatch]
|
|
#
|
|
# source://matrix//lib/matrix.rb#810
|
|
def laplace_expansion(row: T.unsafe(nil), column: T.unsafe(nil)); end
|
|
|
|
# Returns +true+ if this is a lower triangular matrix.
|
|
#
|
|
# @return [Boolean]
|
|
#
|
|
# source://matrix//lib/matrix.rb#866
|
|
def lower_triangular?; end
|
|
|
|
# Returns the LUP decomposition of the matrix; see +LUPDecomposition+.
|
|
# a = Matrix[[1, 2], [3, 4]]
|
|
# l, u, p = a.lup
|
|
# l.lower_triangular? # => true
|
|
# u.upper_triangular? # => true
|
|
# p.permutation? # => true
|
|
# l * u == p * a # => true
|
|
# a.lup.solve([2, 5]) # => Vector[(1/1), (1/2)]
|
|
#
|
|
# source://matrix//lib/matrix.rb#1565
|
|
def lup; end
|
|
|
|
# Returns the LUP decomposition of the matrix; see +LUPDecomposition+.
|
|
# a = Matrix[[1, 2], [3, 4]]
|
|
# l, u, p = a.lup
|
|
# l.lower_triangular? # => true
|
|
# u.upper_triangular? # => true
|
|
# p.permutation? # => true
|
|
# l * u == p * a # => true
|
|
# a.lup.solve([2, 5]) # => Vector[(1/1), (1/2)]
|
|
#
|
|
# source://matrix//lib/matrix.rb#1565
|
|
def lup_decomposition; end
|
|
|
|
# Returns a matrix that is the result of iteration of the given block over all
|
|
# elements of the matrix.
|
|
# Elements can be restricted by passing an argument:
|
|
# * :all (default): yields all elements
|
|
# * :diagonal: yields only elements on the diagonal
|
|
# * :off_diagonal: yields all elements except on the diagonal
|
|
# * :lower: yields only elements on or below the diagonal
|
|
# * :strict_lower: yields only elements below the diagonal
|
|
# * :strict_upper: yields only elements above the diagonal
|
|
# * :upper: yields only elements on or above the diagonal
|
|
# Matrix[ [1,2], [3,4] ].collect { |e| e**2 }
|
|
# # => 1 4
|
|
# # 9 16
|
|
#
|
|
# source://matrix//lib/matrix.rb#508
|
|
def map(which = T.unsafe(nil), &block); end
|
|
|
|
# Invokes the given block for each element of matrix, replacing the element with the value
|
|
# returned by the block.
|
|
# Elements can be restricted by passing an argument:
|
|
# * :all (default): yields all elements
|
|
# * :diagonal: yields only elements on the diagonal
|
|
# * :off_diagonal: yields all elements except on the diagonal
|
|
# * :lower: yields only elements on or below the diagonal
|
|
# * :strict_lower: yields only elements below the diagonal
|
|
# * :strict_upper: yields only elements above the diagonal
|
|
# * :upper: yields only elements on or above the diagonal
|
|
#
|
|
# @raise [FrozenError]
|
|
#
|
|
# source://matrix//lib/matrix.rb#526
|
|
def map!(which = T.unsafe(nil)); end
|
|
|
|
# Returns a section of the matrix. The parameters are either:
|
|
# * start_row, nrows, start_col, ncols; OR
|
|
# * row_range, col_range
|
|
#
|
|
# Matrix.diagonal(9, 5, -3).minor(0..1, 0..2)
|
|
# # => 9 0 0
|
|
# # 0 5 0
|
|
#
|
|
# Like Array#[], negative indices count backward from the end of the
|
|
# row or column (-1 is the last element). Returns nil if the starting
|
|
# row or column is greater than row_count or column_count respectively.
|
|
#
|
|
# source://matrix//lib/matrix.rb#710
|
|
def minor(*param); end
|
|
|
|
# Returns +true+ if this is a normal matrix.
|
|
# Raises an error if matrix is not square.
|
|
#
|
|
# @raise [ErrDimensionMismatch]
|
|
# @return [Boolean]
|
|
#
|
|
# source://matrix//lib/matrix.rb#874
|
|
def normal?; end
|
|
|
|
# Returns +true+ if this is an orthogonal matrix
|
|
# Raises an error if matrix is not square.
|
|
#
|
|
# @raise [ErrDimensionMismatch]
|
|
# @return [Boolean]
|
|
#
|
|
# source://matrix//lib/matrix.rb#892
|
|
def orthogonal?; end
|
|
|
|
# Returns +true+ if this is a permutation matrix
|
|
# Raises an error if matrix is not square.
|
|
#
|
|
# @raise [ErrDimensionMismatch]
|
|
# @return [Boolean]
|
|
#
|
|
# source://matrix//lib/matrix.rb#911
|
|
def permutation?; end
|
|
|
|
# Returns the rank of the matrix.
|
|
# Beware that using Float values can yield erroneous results
|
|
# because of their lack of precision.
|
|
# Consider using exact types like Rational or BigDecimal instead.
|
|
#
|
|
# Matrix[[7,6], [3,9]].rank
|
|
# # => 2
|
|
#
|
|
# source://matrix//lib/matrix.rb#1425
|
|
def rank; end
|
|
|
|
# deprecated; use Matrix#rank
|
|
#
|
|
# source://matrix//lib/matrix.rb#1456
|
|
def rank_e; end
|
|
|
|
# Returns the real part of the matrix.
|
|
# Matrix[[Complex(1,2), Complex(0,1), 0], [1, 2, 3]]
|
|
# # => 1+2i i 0
|
|
# # 1 2 3
|
|
# Matrix[[Complex(1,2), Complex(0,1), 0], [1, 2, 3]].real
|
|
# # => 1 0 0
|
|
# # 1 2 3
|
|
#
|
|
# source://matrix//lib/matrix.rb#1622
|
|
def real; end
|
|
|
|
# Returns +true+ if all entries of the matrix are real.
|
|
#
|
|
# @return [Boolean]
|
|
#
|
|
# source://matrix//lib/matrix.rb#932
|
|
def real?; end
|
|
|
|
# Returns an array containing matrices corresponding to the real and imaginary
|
|
# parts of the matrix
|
|
#
|
|
# m.rect == [m.real, m.imag] # ==> true for all matrices m
|
|
#
|
|
# source://matrix//lib/matrix.rb#1632
|
|
def rect; end
|
|
|
|
# Returns an array containing matrices corresponding to the real and imaginary
|
|
# parts of the matrix
|
|
#
|
|
# m.rect == [m.real, m.imag] # ==> true for all matrices m
|
|
#
|
|
# source://matrix//lib/matrix.rb#1632
|
|
def rectangular; end
|
|
|
|
# Returns +true+ if this is a regular (i.e. non-singular) matrix.
|
|
#
|
|
# @return [Boolean]
|
|
#
|
|
# source://matrix//lib/matrix.rb#939
|
|
def regular?; end
|
|
|
|
# Returns a new matrix with rotated elements.
|
|
# The argument specifies the rotation (defaults to `:clockwise`):
|
|
# * :clockwise, 1, -3, etc.: "turn right" - first row becomes last column
|
|
# * :half_turn, 2, -2, etc.: first row becomes last row, elements in reverse order
|
|
# * :counter_clockwise, -1, 3: "turn left" - first row becomes first column
|
|
# (but with elements in reverse order)
|
|
#
|
|
# m = Matrix[ [1, 2], [3, 4] ]
|
|
# r = m.rotate_entries(:clockwise)
|
|
# # => Matrix[[3, 1], [4, 2]]
|
|
#
|
|
# source://matrix//lib/matrix.rb#1473
|
|
def rotate_entries(rotation = T.unsafe(nil)); end
|
|
|
|
# Returns a matrix with entries rounded to the given precision
|
|
# (see Float#round)
|
|
#
|
|
# source://matrix//lib/matrix.rb#1493
|
|
def round(ndigits = T.unsafe(nil)); end
|
|
|
|
# Returns row vector number +i+ of the matrix as a Vector (starting at 0 like
|
|
# an array). When a block is given, the elements of that vector are iterated.
|
|
#
|
|
# source://matrix//lib/matrix.rb#463
|
|
def row(i, &block); end
|
|
|
|
# Returns the number of rows.
|
|
#
|
|
# source://matrix//lib/matrix.rb#448
|
|
def row_count; end
|
|
|
|
# Returns the number of rows.
|
|
#
|
|
# source://matrix//lib/matrix.rb#448
|
|
def row_size; end
|
|
|
|
# Returns an array of the row vectors of the matrix. See Vector.
|
|
#
|
|
# source://matrix//lib/matrix.rb#1660
|
|
def row_vectors; end
|
|
|
|
# Returns +true+ if this is a singular matrix.
|
|
#
|
|
# @return [Boolean]
|
|
#
|
|
# source://matrix//lib/matrix.rb#946
|
|
def singular?; end
|
|
|
|
# Returns +true+ if this is an antisymmetric matrix.
|
|
# Raises an error if matrix is not square.
|
|
#
|
|
# @raise [ErrDimensionMismatch]
|
|
# @return [Boolean]
|
|
#
|
|
# source://matrix//lib/matrix.rb#973
|
|
def skew_symmetric?; end
|
|
|
|
# Returns +true+ if this is a square matrix.
|
|
#
|
|
# @return [Boolean]
|
|
#
|
|
# source://matrix//lib/matrix.rb#953
|
|
def square?; end
|
|
|
|
# Returns +true+ if this is a symmetric matrix.
|
|
# Raises an error if matrix is not square.
|
|
#
|
|
# @raise [ErrDimensionMismatch]
|
|
# @return [Boolean]
|
|
#
|
|
# source://matrix//lib/matrix.rb#961
|
|
def symmetric?; end
|
|
|
|
# Returns the transpose of the matrix.
|
|
# Matrix[[1,2], [3,4], [5,6]]
|
|
# # => 1 2
|
|
# # 3 4
|
|
# # 5 6
|
|
# Matrix[[1,2], [3,4], [5,6]].transpose
|
|
# # => 1 3 5
|
|
# # 2 4 6
|
|
#
|
|
# source://matrix//lib/matrix.rb#1520
|
|
def t; end
|
|
|
|
# Returns an array of arrays that describe the rows of the matrix.
|
|
#
|
|
# source://matrix//lib/matrix.rb#1685
|
|
def to_a; end
|
|
|
|
# Explicit conversion to a Matrix. Returns self
|
|
#
|
|
# source://matrix//lib/matrix.rb#1678
|
|
def to_matrix; end
|
|
|
|
# Overrides Object#to_s
|
|
#
|
|
# source://matrix//lib/matrix.rb#1720
|
|
def to_s; end
|
|
|
|
# Returns the trace (sum of diagonal elements) of the matrix.
|
|
# Matrix[[7,6], [3,9]].trace
|
|
# # => 16
|
|
#
|
|
# @raise [ErrDimensionMismatch]
|
|
#
|
|
# source://matrix//lib/matrix.rb#1502
|
|
def tr; end
|
|
|
|
# Returns the trace (sum of diagonal elements) of the matrix.
|
|
# Matrix[[7,6], [3,9]].trace
|
|
# # => 16
|
|
#
|
|
# @raise [ErrDimensionMismatch]
|
|
#
|
|
# source://matrix//lib/matrix.rb#1502
|
|
def trace; end
|
|
|
|
# Returns the transpose of the matrix.
|
|
# Matrix[[1,2], [3,4], [5,6]]
|
|
# # => 1 2
|
|
# # 3 4
|
|
# # 5 6
|
|
# Matrix[[1,2], [3,4], [5,6]].transpose
|
|
# # => 1 3 5
|
|
# # 2 4 6
|
|
#
|
|
# source://matrix//lib/matrix.rb#1520
|
|
def transpose; end
|
|
|
|
# Returns +true+ if this is a unitary matrix
|
|
# Raises an error if matrix is not square.
|
|
#
|
|
# @raise [ErrDimensionMismatch]
|
|
# @return [Boolean]
|
|
#
|
|
# source://matrix//lib/matrix.rb#986
|
|
def unitary?; end
|
|
|
|
# Returns +true+ if this is an upper triangular matrix.
|
|
#
|
|
# @return [Boolean]
|
|
#
|
|
# source://matrix//lib/matrix.rb#1003
|
|
def upper_triangular?; end
|
|
|
|
# Returns a new matrix resulting by stacking vertically
|
|
# the receiver with the given matrices
|
|
#
|
|
# x = Matrix[[1, 2], [3, 4]]
|
|
# y = Matrix[[5, 6], [7, 8]]
|
|
# x.vstack(y) # => Matrix[[1, 2], [3, 4], [5, 6], [7, 8]]
|
|
#
|
|
# source://matrix//lib/matrix.rb#1534
|
|
def vstack(*matrices); end
|
|
|
|
# Returns +true+ if this is a matrix with only zero elements
|
|
#
|
|
# @return [Boolean]
|
|
#
|
|
# source://matrix//lib/matrix.rb#1010
|
|
def zero?; end
|
|
|
|
protected
|
|
|
|
# source://matrix//lib/matrix.rb#1257
|
|
def power_int(exp); end
|
|
|
|
# Returns the value of attribute rows.
|
|
#
|
|
# source://matrix//lib/matrix.rb#69
|
|
def rows; end
|
|
|
|
private
|
|
|
|
# source://matrix//lib/matrix.rb#376
|
|
def check_int(val, direction); end
|
|
|
|
# Returns range or nil
|
|
#
|
|
# source://matrix//lib/matrix.rb#370
|
|
def check_range(val, direction); end
|
|
|
|
# Private. Use Matrix#determinant
|
|
#
|
|
# Returns the determinant of the matrix, using
|
|
# Bareiss' multistep integer-preserving gaussian elimination.
|
|
# It has the same computational cost order O(n^3) as standard Gaussian elimination.
|
|
# Intermediate results are fraction free and of lower complexity.
|
|
# A matrix of Integers will have thus intermediate results that are also Integers,
|
|
# with smaller bignums (if any), while a matrix of Float will usually have
|
|
# intermediate results with better precision.
|
|
#
|
|
# source://matrix//lib/matrix.rb#1368
|
|
def determinant_bareiss; end
|
|
|
|
# Called for dup & clone.
|
|
#
|
|
# source://matrix//lib/matrix.rb#1036
|
|
def initialize_copy(m); end
|
|
|
|
# source://matrix//lib/matrix.rb#1184
|
|
def inverse_from(src); end
|
|
|
|
# source://matrix//lib/matrix.rb#330
|
|
def new_matrix(rows, column_count = T.unsafe(nil)); end
|
|
|
|
# @raise [ErrDimensionMismatch]
|
|
#
|
|
# source://matrix//lib/matrix.rb#432
|
|
def set_col_range(row, col_range, value); end
|
|
|
|
# source://matrix//lib/matrix.rb#425
|
|
def set_column_vector(row_range, col, value); end
|
|
|
|
# :call-seq:
|
|
# matrix[range, range] = matrix/element
|
|
# matrix[range, integer] = vector/column_matrix/element
|
|
# matrix[integer, range] = vector/row_matrix/element
|
|
# matrix[integer, integer] = element
|
|
#
|
|
# Set element or elements of matrix.
|
|
#
|
|
# @raise [FrozenError]
|
|
#
|
|
# source://matrix//lib/matrix.rb#351
|
|
def set_component(i, j, v); end
|
|
|
|
# :call-seq:
|
|
# matrix[range, range] = matrix/element
|
|
# matrix[range, integer] = vector/column_matrix/element
|
|
# matrix[integer, range] = vector/row_matrix/element
|
|
# matrix[integer, integer] = element
|
|
#
|
|
# Set element or elements of matrix.
|
|
#
|
|
# @raise [FrozenError]
|
|
#
|
|
# source://matrix//lib/matrix.rb#351
|
|
def set_element(i, j, v); end
|
|
|
|
# source://matrix//lib/matrix.rb#387
|
|
def set_row_and_col_range(row_range, col_range, value); end
|
|
|
|
# source://matrix//lib/matrix.rb#411
|
|
def set_row_range(row_range, col, value); end
|
|
|
|
# @raise [ErrDimensionMismatch]
|
|
#
|
|
# source://matrix//lib/matrix.rb#381
|
|
def set_value(row, col, value); end
|
|
|
|
class << self
|
|
# Creates an +n+ by +n+ identity matrix.
|
|
# Matrix.identity(2)
|
|
# # => 1 0
|
|
# # 0 1
|
|
#
|
|
# source://matrix//lib/matrix.rb#171
|
|
def I(n); end
|
|
|
|
# Creates a matrix where each argument is a row.
|
|
# Matrix[ [25, 93], [-1, 66] ]
|
|
# # => 25 93
|
|
# # -1 66
|
|
#
|
|
# source://matrix//lib/matrix.rb#78
|
|
def [](*rows); end
|
|
|
|
# Creates a matrix of size +row_count+ x +column_count+.
|
|
# It fills the values by calling the given block,
|
|
# passing the current row and column.
|
|
# Returns an enumerator if no block is given.
|
|
#
|
|
# m = Matrix.build(2, 4) {|row, col| col - row }
|
|
# # => Matrix[[0, 1, 2, 3], [-1, 0, 1, 2]]
|
|
# m = Matrix.build(3) { rand }
|
|
# # => a 3x3 matrix with random elements
|
|
#
|
|
# @raise [ArgumentError]
|
|
#
|
|
# source://matrix//lib/matrix.rb#123
|
|
def build(row_count, column_count = T.unsafe(nil)); end
|
|
|
|
# Creates a single-column matrix where the values of that column are as given
|
|
# in +column+.
|
|
# Matrix.column_vector([4,5,6])
|
|
# # => 4
|
|
# # 5
|
|
# # 6
|
|
#
|
|
# source://matrix//lib/matrix.rb#209
|
|
def column_vector(column); end
|
|
|
|
# Creates a matrix using +columns+ as an array of column vectors.
|
|
# Matrix.columns([[25, 93], [-1, 66]])
|
|
# # => 25 -1
|
|
# # 93 66
|
|
#
|
|
# source://matrix//lib/matrix.rb#108
|
|
def columns(columns); end
|
|
|
|
# :call-seq:
|
|
# Matrix.combine(*matrices) { |*elements| ... }
|
|
#
|
|
# Create a matrix by combining matrices entrywise, using the given block
|
|
#
|
|
# x = Matrix[[6, 6], [4, 4]]
|
|
# y = Matrix[[1, 2], [3, 4]]
|
|
# Matrix.combine(x, y) {|a, b| a - b} # => Matrix[[5, 4], [1, 0]]
|
|
#
|
|
# source://matrix//lib/matrix.rb#288
|
|
def combine(*matrices); end
|
|
|
|
# Creates a matrix where the diagonal elements are composed of +values+.
|
|
# Matrix.diagonal(9, 5, -3)
|
|
# # => 9 0 0
|
|
# # 0 5 0
|
|
# # 0 0 -3
|
|
#
|
|
# source://matrix//lib/matrix.rb#143
|
|
def diagonal(*values); end
|
|
|
|
# Creates a empty matrix of +row_count+ x +column_count+.
|
|
# At least one of +row_count+ or +column_count+ must be 0.
|
|
#
|
|
# m = Matrix.empty(2, 0)
|
|
# m == Matrix[ [], [] ]
|
|
# # => true
|
|
# n = Matrix.empty(0, 3)
|
|
# n == Matrix.columns([ [], [], [] ])
|
|
# # => true
|
|
# m * n
|
|
# # => Matrix[[0, 0, 0], [0, 0, 0]]
|
|
#
|
|
# @raise [ArgumentError]
|
|
#
|
|
# source://matrix//lib/matrix.rb#227
|
|
def empty(row_count = T.unsafe(nil), column_count = T.unsafe(nil)); end
|
|
|
|
# Create a matrix by stacking matrices horizontally
|
|
#
|
|
# x = Matrix[[1, 2], [3, 4]]
|
|
# y = Matrix[[5, 6], [7, 8]]
|
|
# Matrix.hstack(x, y) # => Matrix[[1, 2, 5, 6], [3, 4, 7, 8]]
|
|
#
|
|
# source://matrix//lib/matrix.rb#262
|
|
def hstack(x, *matrices); end
|
|
|
|
# Creates an +n+ by +n+ identity matrix.
|
|
# Matrix.identity(2)
|
|
# # => 1 0
|
|
# # 0 1
|
|
#
|
|
# source://matrix//lib/matrix.rb#171
|
|
def identity(n); end
|
|
|
|
# Creates a single-row matrix where the values of that row are as given in
|
|
# +row+.
|
|
# Matrix.row_vector([4,5,6])
|
|
# # => 4 5 6
|
|
#
|
|
# source://matrix//lib/matrix.rb#196
|
|
def row_vector(row); end
|
|
|
|
# Creates a matrix where +rows+ is an array of arrays, each of which is a row
|
|
# of the matrix. If the optional argument +copy+ is false, use the given
|
|
# arrays as the internal structure of the matrix without copying.
|
|
# Matrix.rows([[25, 93], [-1, 66]])
|
|
# # => 25 93
|
|
# # -1 66
|
|
#
|
|
# source://matrix//lib/matrix.rb#90
|
|
def rows(rows, copy = T.unsafe(nil)); end
|
|
|
|
# Creates an +n+ by +n+ diagonal matrix where each diagonal element is
|
|
# +value+.
|
|
# Matrix.scalar(2, 5)
|
|
# # => 5 0
|
|
# # 0 5
|
|
#
|
|
# source://matrix//lib/matrix.rb#161
|
|
def scalar(n, value); end
|
|
|
|
# Creates an +n+ by +n+ identity matrix.
|
|
# Matrix.identity(2)
|
|
# # => 1 0
|
|
# # 0 1
|
|
#
|
|
# source://matrix//lib/matrix.rb#171
|
|
def unit(n); end
|
|
|
|
# Create a matrix by stacking matrices vertically
|
|
#
|
|
# x = Matrix[[1, 2], [3, 4]]
|
|
# y = Matrix[[5, 6], [7, 8]]
|
|
# Matrix.vstack(x, y) # => Matrix[[1, 2], [3, 4], [5, 6], [7, 8]]
|
|
#
|
|
# source://matrix//lib/matrix.rb#241
|
|
def vstack(x, *matrices); end
|
|
|
|
# Creates a zero matrix.
|
|
# Matrix.zero(2)
|
|
# # => 0 0
|
|
# # 0 0
|
|
#
|
|
# source://matrix//lib/matrix.rb#185
|
|
def zero(row_count, column_count = T.unsafe(nil)); end
|
|
end
|
|
end
|
|
|
|
# source://matrix//lib/matrix.rb#1768
|
|
module Matrix::CoercionHelper
|
|
private
|
|
|
|
# Applies the operator +oper+ with argument +obj+
|
|
# through coercion of +obj+
|
|
#
|
|
# source://matrix//lib/matrix.rb#1773
|
|
def apply_through_coercion(obj, oper); end
|
|
|
|
class << self
|
|
# source://matrix//lib/matrix.rb#1820
|
|
def check_int(val, count, kind); end
|
|
|
|
# Returns `nil` for non Ranges
|
|
# Checks range validity, return canonical range with 0 <= begin <= end < count
|
|
#
|
|
# source://matrix//lib/matrix.rb#1810
|
|
def check_range(val, count, kind); end
|
|
|
|
# Helper method to coerce a value into a specific class.
|
|
# Raises a TypeError if the coercion fails or the returned value
|
|
# is not of the right class.
|
|
# (from Rubinius)
|
|
#
|
|
# @raise [TypeError]
|
|
#
|
|
# source://matrix//lib/matrix.rb#1787
|
|
def coerce_to(obj, cls, meth); end
|
|
|
|
# source://matrix//lib/matrix.rb#1800
|
|
def coerce_to_int(obj); end
|
|
|
|
# source://matrix//lib/matrix.rb#1804
|
|
def coerce_to_matrix(obj); end
|
|
end
|
|
end
|
|
|
|
# Private helper modules
|
|
#
|
|
# source://matrix//lib/matrix.rb#1743
|
|
module Matrix::ConversionHelper
|
|
private
|
|
|
|
# source://matrix//lib/matrix.rb#1748
|
|
def convert_to_array(obj, copy = T.unsafe(nil)); end
|
|
end
|
|
|
|
# Eigenvalues and eigenvectors of a real matrix.
|
|
#
|
|
# Computes the eigenvalues and eigenvectors of a matrix A.
|
|
#
|
|
# If A is diagonalizable, this provides matrices V and D
|
|
# such that A = V*D*V.inv, where D is the diagonal matrix with entries
|
|
# equal to the eigenvalues and V is formed by the eigenvectors.
|
|
#
|
|
# If A is symmetric, then V is orthogonal and thus A = V*D*V.t
|
|
#
|
|
# source://matrix//lib/matrix/eigenvalue_decomposition.rb#15
|
|
class Matrix::EigenvalueDecomposition
|
|
# Constructs the eigenvalue decomposition for a square matrix +A+
|
|
#
|
|
# @raise [TypeError]
|
|
# @return [EigenvalueDecomposition] a new instance of EigenvalueDecomposition
|
|
#
|
|
# source://matrix//lib/matrix/eigenvalue_decomposition.rb#19
|
|
def initialize(a); end
|
|
|
|
# Returns the block diagonal eigenvalue matrix +D+
|
|
#
|
|
# source://matrix//lib/matrix/eigenvalue_decomposition.rb#73
|
|
def d; end
|
|
|
|
# Returns the block diagonal eigenvalue matrix +D+
|
|
#
|
|
# source://matrix//lib/matrix/eigenvalue_decomposition.rb#73
|
|
def eigenvalue_matrix; end
|
|
|
|
# Returns the eigenvalues in an array
|
|
#
|
|
# source://matrix//lib/matrix/eigenvalue_decomposition.rb#59
|
|
def eigenvalues; end
|
|
|
|
# Returns the eigenvector matrix +V+
|
|
#
|
|
# source://matrix//lib/matrix/eigenvalue_decomposition.rb#43
|
|
def eigenvector_matrix; end
|
|
|
|
# Returns the inverse of the eigenvector matrix +V+
|
|
#
|
|
# source://matrix//lib/matrix/eigenvalue_decomposition.rb#50
|
|
def eigenvector_matrix_inv; end
|
|
|
|
# Returns an array of the eigenvectors
|
|
#
|
|
# source://matrix//lib/matrix/eigenvalue_decomposition.rb#67
|
|
def eigenvectors; end
|
|
|
|
# Returns [eigenvector_matrix, eigenvalue_matrix, eigenvector_matrix_inv]
|
|
#
|
|
# source://matrix//lib/matrix/eigenvalue_decomposition.rb#80
|
|
def to_a; end
|
|
|
|
# Returns [eigenvector_matrix, eigenvalue_matrix, eigenvector_matrix_inv]
|
|
#
|
|
# source://matrix//lib/matrix/eigenvalue_decomposition.rb#80
|
|
def to_ary; end
|
|
|
|
# Returns the eigenvector matrix +V+
|
|
#
|
|
# source://matrix//lib/matrix/eigenvalue_decomposition.rb#43
|
|
def v; end
|
|
|
|
# Returns the inverse of the eigenvector matrix +V+
|
|
#
|
|
# source://matrix//lib/matrix/eigenvalue_decomposition.rb#50
|
|
def v_inv; end
|
|
|
|
private
|
|
|
|
# source://matrix//lib/matrix/eigenvalue_decomposition.rb#86
|
|
def build_eigenvectors; end
|
|
|
|
# Complex scalar division.
|
|
#
|
|
# source://matrix//lib/matrix/eigenvalue_decomposition.rb#102
|
|
def cdiv(xr, xi, yr, yi); end
|
|
|
|
# Symmetric tridiagonal QL algorithm.
|
|
#
|
|
# source://matrix//lib/matrix/eigenvalue_decomposition.rb#235
|
|
def diagonalize; end
|
|
|
|
# Nonsymmetric reduction from Hessenberg to real Schur form.
|
|
#
|
|
# source://matrix//lib/matrix/eigenvalue_decomposition.rb#446
|
|
def hessenberg_to_real_schur; end
|
|
|
|
# Nonsymmetric reduction to Hessenberg form.
|
|
#
|
|
# source://matrix//lib/matrix/eigenvalue_decomposition.rb#354
|
|
def reduce_to_hessenberg; end
|
|
|
|
# Symmetric Householder reduction to tridiagonal form.
|
|
#
|
|
# source://matrix//lib/matrix/eigenvalue_decomposition.rb#117
|
|
def tridiagonalize; end
|
|
end
|
|
|
|
# For an m-by-n matrix A with m >= n, the LU decomposition is an m-by-n
|
|
# unit lower triangular matrix L, an n-by-n upper triangular matrix U,
|
|
# and a m-by-m permutation matrix P so that L*U = P*A.
|
|
# If m < n, then L is m-by-m and U is m-by-n.
|
|
#
|
|
# The LUP decomposition with pivoting always exists, even if the matrix is
|
|
# singular, so the constructor will never fail. The primary use of the
|
|
# LU decomposition is in the solution of square systems of simultaneous
|
|
# linear equations. This will fail if singular? returns true.
|
|
#
|
|
# source://matrix//lib/matrix/lup_decomposition.rb#17
|
|
class Matrix::LUPDecomposition
|
|
include ::Matrix::ConversionHelper
|
|
|
|
# @raise [TypeError]
|
|
# @return [LUPDecomposition] a new instance of LUPDecomposition
|
|
#
|
|
# source://matrix//lib/matrix/lup_decomposition.rb#154
|
|
def initialize(a); end
|
|
|
|
# Returns the determinant of +A+, calculated efficiently
|
|
# from the factorization.
|
|
#
|
|
# source://matrix//lib/matrix/lup_decomposition.rb#79
|
|
def det; end
|
|
|
|
# Returns the determinant of +A+, calculated efficiently
|
|
# from the factorization.
|
|
#
|
|
# source://matrix//lib/matrix/lup_decomposition.rb#79
|
|
def determinant; end
|
|
|
|
# source://matrix//lib/matrix/lup_decomposition.rb#22
|
|
def l; end
|
|
|
|
# Returns the permutation matrix +P+
|
|
#
|
|
# source://matrix//lib/matrix/lup_decomposition.rb#48
|
|
def p; end
|
|
|
|
# Returns the pivoting indices
|
|
#
|
|
# source://matrix//lib/matrix/lup_decomposition.rb#63
|
|
def pivots; end
|
|
|
|
# Returns +true+ if +U+, and hence +A+, is singular.
|
|
#
|
|
# @return [Boolean]
|
|
#
|
|
# source://matrix//lib/matrix/lup_decomposition.rb#67
|
|
def singular?; end
|
|
|
|
# Returns +m+ so that <tt>A*m = b</tt>,
|
|
# or equivalently so that <tt>L*U*m = P*b</tt>
|
|
# +b+ can be a Matrix or a Vector
|
|
#
|
|
# source://matrix//lib/matrix/lup_decomposition.rb#95
|
|
def solve(b); end
|
|
|
|
# Returns +L+, +U+, +P+ in an array
|
|
#
|
|
# source://matrix//lib/matrix/lup_decomposition.rb#56
|
|
def to_a; end
|
|
|
|
# Returns +L+, +U+, +P+ in an array
|
|
#
|
|
# source://matrix//lib/matrix/lup_decomposition.rb#56
|
|
def to_ary; end
|
|
|
|
# Returns the upper triangular factor +U+
|
|
#
|
|
# source://matrix//lib/matrix/lup_decomposition.rb#36
|
|
def u; end
|
|
end
|
|
|
|
# source://matrix//lib/matrix.rb#666
|
|
Matrix::SELECTORS = T.let(T.unsafe(nil), Hash)
|
|
|
|
# Private CLASS
|
|
#
|
|
# source://matrix//lib/matrix.rb#1833
|
|
class Matrix::Scalar < ::Numeric
|
|
include ::ExceptionForMatrix
|
|
include ::Matrix::CoercionHelper
|
|
|
|
# @return [Scalar] a new instance of Scalar
|
|
#
|
|
# source://matrix//lib/matrix.rb#1837
|
|
def initialize(value); end
|
|
|
|
# source://matrix//lib/matrix.rb#1864
|
|
def *(other); end
|
|
|
|
# source://matrix//lib/matrix.rb#1888
|
|
def **(other); end
|
|
|
|
# ARITHMETIC
|
|
#
|
|
# source://matrix//lib/matrix.rb#1842
|
|
def +(other); end
|
|
|
|
# source://matrix//lib/matrix.rb#1853
|
|
def -(other); end
|
|
|
|
# source://matrix//lib/matrix.rb#1875
|
|
def /(other); end
|
|
end
|
|
|
|
# source://matrix//lib/matrix/version.rb#4
|
|
Matrix::VERSION = T.let(T.unsafe(nil), String)
|
|
|
|
# The +Vector+ class represents a mathematical vector, which is useful in its own right, and
|
|
# also constitutes a row or column of a Matrix.
|
|
#
|
|
# == Method Catalogue
|
|
#
|
|
# To create a Vector:
|
|
# * Vector.[](*array)
|
|
# * Vector.elements(array, copy = true)
|
|
# * Vector.basis(size: n, index: k)
|
|
# * Vector.zero(n)
|
|
#
|
|
# To access elements:
|
|
# * #[](i)
|
|
#
|
|
# To set elements:
|
|
# * #[]=(i, v)
|
|
#
|
|
# To enumerate the elements:
|
|
# * #each2(v)
|
|
# * #collect2(v)
|
|
#
|
|
# Properties of vectors:
|
|
# * #angle_with(v)
|
|
# * Vector.independent?(*vs)
|
|
# * #independent?(*vs)
|
|
# * #zero?
|
|
#
|
|
# Vector arithmetic:
|
|
# * #*(x) "is matrix or number"
|
|
# * #+(v)
|
|
# * #-(v)
|
|
# * #/(v)
|
|
# * #+@
|
|
# * #-@
|
|
#
|
|
# Vector functions:
|
|
# * #inner_product(v), #dot(v)
|
|
# * #cross_product(v), #cross(v)
|
|
# * #collect
|
|
# * #collect!
|
|
# * #magnitude
|
|
# * #map
|
|
# * #map!
|
|
# * #map2(v)
|
|
# * #norm
|
|
# * #normalize
|
|
# * #r
|
|
# * #round
|
|
# * #size
|
|
#
|
|
# Conversion to other data types:
|
|
# * #covector
|
|
# * #to_a
|
|
# * #coerce(other)
|
|
#
|
|
# String representations:
|
|
# * #to_s
|
|
# * #inspect
|
|
#
|
|
# source://matrix//lib/matrix.rb#1966
|
|
class Vector
|
|
include ::ExceptionForMatrix
|
|
include ::Enumerable
|
|
include ::Matrix::CoercionHelper
|
|
extend ::Matrix::ConversionHelper
|
|
|
|
# Vector.new is private; use Vector[] or Vector.elements to create.
|
|
#
|
|
# @return [Vector] a new instance of Vector
|
|
#
|
|
# source://matrix//lib/matrix.rb#2020
|
|
def initialize(array); end
|
|
|
|
# Multiplies the vector by +x+, where +x+ is a number or a matrix.
|
|
#
|
|
# source://matrix//lib/matrix.rb#2222
|
|
def *(x); end
|
|
|
|
# Vector addition.
|
|
#
|
|
# source://matrix//lib/matrix.rb#2239
|
|
def +(v); end
|
|
|
|
# source://matrix//lib/matrix.rb#2287
|
|
def +@; end
|
|
|
|
# Vector subtraction.
|
|
#
|
|
# source://matrix//lib/matrix.rb#2257
|
|
def -(v); end
|
|
|
|
# source://matrix//lib/matrix.rb#2291
|
|
def -@; end
|
|
|
|
# Vector division.
|
|
#
|
|
# source://matrix//lib/matrix.rb#2275
|
|
def /(x); end
|
|
|
|
# Returns whether the two vectors have the same elements in the same order.
|
|
#
|
|
# source://matrix//lib/matrix.rb#2198
|
|
def ==(other); end
|
|
|
|
# :call-seq:
|
|
# vector[range]
|
|
# vector[integer]
|
|
#
|
|
# Returns element or elements of the vector.
|
|
#
|
|
# source://matrix//lib/matrix.rb#2034
|
|
def [](i); end
|
|
|
|
# :call-seq:
|
|
# vector[range] = new_vector
|
|
# vector[range] = row_matrix
|
|
# vector[range] = new_element
|
|
# vector[integer] = new_element
|
|
#
|
|
# Set element or elements of vector.
|
|
#
|
|
# @raise [FrozenError]
|
|
#
|
|
# source://matrix//lib/matrix.rb#2049
|
|
def []=(i, v); end
|
|
|
|
# Returns an angle with another vector. Result is within the [0..Math::PI].
|
|
# Vector[1,0].angle_with(Vector[0,1])
|
|
# # => Math::PI / 2
|
|
#
|
|
# @raise [TypeError]
|
|
#
|
|
# source://matrix//lib/matrix.rb#2407
|
|
def angle_with(v); end
|
|
|
|
# The coerce method provides support for Ruby type coercion.
|
|
# This coercion mechanism is used by Ruby to handle mixed-type
|
|
# numeric operations: it is intended to find a compatible common
|
|
# type between the two operands of the operator.
|
|
# See also Numeric#coerce.
|
|
#
|
|
# source://matrix//lib/matrix.rb#2467
|
|
def coerce(other); end
|
|
|
|
# Like Array#collect.
|
|
#
|
|
# source://matrix//lib/matrix.rb#2351
|
|
def collect(&block); end
|
|
|
|
# Like Array#collect!
|
|
#
|
|
# @raise [FrozenError]
|
|
#
|
|
# source://matrix//lib/matrix.rb#2361
|
|
def collect!(&block); end
|
|
|
|
# Collects (as in Enumerable#collect) over the elements of this vector and +v+
|
|
# in conjunction.
|
|
#
|
|
# @raise [TypeError]
|
|
#
|
|
# source://matrix//lib/matrix.rb#2123
|
|
def collect2(v); end
|
|
|
|
# :call-seq:
|
|
# vector[range]
|
|
# vector[integer]
|
|
#
|
|
# Returns element or elements of the vector.
|
|
#
|
|
# source://matrix//lib/matrix.rb#2034
|
|
def component(i); end
|
|
|
|
# Creates a single-row matrix from this vector.
|
|
#
|
|
# source://matrix//lib/matrix.rb#2427
|
|
def covector; end
|
|
|
|
# Returns the cross product of this vector with the others.
|
|
# Vector[1, 0, 0].cross_product Vector[0, 1, 0] # => Vector[0, 0, 1]
|
|
#
|
|
# It is generalized to other dimensions to return a vector perpendicular
|
|
# to the arguments.
|
|
# Vector[1, 2].cross_product # => Vector[-2, 1]
|
|
# Vector[1, 0, 0, 0].cross_product(
|
|
# Vector[0, 1, 0, 0],
|
|
# Vector[0, 0, 1, 0]
|
|
# ) #=> Vector[0, 0, 0, 1]
|
|
#
|
|
# @raise [ErrOperationNotDefined]
|
|
#
|
|
# source://matrix//lib/matrix.rb#2326
|
|
def cross(*vs); end
|
|
|
|
# Returns the cross product of this vector with the others.
|
|
# Vector[1, 0, 0].cross_product Vector[0, 1, 0] # => Vector[0, 0, 1]
|
|
#
|
|
# It is generalized to other dimensions to return a vector perpendicular
|
|
# to the arguments.
|
|
# Vector[1, 2].cross_product # => Vector[-2, 1]
|
|
# Vector[1, 0, 0, 0].cross_product(
|
|
# Vector[0, 1, 0, 0],
|
|
# Vector[0, 0, 1, 0]
|
|
# ) #=> Vector[0, 0, 0, 1]
|
|
#
|
|
# @raise [ErrOperationNotDefined]
|
|
#
|
|
# source://matrix//lib/matrix.rb#2326
|
|
def cross_product(*vs); end
|
|
|
|
# Returns the inner product of this vector with the other.
|
|
# Vector[4,7].inner_product Vector[10,1] # => 47
|
|
#
|
|
# @raise [ErrDimensionMismatch]
|
|
#
|
|
# source://matrix//lib/matrix.rb#2303
|
|
def dot(v); end
|
|
|
|
# Iterate over the elements of this vector
|
|
#
|
|
# source://matrix//lib/matrix.rb#2100
|
|
def each(&block); end
|
|
|
|
# Iterate over the elements of this vector and +v+ in conjunction.
|
|
#
|
|
# @raise [TypeError]
|
|
#
|
|
# source://matrix//lib/matrix.rb#2109
|
|
def each2(v); end
|
|
|
|
# :call-seq:
|
|
# vector[range]
|
|
# vector[integer]
|
|
#
|
|
# Returns element or elements of the vector.
|
|
#
|
|
# source://matrix//lib/matrix.rb#2034
|
|
def element(i); end
|
|
|
|
# source://matrix//lib/matrix.rb#2445
|
|
def elements_to_f; end
|
|
|
|
# source://matrix//lib/matrix.rb#2450
|
|
def elements_to_i; end
|
|
|
|
# source://matrix//lib/matrix.rb#2455
|
|
def elements_to_r; end
|
|
|
|
# @return [Boolean]
|
|
#
|
|
# source://matrix//lib/matrix.rb#2203
|
|
def eql?(other); end
|
|
|
|
# Makes the matrix frozen and Ractor-shareable
|
|
#
|
|
# source://matrix//lib/matrix.rb#2177
|
|
def freeze; end
|
|
|
|
# Returns a hash-code for the vector.
|
|
#
|
|
# source://matrix//lib/matrix.rb#2211
|
|
def hash; end
|
|
|
|
# Returns whether all of vectors are linearly independent.
|
|
#
|
|
# Vector[1,0].independent?(Vector[0,1])
|
|
# # => true
|
|
#
|
|
# Vector[1,2].independent?(Vector[2,4])
|
|
# # => false
|
|
#
|
|
# @return [Boolean]
|
|
#
|
|
# source://matrix//lib/matrix.rb#2163
|
|
def independent?(*vs); end
|
|
|
|
# Returns the inner product of this vector with the other.
|
|
# Vector[4,7].inner_product Vector[10,1] # => 47
|
|
#
|
|
# @raise [ErrDimensionMismatch]
|
|
#
|
|
# source://matrix//lib/matrix.rb#2303
|
|
def inner_product(v); end
|
|
|
|
# Overrides Object#inspect
|
|
#
|
|
# source://matrix//lib/matrix.rb#2490
|
|
def inspect; end
|
|
|
|
# Returns the modulus (Pythagorean distance) of the vector.
|
|
# Vector[5,8,2].r # => 9.643650761
|
|
#
|
|
# source://matrix//lib/matrix.rb#2373
|
|
def magnitude; end
|
|
|
|
# Like Array#collect.
|
|
#
|
|
# source://matrix//lib/matrix.rb#2351
|
|
def map(&block); end
|
|
|
|
# Like Array#collect!
|
|
#
|
|
# @raise [FrozenError]
|
|
#
|
|
# source://matrix//lib/matrix.rb#2361
|
|
def map!(&block); end
|
|
|
|
# Like Vector#collect2, but returns a Vector instead of an Array.
|
|
#
|
|
# source://matrix//lib/matrix.rb#2382
|
|
def map2(v, &block); end
|
|
|
|
# Returns the modulus (Pythagorean distance) of the vector.
|
|
# Vector[5,8,2].r # => 9.643650761
|
|
#
|
|
# source://matrix//lib/matrix.rb#2373
|
|
def norm; end
|
|
|
|
# Returns a new vector with the same direction but with norm 1.
|
|
# v = Vector[5,8,2].normalize
|
|
# # => Vector[0.5184758473652127, 0.8295613557843402, 0.20739033894608505]
|
|
# v.norm # => 1.0
|
|
#
|
|
# @raise [ZeroVectorError]
|
|
#
|
|
# source://matrix//lib/matrix.rb#2396
|
|
def normalize; end
|
|
|
|
# Returns the modulus (Pythagorean distance) of the vector.
|
|
# Vector[5,8,2].r # => 9.643650761
|
|
#
|
|
# source://matrix//lib/matrix.rb#2373
|
|
def r; end
|
|
|
|
# Returns a vector with entries rounded to the given precision
|
|
# (see Float#round)
|
|
#
|
|
# source://matrix//lib/matrix.rb#2082
|
|
def round(ndigits = T.unsafe(nil)); end
|
|
|
|
# Returns the number of elements in the vector.
|
|
#
|
|
# source://matrix//lib/matrix.rb#2089
|
|
def size; end
|
|
|
|
# Returns the elements of the vector in an array.
|
|
#
|
|
# source://matrix//lib/matrix.rb#2434
|
|
def to_a; end
|
|
|
|
# Return a single-column matrix from this vector
|
|
#
|
|
# source://matrix//lib/matrix.rb#2441
|
|
def to_matrix; end
|
|
|
|
# Overrides Object#to_s
|
|
#
|
|
# source://matrix//lib/matrix.rb#2483
|
|
def to_s; end
|
|
|
|
# Returns whether all elements are zero.
|
|
#
|
|
# @return [Boolean]
|
|
#
|
|
# source://matrix//lib/matrix.rb#2170
|
|
def zero?; end
|
|
|
|
protected
|
|
|
|
# Returns the value of attribute elements.
|
|
#
|
|
# source://matrix//lib/matrix.rb#1974
|
|
def elements; end
|
|
|
|
private
|
|
|
|
# Called for dup & clone.
|
|
#
|
|
# source://matrix//lib/matrix.rb#2185
|
|
def initialize_copy(v); end
|
|
|
|
# :call-seq:
|
|
# vector[range] = new_vector
|
|
# vector[range] = row_matrix
|
|
# vector[range] = new_element
|
|
# vector[integer] = new_element
|
|
#
|
|
# Set element or elements of vector.
|
|
#
|
|
# @raise [FrozenError]
|
|
#
|
|
# source://matrix//lib/matrix.rb#2049
|
|
def set_component(i, v); end
|
|
|
|
# :call-seq:
|
|
# vector[range] = new_vector
|
|
# vector[range] = row_matrix
|
|
# vector[range] = new_element
|
|
# vector[integer] = new_element
|
|
#
|
|
# Set element or elements of vector.
|
|
#
|
|
# @raise [FrozenError]
|
|
#
|
|
# source://matrix//lib/matrix.rb#2049
|
|
def set_element(i, v); end
|
|
|
|
# source://matrix//lib/matrix.rb#2067
|
|
def set_range(range, value); end
|
|
|
|
# source://matrix//lib/matrix.rb#2063
|
|
def set_value(index, value); end
|
|
|
|
class << self
|
|
# Creates a Vector from a list of elements.
|
|
# Vector[7, 4, ...]
|
|
#
|
|
# source://matrix//lib/matrix.rb#1981
|
|
def [](*array); end
|
|
|
|
# Returns a standard basis +n+-vector, where k is the index.
|
|
#
|
|
# Vector.basis(size:, index:) # => Vector[0, 1, 0]
|
|
#
|
|
# @raise [ArgumentError]
|
|
#
|
|
# source://matrix//lib/matrix.rb#1998
|
|
def basis(size:, index:); end
|
|
|
|
# Creates a vector from an Array. The optional second argument specifies
|
|
# whether the array itself or a copy is used internally.
|
|
#
|
|
# source://matrix//lib/matrix.rb#1989
|
|
def elements(array, copy = T.unsafe(nil)); end
|
|
|
|
# Returns whether all of vectors are linearly independent.
|
|
#
|
|
# Vector.independent?(Vector[1,0], Vector[0,1])
|
|
# # => true
|
|
#
|
|
# Vector.independent?(Vector[1,2], Vector[2,4])
|
|
# # => false
|
|
#
|
|
# @return [Boolean]
|
|
#
|
|
# source://matrix//lib/matrix.rb#2145
|
|
def independent?(*vs); end
|
|
|
|
# Return a zero vector.
|
|
#
|
|
# Vector.zero(3) # => Vector[0, 0, 0]
|
|
#
|
|
# @raise [ArgumentError]
|
|
#
|
|
# source://matrix//lib/matrix.rb#2011
|
|
def zero(size); end
|
|
end
|
|
end
|
|
|
|
# source://matrix//lib/matrix.rb#2388
|
|
class Vector::ZeroVectorError < ::StandardError; end
|