function [b,A]=gauss_piv(A,b) % Función que resuelve un sistema lineal de ecuaciones compatible determinado % por el método de Gauss con pivote parcial. % Ultano Kindelán, Álgebra ETSIME, UPM. 09/2022 % Variables de entrada: % A = Matriz de coeficientes. % b= Vector de términos independientes. % Variables de salida % A = Matriz de coeficientes escalonada % b = Vector con la solución del sistema % OBSERVACIÓN: Utilizando las posibilidades de cálculo matricial de MATLAB, esta función se puede programar % de forma más concisa y simple (a más "alto nivel"). Al ser un curso de Álgebra Lineal y no de MATLAB, % lo que interesa es que se entienda el algoritmo de Gauss y, por ejemplo, se sepa contar el número % de operaciones en coma flotante que consume el método. Considero, por ello que es más ilustrativa la programación % "elemento a elemento" (además de ser más eficiente computacionalmente). Para los que estén interesados, % la función "gauss_piv_MATLAB" es una versión de "alto nivel" de "gauss_piv". % Se pone a cero el cronómetro. tic % Obtención de la dimensión del sistema. n=size(A,1); %Paso 1 (triangularización) for k=1:n-1 %Búsqueda del pivote pvt=abs(A(k,k)); fpvt=k; for j=k+1:n if (abs(A(j,k))>pvt) pvt = A(j,k); fpvt = j; end end if (abs(pvt) < eps) disp("El sistema no es compatible determinado"); return; elseif (fpvt ~= k) A = intercambio_de_filas(A,k,fpvt); b = intercambio_de_filas(b,k,fpvt); end % Pivoteo hacia abajo for i=k+1:n m=-A(i,k)/A(k,k); A(i,k)=0; for j=k+1:n A(i,j)=A(i,j)+m*A(k,j); end b(i)=b(i)+m*b(k); end end if(abs(A(n,n))