method
rank
v1_9_1_378 -
Show latest stable
- Class:
Matrix
rank()public
Returns the rank of the matrix. Beware that using Float values, probably return faild value. Use Rational values or Matrix#rank_e for getting exact result.
Matrix[[7,6], [3,9]].rank => 2
# File lib/matrix.rb, line 762
def rank
if column_size > row_size
a = transpose.to_a
a_column_size = row_size
a_row_size = column_size
else
a = to_a
a_column_size = column_size
a_row_size = row_size
end
rank = 0
k = 0
begin
if (akk = a[k][k]) == 0
i = k
exists = true
loop do
if (i += 1) > a_row_size - 1
exists = false
break
end
break unless a[i][k] == 0
end
if exists
a[i], a[k] = a[k], a[i]
akk = a[k][k]
else
i = k
exists = true
loop do
if (i += 1) > a_column_size - 1
exists = false
break
end
break unless a[k][i] == 0
end
if exists
k.upto(a_row_size - 1) do |j|
a[j][k], a[j][i] = a[j][i], a[j][k]
end
akk = a[k][k]
else
next
end
end
end
for i in (k + 1)..(a_row_size - 1)
q = a[i][k].quo(akk)
for j in (k + 1)..(a_column_size - 1)
a[i][j] -= a[k][j] * q
end
end
rank += 1
end while (k += 1) <= a_column_size - 1
return rank
end Related methods
- Instance methods
- *
- **
- +
- -
- /
- ==
- []
- clone
- coerce
- collect
- column
- column_size
- column_vectors
- compare_by_row_vectors
- component
- det
- det_e
- determinant
- determinant_e
- element
- elements_to_f
- elements_to_i
- elements_to_r
- eql?
- hash
- inspect
- inv
- inverse
- inverse_from
- map
- minor
- rank
- rank_e
- regular?
- row
- row_size
- row_vectors
- singular?
- square?
- t
- to_a
- to_s
- tr
- trace
- transpose
- Class methods
- I
- []
- column_vector
- columns
- diagonal
- identity
- new
- row_vector
- rows
- scalar
- unit
- zero
- Private methods
-
new -
[]= -
init_rows -
set_component -
set_element