public static double Determinant_NonRecursive(MMatrix A) { double det = 1; if (!A.IsSquared()) throw new MMatrixException("Determinant of a non-square matrix doesn't exist"); A.FactorLU_withP(); for (int i = 0; i < A.row; ++i) det *= A.LU_L[i, i] * A.LU_U[i, i]; det *= Determinant(new MMatrix(A.LU_P)); return det; }
public static void FactorLU(MMatrix squaredMatrix) { if (!squaredMatrix.IsSquared()) throw new MMatrixException("Matrix is non-square. LU factorization impossible."); FactorLU(squaredMatrix, squaredMatrix.row); }
public static double SpectralRadius(MMatrix A) { Vector Eigenvalues = new Vector(); if (!A.IsSquared()) throw new MMatrixException("Matrix must be squared."); Eigenvalues = A.QRIterationBasic(GlobalMath.MAXITER).DiagVector(); Eigenvalues.Sort(true); return Math.Abs(Eigenvalues[0]); }