Cómo calcular el algoritmo del modelo de humo gaussiano, código de programación
% gauss.m
función x = gauss(A,B)
%Se supone que los tamaños de las matrices A,B son NA x NA y NA x NB.
%Esta función resuelve Ax = B mediante el algoritmo de eliminación de Gauss.
NA = tamaño(A,2);
if NB1 ~= NA, error('A y B deben tener dimensiones compatibles');
N = NA + NB; :NA) B(1:NA,1:NB)]; % Matriz aumentada
epss = eps*ones(NA,1);
for k = 1:NA
% de pivote parcial escalado en AB(k,k) mediante la ecuación (2.2.20)
[akx,kx] = max(abs(AB(k:NA,k) )./max(abs([AB(k:NA,k + 1:NA) epss(1:NA - k + 1)]'))');
if akx < eps, error ('Matriz singular y Sin solución única'); end
mx = k + kx - 1;
si kx > 1 % Cambio de fila si es necesario
tmp_row = AB(k,k:N);
AB(k,k:N) = AB(mx,k:N);
AB(mx,k:N) ) = tmp_row;
end
% Eliminación directa de Gauss
AB(k,k + 1:N) = AB(k,k+1:N )/AB(k,k);
AB(k,k) = 1; %haz que cada elemento de la diagonal sea uno
para m = k + 1: NA
AB(m,k+1:N) = AB(m,k+1:N) - AB(m,k)*AB(k,k+1:N) %Ec.(2.2.5); )
AB(m,k) = 0;
end
end
%sustitución hacia atrás para una ecuación matricial triangular superior
% que tiene todos los elementos de la diagonal iguales a uno
x(NA,:) = AB(NA,NA+1:N);
forma m = NA-1: -1:1
x(m,:) = AB(m,NA + 1:N)-AB(m,m + 1:NA)*x(m + 1 :NA,:); %Ec.(2.2.7)
fin
Ejemplo:
>> A = [0 1 1;2 -1 -1;1 1 -1]; segundo = [2 0 1]
';
>> x = gauss(A,b)
x =
1.00000000000000
1.00000000000000
1.00000000000000