Resolución de sistemas lineales con Lapackpp

Anteriormente, en este artículo:

Resolución de sistemas lineales: Clase Matriz

habiamos señalado la manera de resolver sistemas lineales usando la inversa de la matriz del sistema y multiplicándola por los coeficientes que se encuentran del otro lado de las igualdades. El ejemplo considerado fue el aquí expuesto:

Estimación de datos acumulados (englobados) de precipitación: caso mensual

La matriz ampliada del sistema fue:

   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 procedimiento involucra la determinación de la inversa de la matriz del sistema, la cual hay que multiplicar por los coeficientes que se encuentran del otro lado de las igualdades. El resultado dará lugar a las incógnitas del sistema. Sin embargo, en Lapackpp es posible hacer el cálculo en un sólo paso con diferentes combinaciones de LaLinearSolve. El código, incluyendo ambos procedimientos con Lapckpp, es el siguiente:

#include <iostream>
#include <lapackpp/laslv.h>
#include <lapackpp/blas3pp.h>

using namespace std;

int main(){

double a[] = {1.0,  137.1,  171.7,   // Transpuesta de la Matriz del sistema     
              1.0, -111.5,    0.0,         
              1.0,    0.0, -111.5};  
 
double b[] = {608.9, 0.0, 0.0};

	LaGenMatDouble A(a,3,3), B(b,3,1), C(3,1), D(3,3), E(3,1); // Declaración de objetos 
	
	D = A; // Copia de A porque se destruye mas adelante

	LaVectorLongInt pivots(A.cols());

	LUFactorizeIP(A, pivots);

	LaLUInverseIP(A, pivots);   // Calculo de la inversa; se destruye la matriz A original

	Blas_Mat_Mat_Mult(A, B, C); 

	cout << "Esta es la solucion del sistema lineal\n" << C;

	LaLinearSolve(D, E, B); // En un solo paso con LaLinearSolve

	cout << "\nEsta es la solucion del sistema lineal con LaLinearSolve\n" <<E;

	return 0;

}

La salida:

Esta es la solucion del sistema lineal
161.533
198.62
248.746

Esta es la solucion del sistema lineal con LaLinearSolve
161.533
198.62
248.746

contiene la solución del sistema lineal y es idéntica por ambos procedimientos.

Esta entrada fue publicada en Código C++ y etiquetada , . Guarda el enlace permanente.

Una respuesta a Resolución de sistemas lineales con Lapackpp

  1. Pingback: Resolución de sistemas lineales: Clase Matriz |

Responder

Por favor, inicia sesión con uno de estos métodos para publicar tu comentario:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s