private double Determinant(SquareMatrix m) { double det = 0; if (m.Dimension == 2) { det = (m[0, 0] * m[1, 1]) - (m[1, 0] * m[0, 1]); } else if (m.Dimension == 3) { det = (m[0, 0] * m[1, 1] * m[2, 2]) + (m[0, 1] * m[1, 2] * m[2, 0]) + (m[0, 2] * m[1, 0] * m[2, 1]) - (m[0, 2] * m[1, 1] * m[2, 0]) - (m[0, 1] * m[1, 0] * m[2, 2]) - (m[0, 0] * m[1, 2] * m[2, 1]); } else { try { SquareLUDecomposition lu = m.LUDecomposition(); det = lu.Determinant(); } catch (Exception ex) { det = 0; MC.Other.Logger.LogLow(ex.Message); } } return(det); }
public void doWork() { matrix.Fill((j, i) => array[i, j]); SquareQRDecomposition qr = matrix.QRDecomposition(); SquareLUDecomposition lu = matrix.LUDecomposition(); ColumnVector qrresult = qr.Solve(vector); ColumnVector luresult = lu.Solve(vector); ColumnVector c6 = matrix.Column(6); RowVector r2 = matrix.Row(2); SquareMatrix inv = matrix.Inverse(); ColumnVector result = new ColumnVector(inv.Dimension); for (int i = 0; i < matrix.Dimension; ++i) { for (int j = 0; j < matrix.Dimension; ++j) { result[i] += matrix[i, j] * qrresult[j]; } } }