Sie sind auf Seite 1von 31

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.
 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 

El esquema computacional de la factorización LU, es diferente de la


eliminación gaussiana, supongamos que exista la descomposición
triangular, es decir, la matriz se puede expresar como el producto de
dos matrices :
A=LU
U: matriz triangular superior.
L: matriz triangular inferior.

Veamos a seguir, el procedimiento para obtener esta descomposición.

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:

>> 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
% FACTORIZACION lU DOOLITLE

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 DOOLITLE\n\n\n');

%fprintf me permite ingresar comentarios de manera textual que


pueden

%orientar al usuario en el uso del programa

%input es un comando de solicitud de entrada de datos del


usuario.

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

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.

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

Das könnte Ihnen auch gefallen