El siguiente código efectúa la factorización LU de una matriz. Esta es la forma más básica de factorización LU (no se considera el pivoteo).
// ***************************************************************************** // * FUNCION : fact_LU( A: [3x3 constant] ) // * SALIDA : struct // * L: [3x3 consta] // * U: [3x3 consta] // * // * Realiza el algoritmo de eliminación Gauss sin pivoteo para encontrar los // * factores de la matriz A. // ***************************************************************************** function ans = fact_LU(A) n = size(A); // Dimensiones de la matriz A // ************************************************************************* // La matriz debe se cuadrada // ************************************************************************* if( n(1) <> n(2) ) then error("!!!ERROR: La matriz debe ser cuadrada!!!") else n = n(1) end // ************************************************************************* // Inicia la eliminacion Gauss sin pivoteo // ************************************************************************* U = A // U se inicializa como una copia de A L = eye(n,n) // Inicializa L como identidad for k = 1:n-1 for j = k+1:n L(j,k) = U(j,k)/U(k,k) // Multiplicadores U(j,:) = U(j,:) - L(j,k)*U(k,:) // Fila j = Fila j - L(jk)*Fila k end end ans = struct("L", L, "U", U) // Devuelve la estructura (L, U) endfunction // ***************************************************************************** // * EJEMPLO DE EJECUCION // * // * -->A = [4 5 7; 5 3 6; 0 7 5]; // * -->m = fact_LU(A); // * -->m.L // Matriz triangular inferior // * ans = // * // * 1. 0. 0. // * 1.25 1. 0. // * 0. - 2.1538462 1. // * // * -->m.U // Matriz triangular superior // * ans = // * // * 4. 5. 7. // * 0. - 3.25 - 2.75 // * 0. 0. - 0.9230769 // * // * -->m.L*m.U // A = L*U // * ans = // * // * 4. 5. 7. // * 5. 3. 6. // * 0. 7. 5. // *****************************************************************************
¡Gracias!
ResponderEliminar