LU Decomposition Algorithm for Linear System Solving
Implementación del Algoritmo de Factorización LU
Este documento presenta las funciones esenciales para la resolución de sistemas de ecuaciones lineales mediante la descomposición LU, incluyendo la función principal de resolución y el algoritmo de factorización.
Función de Resolución del Sistema Lineal
La función utiliza la factorización mn_LU_factorization, seguida de la sustitución progresiva (mn_descenso) y regresiva (mn_remonte) para obtener la solución $u$ del sistema $Au=b$.
mn_LU_factorization(A, L, U);
z = mn_descenso(L, b);
u = mn_remonte(U, z);
return u;
}
Algoritmo de Factorización LU
Implementación detallada de la factorización LU. Se asume que $N$ es la dimensión de la matriz y que real es un tipo de dato numérico flotante.
int q, p, k;
// Inicialización de las matrices L y U
for (q = 0; q < N; q++) {
for (p = 0; p < N; p++) {
L[q][p] = 0;
U[q][p] = 0; // Inicializamos la matriz
}
}
for (q = 0; q < N; q++) {
real sum;
// La diagonal principal de L se establece a 1
L[q][q] = 1;
// Cálculo de U[q][q]
sum = 0;
for (k = 0; k < q; k++) {
sum = sum + L[q][k] * U[k][q];
}
U[q][q] = A[q][q] - sum;
// Cálculo de la fila q de U y la columna q de L
for (p = q + 1; p < N; p++) {
sum = 0;
for (k = 0; k < q; k++) {
sum = sum + L[q][k] * U[k][p];
}
U[q][p] = A[q][p];
sum = 0;
for (k = 0; k < N; k++) {
sum = sum + L[p][k] * U[k][q];
}
L[p][q] = (1 / (U[q][q])) * (A[p][q] - sum);
}
// Manejo de borde o cálculo final
p = A.dim1() - 1;
sum = 0;
for (k = 0; k < q; k++) {
sum = sum + L[q][k] * U[k][p];
}
U[q][p] = A[q][p] - sum;
}
return 0;