private static void InterarMatriz(Matriz m, Action <int, int> action) { for (int i = 0; i < m.Linhas; i++) { for (int j = 0; j < m.Colunas; j++) { action(i, j); } } }
/// <summary> /// Devolve a soma de duas matrizes, se possível. /// </summary> public Matriz Soma(Matriz b) { Matriz matrizSoma = null; if (this.Linhas == b.Linhas && this.Colunas == b.Colunas) { matrizSoma = new Matriz(Linhas, Colunas); InterarMatriz(this, (i, j) => matrizSoma[i, j] = this[i, j] + b[i, j]); } return(matrizSoma); }
private void ComputeParameters() { Matriz inverse = M.Inverse(); Matriz cramer = inverse * B; for (int i = 0; i < Parameters.Length; i++) { Parameters[i].Value = cramer[0, i]; Parameters[i].Error = inverse[i, i]; } }
/// <summary> /// Devolve a multiplicação da matriz pela matriz b, se isso for possível. /// </summary> public Matriz Multiplicacao(Matriz b) { Matriz multiplicacao = null; if (Colunas == b.Linhas) { multiplicacao = new Matriz(Linhas, b.Colunas); for (int i = 0; i < Linhas; i++) { for (int j = 0; j < b.Colunas; j++) { for (int k = 0; k < Colunas; k++) { multiplicacao[i, j] += this[i, k] * b[k, j]; } } } } return(multiplicacao); }
private static bool Comparison(Matriz a, Matriz b) { if (a.Linhas != b.Linhas || a.Colunas != b.Colunas) { return(false); } else { for (int i = 0; i < a.Linhas; i++) { for (int j = 0; j < a.Colunas; j++) { if (a[i, j] != b[i, j]) { return(false); } } } } return(true); }
/// <summary> /// Matriz obtida pela supressão da linha k e da coluna l. /// </summary> public Matriz Menor(int k, int l) { Matriz menor = new Matriz(Linhas - 1, Colunas - 1); int i, j, p, q; for (i = 0, p = 0; i < Linhas; i++) { if (i != k) { for (j = 0, q = 0; j < Colunas; j++) { if (j != l) { menor[p, q] = this[i, j]; q++; } } p++; } } return(menor); }
/// <summary> /// Devolve a subtração de duas matrizes, se possível. /// </summary> public Matriz Subtracao(Matriz b) { return(Soma(b.Oposto())); }