APIdock / Ruby
/
method

determinant

ruby latest stable - Class: Matrix
determinant()
public

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
# File lib/matrix.rb, line 1103
 def determinant
 Matrix.Raise ErrDimensionMismatch unless square?
 m = @rows
 case row_count
 # Up to 4x4, give result using Laplacian expansion by minors.
 # This will typically be faster, as well as giving good results
 # in case of Floats
 when 0
 +1
 when 1
 + m[0][0]
 when 2
 + m[0][0] * m[1][1] - m[0][1] * m[1][0]
 when 3
 m0, m1, m2 = m
 + m0[0] * m1[1] * m2[2] - m0[0] * m1[2] * m2[1] - m0[1] * m1[0] * m2[2] + m0[1] * m1[2] * m2[0] + m0[2] * m1[0] * m2[1] - m0[2] * m1[1] * m2[0]
 when 4
 m0, m1, m2, m3 = m
 + m0[0] * m1[1] * m2[2] * m3[3] - m0[0] * m1[1] * m2[3] * m3[2] - m0[0] * m1[2] * m2[1] * m3[3] + m0[0] * m1[2] * m2[3] * m3[1] + m0[0] * m1[3] * m2[1] * m3[2] - m0[0] * m1[3] * m2[2] * m3[1] - m0[1] * m1[0] * m2[2] * m3[3] + m0[1] * m1[0] * m2[3] * m3[2] + m0[1] * m1[2] * m2[0] * m3[3] - m0[1] * m1[2] * m2[3] * m3[0] - m0[1] * m1[3] * m2[0] * m3[2] + m0[1] * m1[3] * m2[2] * m3[0] + m0[2] * m1[0] * m2[1] * m3[3] - m0[2] * m1[0] * m2[3] * m3[1] - m0[2] * m1[1] * m2[0] * m3[3] + m0[2] * m1[1] * m2[3] * m3[0] + m0[2] * m1[3] * m2[0] * m3[1] - m0[2] * m1[3] * m2[1] * m3[0] - m0[3] * m1[0] * m2[1] * m3[2] + m0[3] * m1[0] * m2[2] * m3[1] + m0[3] * m1[1] * m2[0] * m3[2] - m0[3] * m1[1] * m2[2] * m3[0] - m0[3] * m1[2] * m2[0] * m3[1] + m0[3] * m1[2] * m2[1] * m3[0]
 else
 # For bigger matrices, use an efficient and general algorithm.
 # Currently, we use the Gauss-Bareiss algorithm
 determinant_bareiss
 end
 end

AltStyle によって変換されたページ (->オリジナル) /