Beruflich Dokumente
Kultur Dokumente
CONTENIDO:
Factorización Directa de Matrices: Doolittle. Crout. Choleski.
Sistemas Tridiagonales.
a11 a12 a13 a14
0 a 22 a23 a24
U=
0 0 a33 a34
0 0 0 a44
2
a11 0 0 0
a21 a22 0 0
L=
a31 a32 a33 0
a41 a42 a43 a44
3
4
4 1 1 1
A= 1 3 -1 1
1 -1 2 0
1 1 0 2
Solución:
A=[4 1 1 1; 1 3 -1 1; 1 -1 2 0; 1 1 0 2];
%Aplicamos en A las operaciones elementales fila
%correspondientes para obtener la matriz triangular
%superior U, esto es:
A(4,:)= -A(3,:) + A(4,:);
A(3,:)= -A(2,:) + A(3,:);
A(2,:)= -1/4*A(1,:) + A(2,:);
A(3,:)= 16/11*A(2,:) + A(3,:);
A(4,:)= -8/11*A(2,:) + A(4,:);
A(4,:)= 12/13*A(3,:) + A(4,:);
U=A %aqui U es la matriz triangular superior que hallamos
5
A=[4 1 1 1; 1 3 -1 1; 1 -1 2 0; 1 1 0 2];
6
l=zeros(4);
l(1,1)=A(1,1)/U(1,1);
l(2,1)=A(2,1)/U(1,1);
l(3,1)=A(3,1)/U(1,1);
l(4,1)=A(4,1)/U(1,1);
l(2,2)=(A(2,2)-l(2,1)*U(1,2))/U(2,2);
l(3,2)=(A(3,2)-l(3,1)*U(1,2))/U(2,2);
l(4,2)=(A(4,2)-l(4,1)*U(1,2))/U(2,2);
l(4,3)=(A(4,3)-l(4,1)*U(1,3)-l(4,2)*U(2,3))/U(3,3);
l(3,3)=(A(3,3)-l(3,1)*U(1,3)-l(3,2)*U(2,3))/U(3,3);
l(4,4)=(A(4,4)-l(4,1)*U(1,4)-l(4,2)*U(2,4)-l(4,3)*U(3,4))/U(4,4)
7
% Verificando con el comando directo lu():
A =
4.0000 1.0000 1.0000 1.0000
1.0000 3.0000 -1.0000 1.0000
1.0000 -1.0000 2.0000 -0.0000
1.0000 1.0000 0.0000 2.0000
[L U]=lu(A)
L =
1.0000 0 0 0
0.2500 1.0000 0 0
0.2500 -0.4545 1.0000 0
0.2500 0.2727 0.0769 1.0000
U =
4.0000 1.0000 1.0000 1.0000
0 2.7500 -1.2500 0.7500
0 0 1.1818 0.0909
0 0 0 1.5385
8
Observación: En el ejercicio anterior, al no haber ejecutado
una operación elemental de cambio de fila, la matriz
correspondiente, de permutación (cambio) de fila: P,
resulta ser la identidad, podemos visualizar esto con el
propio comando lu(A), esto es:
L=
1.0000 0 0 0
0.2500 1.0000 0 0
0.2500 -0.4545 1.0000 0
0.2500 0.2727 0.0769 1.0000
9
U=
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
10
aplicando las operaciones elementales fila como en el
ejemplo anterior, se llega a un cambio de fila en el proceso
(¡Verifique!), evidenciando esto se tiene la correspondiente
matriz P de permutación de fila , esto es:
L=
1.0000 0 0 0
0.2500 1.0000 0 0
0.2500 0.2727 1.0000 0
0.2500 -0.4545 0.2321 1.0000
11
U=
P=
1 0 0 0
0 1 0 0
0 0 0 1
0 0 1 0
12
Ahora aplicando esta factorización para la resolución de un sistema lineal , se
procede de la siguiente forma: Se quiere resolver el sistema AX=B donde
UX=Y y LY=B
Luego se resuelve LY=B por sustitución progresiva :
= 3.000
= 3.2500
= = -0.2727
= 0.3846
Finalmente:
0.5
1.0
-0.25
0.25
14
% FACTORIZACION lU DOOLITLE
15
Forma Computacional Codificando en Matlab
A=[4 1 1 1; 1 3 -1 1; 1 -1 2 0; 1 1 0 2];
>> [ L U ]=lu(A)
L=
1.0000 0 0 0
0.2500 1.0000 0 0
0.2500 -0.4545 1.0000 0
0.2500 0.2727 0.0769 1.0000
U=
4.0000 1.0000 1.0000 1.0000
0 2.7500 -1.2500 0.7500
0 0 1.1818 0.0909
0 0 0 1.5385
16
>B=[3 4 -1 2] ;
>> y=L\B
y=
3.0000
3.2500
-0.2727
0.3846
>> x=U\y
x=
0.5000
1.0000
-0.2500
0.2500 17
18
19
20
21
22
23
24
Forma Computacional Codificando en Matlab
25
A=input('Ingrese la matriz A = \n');
b=input('\n Ingrese el vector b,
correspondiente a los terminos
independientes b=\n');
% Las matrices A y b deben ser ingresadas
entre corchetes separando las %columnas
%mediante coma ',' y las filas mediante
punto y coma ';'.
[n,m]=size(A);
C=[A,b];
L=zeros(n);
u=zeros(n);
y=length(m);
x=length(n);
26
% la matriz C, representa la forma de la
matriz aumentada [Ab]
disp(C)
if n==m
for k=1:n
%La instruccion iterativa for permite repetir
estamentos %a un numero especifico de veces
suma1=0;
for p=1:k-1
suma1=suma1+L(k,p)*u(p,k);
end
L(k,k)=sqrt(A(k,k)-suma1);
u(k,k)=L(k,k); %inicio del metodo
for i=k+1:n
suma2=0;
27
for q=1:k-1
suma2=suma2+L(i,q)*u(q,k);
end
L(i,k)=(A(i,k)-suma2)/L(k,k); %obtencion
de la matriz L
end
for j=k+1:n
suma3=0;
for r=1:k-1
suma3=suma3+L(k,r)*u(r,j);
end
u(k,j)=(A(k,j)-suma3)/L(k,k); %obtencion
de la matriz U
end
end
28
producto=det(L)*det(u) %calculo del
determinante
if producto~=0
for i=1:n
suma=0;
for p=1:i-1
suma=suma+L(i,p)*y(p);
end
y(i)=(b(i)-suma)/L(i,i); %obtencion del
vector y
end
for i=n:-1:1
suma=0;
for p=i+1:n
suma = suma+u(i,p)*x(p);
end 29
x(i)=(y(i)-suma)/u(i,i); % vector solucion
end
else
fprintf('\n El determinante es igual a
cero, por lo tanto el sistema tiene
infinitas o ninguna solucion\n')
end
end
fprintf('\n Matriz Ab:\n')
disp(C)
fprintf('\n Matriz L:\n')
disp(L)
fprintf('\n Matriz U:\n')
disp(u)
fprintf('\n El vector y:\n')
disp(y) 30
fprintf('\n\n La solucion de X1 hasta Xn
es:\n');
%resultados de una manera mas ordenada:
for i=1:n
xi=x(1,i);
fprintf('\nX%g=',i)
disp(xi);
end
Comando : chol(A)
31