Anteriormente, en este artículo:
Resolucion de sistemas lineales: método de Gauss-Jordan
habiamos señalado la manera de resolver sistemas lineales por el método de Gauss-Jordan. Con el desarrollo de la Clase Matriz que se encuentra en:
Inversa de Matrices: Clase Matriz
podemos hacer también lo mismo pero de una manera más expedita. Lo que tenemos es que determinar la inversa de la matriz del sistema y multiplicarla por los coeficientes que se encuentran del otro lado de las igualdades. El resultado serán las incógnitas del sistema. Si consideramos el ejemplo aquí expuesto:
Estimación de datos acumulados (englobados) de precipitación: caso mensual
la matriz ampliada del sistema será:
1 1 1 608.9 137.1 -111.5 0 0 171.7 0 -111.5 0
donde las tres primeras columnas representan la matriz del sistema y la última corresponde a los elementos que se encuentran del otro lado de la igualdad. El programa desarrollado fue este:
#include <iostream>
using namespace std;
#include <cstdlib>
#include <iomanip>
#include <cassert>
#include "Matriz.h"
int main() {
system ("clear");
Matriz a(3,3), b(3,1), c(3,1), d(3,3); //Declara objetos de la clase Matriz
int i, j;
double **w, **y;
w = new double* [3]; y = new double* [3];
for (j = 0; j < 3; j++) {
w[j] = new double [3];
}
y[1] = new double [1];
cout << "Introduzca la matriz del sistema (3x3)\n\n";
for(i= 0; i < 3; i++){
for(j= 0; j < 3; j++){
cout << "A[" << i+1 <<"][" << j+1 << "] = ? ";
cin >> w[i][j];
}
}
a.initMatriz(w);
cout << "\n";
cout << "Introduzca el arreglo para ampliar el sistema (matriz 3x1)\n\n";
cin >> b;
d.invermat(w); // Calcula la inversa
c = d * b; // Determina las incognitas del sistema en esta multiplicación de matrices d(3,3) * b(3,1)= c(3,1)
cout << "\nEstas son las incognitas:\n\n";
cout << c; // Imprime las incognitas del sistema de ecuaciones
delete w;
return 0;
}
Después de compilado y ejecutado el programa, la salida que se expone a continuación:
Introduzca la matriz del sistema (3x3) A[1][1] = ? 1 A[1][2] = ? 1 A[1][3] = ? 1 A[2][1] = ? 137.1 A[2][2] = ? -111.5 A[2][3] = ? 0 A[3][1] = ? 171.7 A[3][2] = ? 0 A[3][3] = ? -111.5 Introduzca el arreglo para ampliar el sistema (matriz 3x1) A[1][1] = ? 608.9 A[2][1] = ? 0 A[3][1] = ? 0 Estas son las incognitas: 161.53307 198.62049 248.74644
produce los resultados esperados.
Entradas relacionadas:

Pingback: Resolución de sistemas lineales con Lapackpp |