El siguiente código implementa el algoritmo de eliminación de Gauss con pivotación parcial para resolver el sistema de ecuaciones
Ax = b
// *****************************************************************************
// * FUNCION : gaussPivPar
// * PARAMS :
// * A - [n x n] Double
// * b - [n x 1] Double
// * RETURN :
// * < struct >
// * U - [n x n] Double
// * x - [n x 1] Double
// *
// * Calcula la solucion del sistema de ecuaciones dado por Ax = b mediante el
// * algoritmo de Gauss con pivotacion parcial.
// * Esta funcion no solo retorna la solucion sino que tambien retorna la matriz
// * triangular superior que se forma con este algoritmo.
// *****************************************************************************
function rpta = gaussPivPar(A, b)
[m,n] = size(A) // Dimesiones de la matriz de entrada
if (m <> n) then // Comprueba si la matriz es cuadrada
error("La matriz no es cuadrada.")
end
// Inicia el algoritmo
for i = 1:n-1
// Pivotacion parcial
[q,p] = max(A(i:n,i))
p = p+i-1
A = intercambiarFilas(A, i, p)
b = intercambiarFilas(b, i, p)
// Triangularizacion
for j = i+1:n
r = A(j,i)/A(i,i)
A(j,:) = A(j,:) - r*A(i,:)
b(j,:) = b(j,:) - r*b(i,:)
end
end
// Sustitucion inversa
for j = n:-1:1
suma = 0
for k = j+1:n
suma = suma + A(j,k)*x(k)
end
x(j) = ( b(j) - suma ) / A(j,j)
end
rpta = struct("U", A, "x", x)
endfunction
// *****************************************************************************
// * FUNCION : intercambiarFila
// * PARAMS :
// * A - [m x n] Double
// * i - [1 x 1] Integer
// * j - [1 x 1] Integer
// *
// * Funcion de ayuda que intercambia las filas i y j de la matriz A.
// *****************************************************************************
function rpta = intercambiarFilas(A, i, j)
temp = A(i,:)
A(i,:) = A(j,:)
A(j,:) = temp
rpta = A
endfunction
// *****************************************************************************
// * EJEMPLO DE EJECUCION
// *
// * -->A = [0 2 1; 1 -2 -3; -1 1 2]
// * A =
// *
// * 0. 2. 1.
// * 1. - 2. - 3.
// * - 1. 1. 2.
// *
// * -->b = [-8; 0; 3]
// * b =
// *
// * - 8.
// * 0.
// * 3.
// *
// * -->sol = gaussPivPar(A, b)
// * sol =
// *
// * U: [3x3 constant]
// * x: [3x1 constant]
// *
// * -->sol.U
// * ans =
// *
// * 1. - 2. - 3.
// * 0. 2. 1.
// * 0. 0. - 0.5
// *
// * -->sol.x
// * ans =
// *
// * - 4.
// * - 5.
// * 2.
// *****************************************************************************



Gracias, super!
ResponderEliminarGracias, super!
ResponderEliminarMuy bueno compañero.. pero no hace falta ademas definir una funcion b para intercambiar sus filas (pregunto de inocente, no se mucho del tema)
ResponderEliminar+10 y favoritos lince, sos groso sabelo
ResponderEliminar¿Como lo uso?
ResponderEliminardisculpen la ignorancia
saben de un blog que explique el metodo de Crout, y su algoritmo?
ResponderEliminarCasino Near Bryson City, NC | MapyRO
ResponderEliminarCasino Near Bryson City, NC. 대구광역 출장마사지 Address: 391 North 거제 출장마사지 Bryson City 속초 출장마사지 Drive, Bryson City, NC 28906, 성남 출장마사지 United States. Phone Number: (800) 777-7777 정읍 출장샵