Red de conocimiento informático - Conocimiento del nombre de dominio - Cómo calcular el algoritmo del modelo de humo gaussiano, código de programación

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