Вы находитесь на странице: 1из 30

MÉTODOS NUMÉRICOS (Octave)

Prof. María Zegarra Garay e -mail: maria_zegarra@hotmail.com


Prof. Elizabeth Puelles Bulnes e -mail: eliza_bulnes@hotmail.com

CONTENIDO:
Factorización Directa de Matrices: Doolittle. Crout. Choleski.
Sistemas Tridiagonales.
MÉTODOS DE FACTORIZACIÓN DE MATRICES: A=LU

Se verán los siguientes métodos:

a) Factorización Doolitle.
b) Factorización de Crout.
c) Factorización de Cholesky.

Se tienen las siguientes definiciones:


 a11 a12 a13 a14 
• Una matriz cuadrada que tiene todos sus elementos  
por debajo de la diagonal principal nulos, i.e.: 𝑎𝑖𝑗 = 0  0 a22 a23 a24 
U=
para todo 𝑖 > 𝑗 , se denomina Matriz Triangular Superior 0 0 a33 a34 
se suele denotar por U (matrix upper).  
0 0 0 a44 
• Una matriz cuadrada que tiene todos sus elementos  a11 0 0 0 
por arriba de la diagonal principal nulos, i.e.: 𝑎𝑖𝑗 = 0  
para todo 𝑖 < 𝑗 , se denomina Matriz Triangular Inferior  a21 a22 0 0 
L= 
se suele denotar por L (matrix lower). a31 a32 a33 0 
 
 a41 a42 a43 a44 
2
Se desea descomponer una matriz A en la siguiente forma:
A=LU
donde,
U: matriz triangular superior.
L: matriz triangular inferior.

Veamos a seguir, un procedimiento directo para obtener esta


descomposición.

Claramente, se tiene como dato a la matriz A, entonces:


1. Si 𝑙𝑖𝑖 = 1 se halla L y U, a este método se le llama Doolitle.
2. Si 𝑢𝑖𝑖 = 1 se halla L y U, a este método se le llama Crout.

Veamos el siguiente procedimiento en el que se usa operaciones elementales fila

3
, considerando no usar
intercambio de filas, pues en ese caso no existiría la factorización LU=A .

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:

>> A=[4 1 1 1; 1 3 -1 1; 1 -1 2 0; 1 1 0 2];


>> [L U P]=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
9
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
P=

1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1

Ejemplo: Sea A=[4 1 1 1; 1 3 -1 1; 1 -1 2 0; 1 1 5 2]

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:

>> A=[4 1 1 1; 1 3 -1 1; 1 -1 2 0; 1 1 5 2];


>> [L U P]=lu(A)

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=

4.0000 1.0000 1.0000 1.0000


0 2.7500 -1.2500 0.7500
0 0 5.0909 1.5455
0 0 0 -0.2679

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

A=[4 1 1 1;1 3 -1 1;1 -1 2 0;1 1 0 2] ; B=[3 4 -1 2] ,


se reescribe el sistema como LUX=B, equivalente a:

Introducimos una variable auxiliar Y, se tienen las ecuaciones:

UX=Y y LY=B
Luego se resuelve LY=B por sustitución progresiva :
= 3.000
= 3.2500
= = -0.2727
= 0.3846

Luego resolviendo por sustitución regresiva: UX=Y:


13
0.4941
0.6699
-0.9462
1.3000

Finalmente:

0.5
1.0
-0.25
0.25

En el ejemplo anterior la matriz L (triangular inferior) posee unos en la


diagonal A esta forma de factorización A=LU se le llama Método De
Doolitle.

14
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
15
>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 16
17
18
19
20
21
22
23
Forma Computacional Codificando en Matlab

clc %permite borrar el area de trabajo


clear %permite borrar las variables
almacenadas
format long %permite utilizar la maxima
capacidad de la maquina
fprintf(' FACTORIZACION LU
CHOLESKY\n\n\n');
%fprintf me permite ingresar comentarios
de manera textual que pueden orientar al
usuario en el uso del programa.

24
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);

25
% 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;
26
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
27
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 28
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) 29
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)

30

Вам также может понравиться