Escolar Documentos
Profissional Documentos
Cultura Documentos
Ejemplo:
Determinar la factorización LU de la siguiente matriz:
1 1 0 3
2 1 1 1
A
3 1 1 2
1 2 3 1
Al ejecutar el algoritmo en Matlab obtenemos la factorización:
1 1 0 3
2 -1 -1 -5
3 4 3 13
-1 -3 0 -13
Que esta en formato sobreescrito, es decir, las entradas de L están debajo de la diagonal y
las entradas de U están sobre la diagonal, incluido la diagonal, separando la matriz L y U
tenemos:
1 0 0 0 1 1 0 3
2 1 0 0 0 -1 -1 -5
L U
3 4 1 0 0 0 3 13
-1 -3 0 1 0 0 0 -13
Nota: El algoritmo mostrado anteriormente nos factoriza una matriz en la cual no se realiza
intercambio de filas, en el caso que sea necesario realizar un intercambio de filas, nos
emitirá un mensaje diciendo que la matriz no se puede factorizar.
MÉTODO ITERATIVO DE JACOBI
Este método se usa para resolver sistemas lineales de la forma Ax=b, por lo general para
sistemas de dimensión grande, dado que en este caso son muy eficientes.
Para resolver sistemas lineales usando el método de Jacobi, nos basamos en el algoritmo
7.1 de Burden y lo implementamos en Matlab. La implementación es la siguiente:
syms('AA', 'OK', 'NAME', 'INP', 'N', 'I', 'J', 'A', 'X1');
syms('TOL', 'NN', 'K', 'ERR', 'S', 'X2', 'FLAG', 'OUP');
TRUE = 1;
FALSE = 0;
fprintf(1,'Este es el método de Jacobi para sistemas lineales.\n');
fprintf(1,'El arreglo será ingressado de um archivo de texto\n');
fprintf(1,'A(1,1), A(1,2), ..., A(1,n+1), \n');
fprintf(1,'A(2,1), A(2,2), ..., A(2,n+1), \n');
fprintf(1,'..., A(n,1), A(n,2), ..., A(n,n+1)\n');
fprintf(1,'Coloque las entradas de la matriz separadas por almenos\n');
fprintf(1,'um espacio en blanco.\n\n\n');
fprintf(1,'La aproximación inicial debe seguir el mismo formato.\n');
fprintf(1,'Se ha creado el archivo de entrada? - ingresa Y o N.\n');
AA = input(' ','s');
OK = FALSE;
if AA == 'Y' | AA == 'y'
fprintf(1,'Ingresa el nombre del archivo en la forma
drive:\\nombre.ext\n');
fprintf(1,'por ejemplo: A:\\DATA.DTA\n');
NAME = input(' ','s');
INP = fopen(NAME,'rt');
OK = FALSE;
while OK == FALSE
fprintf(1,'Ingrese el numero de ecuaciones – un entero.\n');
N = input(' ');
if N > 0
A = zeros(N,N+1);
X1 = zeros(N);
X2 = zeros(N);
for I = 1 : N
for J = 1 : N+1
A(I,J) = fscanf(INP, '%f',1);
end;
end;
for I = 1 : N
X1(I) = fscanf(INP, '%f',1);
end;
OK = TRUE;
fclose(INP);
else
fprintf(1,'El número debe ser un entero positivo\n');
end;
end;
OK = FALSE;
while OK == FALSE
fprintf(1,'Ingrese la tolerancia.\n');
TOL = input(' ');
if TOL > 0
OK = TRUE;
else
fprintf(1,'La tolerancia debe ser positiva.\n');
end;
end;
OK = FALSE;
while OK == FALSE
fprintf(1,'Ingrese el máximo número de iteraciones.\n');
NN = input(' ');
if NN > 0
OK = TRUE;
else
fprintf(1,'El numero debe ser un entero positivo.\n');
end;
end;
else
fprintf(1,'El programa terminara, crear el archivo de entrada.\n');
end;
if OK == TRUE
% PASO 1
K = 1;
OK = FALSE;
% PASO 2
while OK == FALSE & K <= NN
% err is used to test accuracy - it measures the infinity-norm
ERR = 0;
% PASO 3
for I = 1 : N
S = 0;
for J = 1 : N
S = S-A(I,J)*X1(J);
end;
S = (S+A(I,N+1))/A(I,I);
if abs(S) > ERR
ERR = abs(S);
end;
% usar X2 por X
X2(I) = X1(I)+S;
end;
% PASO 4
if ERR <= TOL
% El processo es completo
OK = TRUE;
else
% PASO 5
K = K+1;
% PASO 6
for I = 1 : N
X1(I) = X2(I);
end;
end;
end;
if OK == FALSE
fprintf(1,'El máximo numero de iteraciones es excedido.\n');
% PASO 7
% Procedimiento es completado exitosamente
else
fprintf(1,'Elegir el método de salida d:\n');
fprintf(1,'1. Salida en pantalla\n');
fprintf(1,'2. Salida em archivo de texto\n');
fprintf(1,'por favor, ingresar 1 o 2.\n');
FLAG = input(' ');
if FLAG == 2
fprintf(1,'Ingrese el nombre del archivo - drive:\\name.ext\n');
fprintf(1,'Por ejemplo: A:\\OUTPUT.DTA\n');
NAME = input(' ','s');
OUP = fopen(NAME,'wt');
else
OUP = 1;
end;
fprintf(OUP, 'MÉTODO ITERATIVO DE JACOBI PARA SISTEMAS LINEALES\n\n');
fprintf(OUP, 'El vector solución es :\n');
for I = 1 : N
fprintf(OUP, ' %11.8f', X2(I));
end;
fprintf(OUP, '\n usando %d iteraciones\n', K);
fprintf(OUP, 'con tolerancia %.10e em norma infinita\n', TOL);
if OUP ~= 1
fclose(OUP);
fprintf(1,'Archivo de salida %s creado exitosamente \n',NAME);
end;
end;
end;
Ejemplo 1:
Utilice el método iterativo de Jacobi para encontrar la solución del sistema lineal Ax=b,
dado por:
10 x1 x2 2 x3 6
x1 11x2 x3 3x4 25
2 x1 x2 10 x3 x4 11
3x2 x3 8 x4 15
Esto sucede dado que T 1 y por teorema se tiene que para que el método converja se
debe cumplir que T 1 , por esta razón es que para este sistema lineal no se puede aplicar
el método de Jacobi.
Con esto concluimos que una ventaja del método de Jacobi es que es muy eficiente para
resolver sistemas de dimensión grande, pero una desventaja es que si T 1 , el método no
converge; y en dichos casos se debe optar por resolver por otros métodos.