Implementación del Método de Cholesky en C++ para Resolución de Matrices

Matemáticas3,97 KB

Implementación del Método de Cholesky en C++

A continuación, se presenta la estructura de clases y el código en C++ para llevar a cabo la factorización y resolución de matrices mediante el método numérico de Cholesky.

Código Fuente


#include <iostream>
#include <stdio.h>
#include <math.h>

using namespace std;

class LuyCho { private: double l11, l12, l13, l21, l22, l23, l31, l32, l33, d1, d2, d3, x1, x2, x3, fila, columna; public: void metodo(); };

void LuyCho::metodo() { double matriz[5][5]; cout << "Digite el número de columnas" << endl; cin >> columna; cout << "Digite el número de filas" << endl; cin >> fila; int i, j;

for(i = 1; i <= fila; i++)
{
    for(j = 1; j <= columna; j++)
    {
        cout << "Digite el valor para cada casilla de la matriz: " << i << " " << j << endl;
        cin >> matriz[i][j];
    }
}

system("cls");
cout << "Matriz ingresada" << endl;
cout << "***************************************" << endl;

for(int k = 1; k <= fila; k++)
{
    for(int l = 1; l <= columna; l++)
    {
        cout << "    " << matriz[k][l];
    }
    cout << endl;
}
cout << endl;

cout << "Realizando la matriz L" << endl;
matriz[1][1] = sqrt(matriz[1][1]);
l11 = matriz[1][1];
cout << "L 11 tiene el valor de " << l11 << endl;

matriz[2][1] = matriz[2][1] / l11;
l21 = matriz[2][1];
cout << "L 21 tiene el valor de: " << l21 << endl;

matriz[3][1] = matriz[3][1] / l11;
l31 = matriz[3][1];
cout << "L 31 tiene el valor de: " << l31 << endl;

matriz[2][2] = sqrt(matriz[2][2] - pow(l21, 2));
l22 = matriz[2][2];
cout << "L 22 tiene el valor de: " << l22 << endl;

matriz[3][2] = (matriz[3][2] - l31 * l21) / l22;
l32 = matriz[3][2];
cout << "L 32 tiene un valor de: " << l32 << endl;

matriz[3][3] = sqrt(matriz[3][3] - pow(l31, 2) - pow(l32, 2));
l33 = matriz[3][3];
cout << "L 33 tiene un valor de: " << l33 << endl;
cout << endl;

for(int k = 1; k <= fila; k++)
{
    for(int l = 1; l <= columna; l++)
    {
        cout << "    " << matriz[k][l];
    }
    cout << endl;
}
cout << endl;

cout << "Ahora calculando los valores respectivos de d" << endl;
d1 = matriz[1][4] / matriz[1][1];
cout << "El valor de d1 es " << d1 << endl;

d2 = (matriz[2][4] - l21 * d1) / l22;
cout << "El valor de d2 es " << d2 << endl;

d3 = matriz[3][4] - ((l31 * d1 + l32 * d2) / l33);
cout << "El valor de d3 es " << d3 << endl;
cout << endl;

cout << "Ahora la matriz U" << endl;
double u11 = matriz[1][1];
cout << "El valor de u11 es " << u11 << endl;
double u12 = matriz[2][1];
cout << "El valor de u12 es " << u12 << endl;
double u13 = matriz[3][1];
cout << "El valor de u13 es " << u13 << endl;
double u22 = matriz[2][2];
cout << "El valor de u22 es " << u22 << endl;
double u23 = matriz[3][2];
cout << "El valor de u23 es " << u23 << endl;
double u33 = matriz[3][3];
cout << "El valor de u33 es " << u33 << endl;
cout << endl;

cout << "Entonces ahora calculando los valores de x1, x2, x3" << endl;
x3 = d3 / u33;
cout << "El valor de x3 es " << x3 << endl;

x2 = (d2 - u23 * x3) / u22;
cout << "El valor de x2 es " << x2 << endl;

x1 = (d1 - ((u12 * x2) + (u13 * x3))) / u11;
cout << "El valor de x1 es " << x1 << endl;

}

int main() { LuyCho objeto; objeto.metodo(); system("pause"); return 0; }

Descargar

PDF Word HTML