Você está na página 1de 58

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. Aplicación a los Circuitos Eléctr.
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
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
con ciertas condiciones,
sobre las entradas de L o U.

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
31
APLICACIÓN A LOS CIRCUITOS ELÉCTRICOS

a) Solución por el Método de Mallas

Definición: Una malla o lazo es un camino cerrado en un circuito,


distinguiremos una malla de una trayectoria.

32
y 6 trayectorias cerradas:

33
34
35
36
37
Ley de Ohm: V = I.R , donde
I representa la intensidad de corriente (o corriente) dada en amperios.
V representa la diferencia de potencial o tensión de voltaje dado en
voltios.
R representa la resistencia dada en ohms.
•2ª Ley de Kirchhoff de Voltajes para Mallas (LVK):

La suma de todas las tensiones de voltaje (V=I.R) en un camino


cerrado debe ser forzosamente igual a cero.
Equivalentemente, los incrementos de tensión de voltaje es igual a las
caídas de tensión de voltaje. Donde los aumentos son positivos y
negativas las caídas de tensión de voltaje . Esto es;

38
Aumento de tensión – Suma de las caídas de tensión = 0 (*)

39
Por la Ley de Ohm:

40
41
42
(S)

43
44
Aa =

3 -2 0 10
-2 9 -4 0
0 -4 9 -20

Aa =

3 -2 0 10
0 23/3 -4 20/3
0 -4 9 -20

Aa =

3 -2 0 10
0 23/3 -4 20/3
0 0 159/23 -380/23

45
Verificando los resultados, usando el comando rref( ):

A=[3 -2 0;-2 9 -4;0 -4 9];


b=[10;0;-20];
Aa=[A b];
Y=rref(Aa)
X=Y(:,4)
Salida:

Y=

1 0 0 490/159
0 1 0 -20/53
0 0 1 -380/159

X=

490/159
-20/53
-380/159
46
47
Solución:

48
49
50
(T)

51
C=[R1+R3+R7 R3 -R7;R3 R3+R2+R4 0; -R7 0 R6+R7+R5];
d=[E1; E2; -E3+E2]
X=rref([C d])

SALIDA :
X = %SOLUCION

1 0 0 1710/131
0 1 0 218/181
0 0 1 1207/179

52
53
54
Se recomienda que en la mayoría de los circuitos, que se puedan hacer, se
dejen todas las corrientes y todos los voltajes positivos en el caso del método
de mallas, pues resulta más fácil resolver el circuito. Así cambiaremos la
corriente -2 A por positiva, para tal cambiamos la dirección del flujo de corriente.
Luego, para cada nodo estableceremos la dirección de la corriente (pues no
conocemos la dirección real) así como se hizo en el método de mallas.
Supongamos que de los 3 nodos salen las corrientes en esas direcciones que
hemos querido fijar (ver siguiente figura), con excepción de las direcciones de
las dos fuentes de alimentación que no podemos cambiar. Como ya en todos los
nodos se establecieron las direcciones de corriente, aplicaremos la ley de
Kirchhoff en los 3 nodos. 55
56
57
>> Aa=[2.25 -2 -0.25 1.5; -2 3.5 -0.5 0; -0.25 -0.5 0.75 2]
Aa =

2.2500 -2.0000 -0.2500 1.5000


-2.0000 3.5000 -0.5000 0
-0.2500 -0.5000 0.7500 2.0000

>> C=rref(Aa)
C=

1.0000 0 0 4.5000
0 1.0000 0 3.5000
0 0 1.0000 6.5000

>> format bank


>> Solucion=C(:,4)
Solucion =
4.50
3.50
6.50
58