Está en la página 1de 6

DEPARTAMENTO DE INGENIERÍA

QUÍMICA, BIOTECNOLOGÍA
Y MATERIALES
FACULTAD DE CIENCIAS
FÍSICAS Y MATEMÁTICAS
UNIVERSIDAD DE CHILE

IQ4112 - Métodos Matemáticos para Ingeniería de Procesos


Actividades en cátedra - AC2
Gauss, GEPP y Jacobi

J. Cristian Salgado - jsalgado@ing.uchile.cl

Departamento de Ingeniería Química, Biotecnología y Materiales


Universidad de Chile

Semestre Otoño 2023


Actividad en clase: Errores en una implementación del algoritmo GEPP
tiempo 7 minutos

function [At,bt] = getUpperTriangPartialPivoting_para_analisis(A,b)


M = size(A,1); % Numero de ecuaciones
N = size(A,2); % Numero de incognitas
Nb = size(b,1); % Tamano vector b
Au = [A b];

for j=1:N-1
% Buscamos el mayor valor en cada segmento de columna. Tenemos que sumar (j-1) ya
% que la busqueda se produce en un segmento de la columna dado por [j:end,j]
[A_max,i_max] = max(abs(Au(j:end,j)));
i_max = i_max + j - 1;

% Si el maximo es cero entonces tenemos menos ecuaciones que incognitas


if A_max != 0
fprintf( 'Error No existe solucion unica columna %d solo tiene ceros ',j);
return
end
% Si el pivote original no corresponde al mayor valor absoluto tenemos que
% intercambiar las filas[...]

El código disponible en ucursos tiene 3 errores. Identifique cada uno.

J. Cristian Salgado - http://salgadolab.diqbt.uchile.cl IQ4112 - AC2


function [At,bt] = getUpperTriangPartialPivoting(A,b)

for j=1:N-1
% Buscamos el mayor valor en cada segmento de columna. Tenemos que sumar (j-1) ya
% que la busqueda se produce en un segmento de la columna dado por [j:end,j]
[A_max,i_max] = max(abs(Au(j:end,j)));
i_max = i_max + j - 1;

% Si el maximo es cero entonces tenemos menos ecuaciones que incognitas


if A_max != 0 %ERROR DE SINTAXIS != no existe en MATLAB/OCTAVE
fprintf( 'Error No existe solucion unica columna %d solo tiene ceros ',j);
return
end
% Si el pivote original no corresponde al mayor valor absoluto tenemos que
% intercambiar las filas
if i_max ~= j
% Si las filas son distintas entonces swapeamos las filas
% ERROR LOGICO, esta invertido el orden en que se swapean las filas
tmp_row = Au(j,:);
Au(i_max,:) = tmp_row;
Au(j,:) = Au(i_max,:);
end

% Actualizamos las filas mas abajo de la fila j (pivote)


for i=j+1:N
lambda = Au(i,i)/Au(j,j); %ERROR LOGICO: esta mal calculado el pivote
Au(i,j:end) = Au(i,j:end) - lambda * Au(j,j:end);
end
end

J. Cristian Salgado - http://salgadolab.diqbt.uchile.cl IQ4112 - AC2


Actividad en clase: Errores en una implementación del algoritmo de Jacobi
tiempo 7 minutos

function [x_out,norma] = jacobi(A,b,x0,norma_umbral,N_max,VERBOSE)


% Esta funcion implementa el metodo de Jacobi

% Metodo de Jacobi
D=diag(diag(A));
norma = norm(A*x0-b,2);
x_new = x0;
k=1;

if VERBOSE
fprintf( 'Iter/Iter_max Norma\n ')
end
%[...]

El código disponible en ucursos tiene 2 omisiones. Completelo.

J. Cristian Salgado - http://salgadolab.diqbt.uchile.cl IQ4112 - AC2


Actividad en clase: Errores en una implementación del algoritmo de Jacobi
tiempo 7 minutos

function [x_out,norma] = jacobi(A,b,x0,norma_umbral,N_max,VERBOSE)

%[...]
if VERBOSE
fprintf( 'Iter/Iter_max Norma\n ')
end

%Falta la condicion de termino


while (norma(k) > norma_umbral && k < N_max)
if VERBOSE
fprintf( '%d/%d %3.5e\n ',k,N_max,norma(end))
end

x_old = x_new;

%Falta el calculo de la iteracion


x_new = inv(D)*b - (inv(D)*A - eye(size(A)))*x_old;

norma = [norma; norm(A*x_new-b,2)];


k = k+1;
end

x_out = x_new;

%[...]

J. Cristian Salgado - http://salgadolab.diqbt.uchile.cl IQ4112 - AC2


Preguntas

http://www.phdcomics.com

J. Cristian Salgado - http://salgadolab.diqbt.uchile.cl IQ4112 - AC2

También podría gustarte