public string ImBasis() { MyMatrix row_echelon = Clone(); string output = row_echelon.GaussLaTeX(revert: false) + '\n'; LaTeXExport export = new LaTeXExport(1, ",", 1, false, "$$\\text{Im basis}:\\ "); for (int i = 0; i < n; i++) { int j_s = 0; for (; j_s < m && row_echelon[i, j_s] == 0; j_s++) { ; } if (j_s >= m) { break; } export.Add(GetColumn(j_s).GetLaTeX()); } if (export.Empty) { export.Add(GetColumn(0).GetLaTeX()); } return(output + export.Result); }
public string KerBasis() { MyMatrix row_echelon = Clone(); string output = row_echelon.GaussLaTeX() + '\n'; LaTeXExport export = new LaTeXExport(1, ",", 1, false, "$$\\ker\\ \\text{basis}:\\ "); List <int> pivots = new List <int>(); for (int i = 0; i < n; i++) { int j_s = 0; for (; j_s < m && row_echelon[i, j_s] == 0; j_s++) { ; } if (j_s >= m) { break; } pivots.Add(j_s); } int j_free = 0; for (int j = 0; j < m - pivots.Count; j++, j_free++) { for (; pivots.Contains(j_free); j_free++) { ; } MyMatrix basis_el = new MyMatrix(m, 1); basis_el[j_free, 0] = 1; for (int i = 0; i < pivots.Count; i++) { basis_el[pivots[i], 0] = -row_echelon[i, j_free]; } export.Add(basis_el.GetLaTeX()); } if (export.Empty) { export.Add(new MyMatrix(m, 1).GetLaTeX()); } return(output + export.Result); }
public string InverseLaTeX() { if (!IsSquare) { throw new InvalidOperationException("Matrix is not square!"); } if (Determinant == 0) { throw new DivideByZeroException("Determinant zero!"); } MyMatrix tmp = new MyMatrix(n, n * 2); tmp.Set(this); for (int i = 0; i < n; i++) { tmp[i, i + n] = 1; } string output = tmp.GaussLaTeX(n); for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { tmp[i, j] = tmp[i, j + n]; } } tmp.M = n; /*try * { * if (!(tmp * this).Equals(Id)) * throw new Exception(); * } * catch { throw new ArithmeticException("Cannot find inverse matrix!"); }*/ values = tmp.values; return(output); }