Das M-File 'showgauss.m' zeigt den Ablauf einer Gauß-Elimination Schritt für Schritt. Als Rückgabe-Werte sind der Lösungsvektor und die Dreiecksmatrix vorgesehen.
function [xsol,R] = showgauss(A,b) %SHOWGAUSS Schrittweise Anzeige der Aktionen im Gauss-Algorithmus % showgauss(A,b) fuehrt die Gauss-Elimination fuer das System A*x=b durch % showgauss ohne Parameter loest ein default-Gleichungssystem % Copyright 2002 HSZ-T, Zuerich , Dr. Stefan Adam if nargin < 1 % Default-System b = [ 10 0 4 ]' ; A = [ 4 4 8 ; 2 -3 9 ; 1 2 2 ] ; end format rat; more off; clc; home % disp(' showgauss: Ablauf-Demonstration des Gauss-Algorithmus ') disp(' Start-Geichungssystem: A * x = b ') A, b disp('<return> zum Weiterfahren ..'), pause [m1,n1] = size(A); n = max(m1,n1); xsol = zeros(n,1); % % alle Spalten ausser der letzten, (beginnend mit 1) % for kol = 1:(n-1) % Null-Test des Pivot-Kandidaten, evtl. vertauschen if A(kol,kol) == 0 [amx,kx] = max(abs(A(kol:n,kol))); if amx == 0 disp( 'Matrix singulaer!' ); return end % Absoluter Vertauschungsindex, statt relativ zu kol kx=kx+kol-1; home disp([' Zeilenvertauschung noetig: ', int2str(kol) , ' <==> ', int2str(kx) ]) % vertauschen Restzeilen hz=A(kol,kol:n); A(kol,kol:n) = A(kx,kol:n); A(kx,kol:n) = hz; % vertauschen rechte Seiten hb = b(kol); b(kol) = b(kx); b(kx) = hb; A , b end Aol = A; bol = b; % Pivot-Absicherung OK, Kombinationen durchfuehren % alle Zeilen unterhalb der Diagonalen for lin = (kol+1):n % ~~~Division nur einmal ausfuehren, da immer dieselbe comb = A(lin,kol)/A(kol,kol); % ~~~ entsprechende Zeilen kombinieren % ~~~ Elementaufzaehlung mit impliziter Schleife A(lin,kol:n) = A(lin,kol:n) - A(kol,kol:n)*comb; b(lin) = b(lin) - b(kol)*comb; R=A; clc; home disp(' showgauss: Ablauf-Demonstration des Gauss-Algorithmus ') Aol , bol disp([' Schritt ' int2str(kol) ' , Sub-Schritt ' int2str(lin-kol) ... ': Element A(' int2str(lin) ',' int2str(kol) ') wird 0 . ' ... '( b wird angepasst )']) disp([' durch A(',int2str(lin),',:) = A(',int2str(lin),':) + (', ... num2str(-comb),')*A(',int2str(kol),',:)' ]) if (kol == n-1 ) & ( lin == n) ; R,b else ; A,b end; Aol = A; bol = b; disp('<return> zum Weiterfahren ..'), pause end end % Schluss-Test auf Ann == 0 if A(n,n) == 0 disp( 'Matrix singulaer!') R=0; xsol=0; return end % Rueckwaerts-Einsetzen clc; home; R , b disp(' Rueckwaerts-Einsetzen ') % alle Zeilen/Unbekannten von unten nach oben for k=n:(-1):1 xsol(k) = (b(k) - A(k,(k+1):n)*xsol((k+1):n) )/A(k,k); disp([' x(' int2str(k) ') = (' num2str(b(k)) ' - ' ... num2str( A(k,(k+1):n)*xsol((k+1):n) ) ' ) / ( ' num2str(A(k,k)) ... ' ) = ' num2str(xsol(k)) ]) disp('<return> zum Weiterfahren ..'); pause end ; xsol