public Matrix SolveWith(Matrix v) // Function solves Ax = v in confirmity with solution vector "v"
{
if (rows != cols) throw new MException("The matrix is not square!");
if (rows != v.rows) throw new MException("Wrong number of results in solution vector!");
if (L == null) MakeLU();
Matrix b = new Matrix(rows, 1);
for (int i = 0; i < rows; i++) b[i, 0] = v[pi[i], 0]; // switch two items in "v" due to permutation matrix
Matrix z = SubsForth(L, b);
Matrix x = SubsBack(U, z);
return x;
}