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

Sistemas de lineales

Programación Numérica
Objetivos
• Resolver un sistema de ecuaciones lineales
acopladas
• Obtener la inversa de una matriz
• Calcular el determinante de una matriz
• Factorizar matrices
Solución de sistemas pequeños
La solución de un sistema lineal de 2 ecuaciones puede
obtenerse fácilmente de forma gráfica
a  b
a11x1 + a12x2 = b1 x2   11  x1  1
 a12  a12

a21x1 + a22x2 = b2
Despejando x2 y graficando
solución
 a11  b1
x2    x1 
 a12  a12
a  b
 a21  b2 x2   21  x1  2
x2    x1   a22  a22

 a22  a22
Ejemplo
Sea el sistema
3x1 + 2x2 = 18
(4, 3)
–x1 + 2x2 = 2
Despejando
x2 = 9 – 1.5x1
x2 = 1 + 0.5x1
Tipos de soluciones
No hay solución Infinidad de soluciones Sistema mal condicionado

Ejemplo Ejemplo Ejemplo


½x1 + x2 = 1 ½x1 + x2 = 1 ½x1 + x2 = 1
½x1 + x2 = ½ x1 + 2x2 = 1 0.501x1 + x2 = 0.9
Determinantes
Solución de un sistema de 3x3
La matriz del sistema es:
 a11 a12 a13 
A  a21 a22 a23 
a31 a32 a33 
El determinante de A es:

a11 a12 a13


a22 a23 a21 a23 a21 a22
D  a21 a22 a23  a11  a12  a13
a32 a33 a31 a33 a31 a32
a31 a32 a33
 a11 a22a33  a32a23   a12 a21a33  a31a23   a13 a21a32  a31a22 
Regla de Cramer
Cada incógnita de un sistema de ecuaciones lineales algebraicas
puede expresarse como la razón de dos determinantes con
denominados D y con numerador obtenido a partir de D, al
reemplazar la columna de coeficientes de la incógnita en cuestión
por las constantes independientes b1, b2, …, bn. Por ejemplo x1 se
calcula con:
b1 a12 a13
b2 a22 a23
b a32 a33
x1  3
a11 a12 a13
a21 a22 a23
a31 a32 a33
Eliminación de Gauss simple
Definición
Un sistema lineal es un sistema de la forma:

E1: a11x1 + a12x2 + a13x3 +...+ a1nxn = b1


E2: a21x1 + a22x2 + a23x3 +...+ a2nxn = b2
.
En: an1x1 + an2x2 + an3x3 +...+ annxn = bn

Donde x1, x2, x3.., xn son las incógnitas.


Operaciones básicas
Se utilizarán tres operaciones para simplificar un sistema
lineal:
1. La ecuación Ei puede multiplicarse por una constante l
distinta de cero. (lEi) (Ei)

2. La ecuación Ej puede multiplicarse por una constante l


distinta de cero y sumarse a otra ecuación Ei. (Ei +lEj) 
(Ei)
3. El orden de las ecuaciones Ei y Ei puede intercambiarse.
(Ei)  (Ei)
positivo Ejemplo
E1: x1 + x2 + 3x4 = 4
E2: 2x1+ x2 – x3 + x4 = 1
E3: 3x1- x2 – x3 + 2x4 = -3
E4: -x1+2x2 +3x3 - x4 = 4

Las operaciones:
(E2 –2E1)E2, (E3 –3E1) E3, (E4 + E1)E4
Transforman el sistema en:
Simplificar
E1: x1 + x2 + 3x4 = 4
E2: - x2 – x3 - 5x4 = -7
E3: - 4x2 – x3 -7x4 =-15
E4: + 3x2 +3x3 + 2x4 = 8

Las operaciones:
(E3 –4E2)E3, (E4 +3E2) E4
Transforman el sistema en:
Simplificar
E1: x1 + x2 + 3x4 = 4
E2: - x2 – x3 - 5x4 = -7
E3: 3x3 +13x4 = 13
E4: -13x4 = -13

El sistema se puede resolver hacia atrás.


x4 = 1
x3 = (13-13x4)/3 = 0
x2 = -(x3 + 5x4 -7) = 2
x1 = -x2 - 3x4 + 4 = -1
Comprobación
E1 : x 1 + x 2 + 3x4 = 4 x1 = -1
E2: 2x1+ x2 – x3 + x4 = 1 x2 = 2
E3: 3x1- x2 – x3 + 2x4 = -3 x3 = 0
E4: -x1+2x2 +3x3 - x4 = 4 x4 = 1

E1: (-1)+(2)+3(1)= 4
E2: 2(-1)+(2)–(0)+(1) = 1
E3: 3(-1)-(2)–(0)+2(1)= -3
E4: -(-1)+2(2)+3(0)-(1) = 4
Solución en Matlab
%sistema de ecuaciones
A = [1,1,0,3,4;2,1,-1,1,1;3,-1,-1,2,-3;-1,2,3,-1,4]
x = [0 0 0 0]’;
%operaciones
%(E2 - 2E1) -> E2
A(2,:) = A(2,:) - 2*A(1,:);
%(E3 - 3E1) -> E3
A(3,:) = A(3,:) - 3*A(1,:);
%(E4 + E1) -> E4
A(4,:) = A(4,:) + A(1,:);
%(E3 - 4E2) -> E3
A(3,:) = A(3,:) - 4*A(2,:);
%(E4 + 3E2) -> E4
A(4,:) = A(4,:) + 3*A(2,:);
x(4) = A(4,5)/A(4,4);
x(3) = (A(3,5)-A(3,4)*x(4))/A(3,3);
x(2) = (A(2,5)-A(2,3:4)*x(3:4))/A(2,2);
x(1) = (A(1,5)-A(1,2:4)*x(2:4))/A(1,1);
Actividad
Resolver

x1 + x2 + x4 = 2
2x1 + x2 - x3 + x4= 1
4 x1 - x2 - 2x3 + 2 x4 = 0
3x1 - x2 - x3 + 2 x4 = -3
Matrices
Una matriz es un arreglo rectangular de elementos de n
renglones y m columnas.

 a11 a12  a1m 


a 
A  aij    21
a 22  a 2m 

    
 
 n1
a a n2  a nm 
Representación matricial
El sistema de ecuaciones
a11x1 a12 x2  a1m xn  b1
a21x1 a22 x2  a2 m xn  b2
  
an1 x1 an 2 x2  anm xn  bn
Se puede representar por una matriz ampliada

 a11 a12  a1n . b1 


a a  a . b 
A, b   21 22 2n 2

    . .
 
 n1
a a n2  a nn . bn
Ejemplo
(E2 –2E1)  E2, (E3 –3E1)  E3,
(E4 + E1)  E4

1 1 0 3. 4 1 1 0 3 . 4 
 2 1 1 1 . 1  0  1  1 5 .  7 
   
 3  1  1 2 .  3 0  4  1  7 .  15
   
 1 2 3  1. 4   0 3 3  1 . 8 

(E3 –4E2)  E3, (E3 +3E2)  E4

1 1 0 3 . 4 
0  1  1 5 .  7 
 
0 0 3 13 .  13
 
0 0 0  13.  13
Eliminación Gaussiana con sustitución hacia
atrás
Se forma la matriz aumentada  a11 a12  a1n . a1,n1 
 
a a  a . a
A  A, b   21 22 2n 2, n 1 

    . . 
 
 n1
a a n2  a nn
. a n , n 1 

Siempre que aii  0, realizamos la operación


(Ej–(aji/aii) Ei)  (Ej)
Para i = 1, 2, 3, ..., n-1 y j = i + 1, i + 2, ..., n.

a11 a12  a1n . a1,n 1 


 
0 a  a . a
A 22 2n 2 , n 1 

   . . 
 
 0 0  a nn
. a n , n 1 
Sustitución hacia atrás
an ,n 1
xn 
an , n

an 1,n 1  an 1,n xn
xn 1 
an 1,n 1

En general

ai ,n 1   j i 1 ai , j x j
n
ai ,n 1  ai ,n xn  ai ,n 1 xn 1  ...  ai ,i 1 xi 1
xi  
ai ,i ai ,i
Algoritmo Gauss

Entrada: número de incógnitas y de ecuaciones n, matriz aumentada (aij)


donde 1<= i <= n y 1<= j <= n+1.
Salida: solución x1, x2 ... xn o mensaje de que no hay solución
1. Para i = 1 hasta n-1
2. Sea p el entero más pequeño con
i <= p <= n y api <> 0
3. Si no se encuentra p
4. Salida(“no existe solución”)
5. terminar
continuación
6. Si p<>i realice (Ei)<->(Ep)
7. Para j = i+1 hasta n
8. mij = aij/aii
9. Realice (Ej-mijEi) -> (Ej)
10. Si ann=0 entonces
11. Salida(“no existe solución”)
12. xn = an,n+1/ann
13. Para i = n – 1 hasta 1
14. xi = [ai,n+1-Sj=i+1 aijxj]/aii
Código en C
void gauss(double A[][10],int n, double x[]){
//resuelve un sistema de ecuaciones Mx = b
// A es la matriz aumentada (n x (n+1)) A = [M b]
int i,j,k,p; //p es el pivote
double temp,s,m;
for(i = 0;i<n-1; i++){
p = i;
while(p < n-1 && A[p][i] == 0)
p = p + 1;
if(p == n-1){
std::cout<<"No hay solución por pivoteo\n";
return;
}
if(A[n-1][n-1]==0){
if(p != i)
std::cout<<"No solución\n";
for(j=0; j<n+1; j++){
return;
temp = A[i][j];
}
A[i][j] = A[p][j];
x[n-1]=A[n-1][n]/A[n-1][n-1];
A[p][j] = temp;
for(i = n-2;i>=0; i--){
}
s = A[i][n];
for(j = i+1; j<n; j++){
for (j = i+1; j<n;j++)
m = A[j][i]/A[i][i];
s = s - A[i][j]*x[j];
for(k = 0;k<n+1;k++)
x[i] = s/A[i][i];
A[j][k] = A[j][k] - m*A[i][k];
}
}
}
}
Método de Gauss
function x = ecuaciones(A)
% resuelve un sistema de ecuaciones Mx = b
% A es la matriz aumentada (n x (n+1)) A = [M b]
[n dumy] = size(A);%n = número de renglones
for i = 1 : n-1
p = i;
while p < n && A(p,i) == 0; p = p + 1; end
if p == n
fprintf('No hay solución...');
return;
end
if p ~= i
temp = A(i,:);
A(i,:) = A(p,:);
A(p,:) = temp;
end
for j = i+1 : n
m = A(j,i)/A(i,i);
for k = 1 : n+1
A(j,k) = A(j,k) - m*A(i,k);
end
end
end
Método de Gauss
if A(n,n)==0
fprintf('No hay solución...');
return;
end
x(n) = A(n,n+1)/A(n,n);
for i = n-1 : -1: 1
s = A(i,n+1);
for j = i+1 : n
s = s - A(i,j)*x(j);
end
x(i) = s/A(i,i);
end
Inversa
La inversa de una matriz A de n x n es una matriz A -1 tal que A x
A-1 = A-1 x A = In

Una matriz que tiene inversa se le llama matriz no singular.


Una matriz que no tiene inversa es una matriz singular.
Se cumple que:
a. La inversa es única.
b. La inversa de una matriz no singular es no singular y (A-1)-1 = A
c. Si A y B son no singulares, (AB)-1 = B-1 A-1
Obtención de la inversa
Sea Bj la j-ésima columna de la matriz B de n x n.
 b1 j 
b 
Bj   
2j

  
 
 bnj 

Si AB = C, entonces la j-esima columna de C está dada por:

 a11 a12  a1n   b1 j   k 1 a1k bkj 


n
 c1 j 
c  a  b   n 
 2 j   C  AB   21 a  a 2n   2 j  k 1 a2 k bkj 
22

          
j j
 
      n 
 cnj  an1 an 2  ann   bnj  k 1 ank bkj 
Cont.
Supongamos que A-1 existe y que A-1 = B = (bij). Entonces AB =
Iy
0 

 
0 
 
AB j  1
0 
 

0 
 

Para encontrar B podemos resolver n ecuaciones lineales donde la


j-ésima columna de la inversa es la solución del sistema lineal
que en el lado derecho tiene la j-ésima columna de I.
Ejemplo
 1 2  1  1 2  1 b11 b12 b13 
A   2 1 0  AB   2 1 0  b21 b22 b23 
 1 1 2   1 1 2  b31 b32 b33 

 b11  2b21  b31 b12  2b22  b32 b13  2b23  b33 



AB   2b11  b21 2b12  b22 2b13  b23 
 b11  b21  2b31  b12  b22  2b32  b13  b23  2b33 

Si B = A1, entonces AB = I se tiene


b11  2b21  b31  1 b12  2b22  b32  0 b13  2b23  b33  0
2b11  b21  0 2b12  b22  1 2b13  b23  0
 b11  b21  2b31  0  b12  b22  2b32  0  b13  b23  2b33  1

2 5 1  2 1
b11   b12  b13   5
9 9 9  9 9
 
9
4 1 2  4 2 
b21  b22   b23  1
A  
1

9 9 9
1 1 1  9 9 9 
b31   b32  b33   1 1 1 
3 3 3  3 3 3 
Inversa en C
void inversa(double B[][20],int n,double x[][20]){
double I[20][20];
double temp,m,s;
int i,j,k,p;
for(i = 0; i<20; i++)
for(j = 0; j<20; j++)
if(i==j) I[i][j] = 1; else I[i][j] = 0;
double A[20][20];
for(i = 0; i<n; i++)
for(j = 0; j<2*n; j++)
if(j<n) A[i][j] = B[i][j]; else A[i][j] = I[i][j-n];
for(i = 0; i<20; i++)
for(j = 0; j<20; j++)
x[i][j] = 0;
for(i = 0; i<n-1;i++){
p = i;
while(p < n && A[p][i] == 0) p = p + 1;
if( p == n){
std::cout << "Matriz singular...\n";
return;
}
if( p != i)
for( k = 0; k<2*n; k++){
temp = A[i][k];
A[i][k] = A[p][k];
A[p][k] = temp;
}
for(j = i+1;j<n; j++){
m = A[j][i]/A[i][i];
for( k = 0; k<2*n; k++)
A[j][k] = A[j][k] - m*A[i][k];
}
}

if( A[n-1][n-1]==0){
std::cout << "Matriz singular...\n";
return;
}
for( k = 0; k<n ; k++){
x[n][k] = A[n-1][n+k]/A[n-1][n-1];
for( i = n-1; i>=0; i--){
s = A[i][n+k];
for( j = i+1 ; j<n; j++)
s = s - A[i][j]*x[j][k];
x[i][k] = s/A[i][i];
}
}
}
Inversa en Matlab
function x = inversa(B)
[n dumy] = size(B);
I = eye(n);
A = [B,I];
x = zeros(n);
for i = 1 : n-1
p = i;
while p < n && A(p,i) == 0; p = p + 1; end
if p == n
fprintf('Matriz singular...');
return;
end
if p ~= i
temp = A(i,:);
A(i,:) = A(p,:);
A(p,:) = temp;
end
for j = i+1 : n
m = A(j,i)/A(i,i);
for k = 1 : 2*n
A(j,k) = A(j,k) - m*A(i,k);
end
end
end
Inversa en Matlab
if A(n,n)==0
fprintf('Matriz singular...');
return;
end
for k = 1: n
x(n,k) = A(n,n+k)/A(n,n);
for i = n-1 : -1: 1
s = A(i,n+k);
for j = i+1 : n
s = s - A(i,j)*x(j,k);
end
x(i,k) = s/A(i,i);
end
end
Comandos de Matlab para matrices
inv(m) – invierte una matriz cuadrada m.También m^-1.
/ – divide, A/B es equivalente a B*inv(A)
\ – divide, A\B es equivalente a inv(A)*B
det(m) – calcula el determinante de m.
trace(m) – suma los elementos de la diagonal de m.
Tarea 30
1. Determine cual de las siguientes
matrices son no singulares y calcule su
inversa.
a.| 4 2 6| b.|1 2 0| c.|4 0 0|
| 3 0 7| |2 1 -1| |0 0 0|
|-2 -1 -3| |3 1 1| |0 0 3|

d.|1 1 -1 1| e.|4 0 0 0| f.|2 0 1 2|


|1 2 -4 -2| |6 7 0 0| |1 1 0 2|
|2 1 1 5| |9 11 1 0| |2 -1 3 1|
|-1 0 -2 -4| |5 4 1 1| |3 -1 4 3|
3 4 2 6 1 3 0 6
2  7
 4 0 8
 4 5 3
 1 5 7 0 0 5 1 5
   
4 6 1 1
4 6 2 4
Álgebra lineal
Definición: dos matrices son iguales si tienen el mismo tamaño
n x m y si aij = bij para todo i = 1, 2, .., n y j = 1, 2, ..., m.

Definición: la suma de dos matrices A y B del mismo tamaño n


x m es igual a una matriz C donde cij = aij + bij para todo i = 1,
2, .., n y j = 1, 2, ..., m.

Definición: la multiplicación de una matriz A de tamaño n x m


por una escalar l es una matriz de tamaño n x m cuyos
elementos son laij para todo i = 1, 2, .., n y j = 1, 2, ..., m.
Propiedades de las matrices
Si A, B y C son matrices de tamaño n x m, y l y m son números
reales, se cumplen las siguientes propiedades:
a. A + B = B + A e. l(A + B) = lB + lA
b. (A + B) + C = A + (B + C) f. (l + m)A = lA + mA
c. A + 0 = 0 + A = A g. l (mA) = (lmA
d. A + (-A) = -A + A = 0 h. 1A = A
Multiplicación de matrices
Sea A una matriz de n x m y B una matriz de m x p. El producto
de la matriz A por la matriz B se define como la matriz C de n x p
donde los elementos de C se calculan por:

m
cij   aik bkj  ai1b1 j  ai 2b2 j  ...  aimbmj
k 1
Definiciones
Una matriz cuadrada es la que tiene igual número de renglones
que de columnas.
Una matriz diagonal es una matriz cuadrada con D =(dij) con dij
= 0 simpre que i<>j.
La matriz identidad de orden n, In = (dij) es una matriz diagonal
con dij = 1 si i = j y dij =0 si i<>j.
Una matriz triangular superior de n x n U = (uij) tiene, para
toda j = 1, 2, ..., n, los elementos
uij = 0, para cada i = j +1, j + 2, ..., n
Una matriz triangular inferior de n x n L = (lij) tiene, para toda
j = 1, 2, ..., n, los elementos
lij = 0, para cada i = 1, 2, ..., j – 1
Traspuesta
La traspuesta de una matriz A de n x m es una matriz At tal que
la i_ésima columna de At es la misma que el i-ésimo renglón de
A.
Se cumple que
a. (At)t = A
b. (A + B)t = At + Bt
c. (AB)t = Bt At
d. Si A-1 existe, (A-1)t = (At)-1
Determinante
Si A es una matriz de 1 x 1, entonces det(A) = x.
Si a es de orden mayor que 1, calcule el determinante de
A como sigue:
Escoja cualquier fila o columna. para cada elemento A[i,
j] en esa fila o columna, forme el producto
(-1)(i+ j)*A[i, j]*det(menor(A[i, j]))
Donde det(menor(A[i, j])) es el determinante del menor
de A[i, j].
det(A) = suma de todos los productos para la columna o
fila seleccionada.
Propiedades
a. Si un renglón o columna tiene solo ceros, el determinante es cero.
b. Si se intercambian 2 renglones o columnas, el signo del determinante cambia
c. Si dos columnas o renglones son iguales, el determinante es cero.
d. Si se multiplica un renglón o columna por un numero real el determinante se
multiplica por ese número real.
e. Si se suma un múltiplo de un renglón o columna a otro renglón o columna, el
determinante no se altera.
f. El determinante de un producto de matrices es igual al producto de los
determinantes de cada una.
g. El determinante de la inversa es el inverso del determinante de la matriz
original.
Cálculo eficiente del
determinante
Convertir la matriz en una matriz triangular superior y
calcular el determinante de ésta.
El determinante de una matriz triangular superior es igual al
producto de los elementos de la diagonal principal.
La matriz triangular se obtiene mediante la eliminación
gaussiana.
Determinante en Matlab
function x = determinante(A) for j = i+1 : n
[n dumy] = size(A); m = A(j,i)/A(i,i);
for i = 1 : n-1 for k = 1 : n
p = i; A(j,k) = A(j,k) - m*A(i,k);
while p < n && A(p,i) == 0; end
p = p + 1; end
end end
if p == n if A(n,n)==0
x = 0; x = 0;
return; return;
end end
if p ~= i p = 1;
temp = A(i,:); for i = 1:n
A(i,:) = A(p,:); p = p*A(i,i);
A(p,:) = temp; end
end x = p;
Descomposición LU
La descomposición LU transforma una matriz a en el producto de dos matrices
triangulares
A = LU (1)
Donde L es triangular inferior y U es triangular superior.

Un sistema Ax = b se puede escribir como


LUx = b (2)
Si hacemos
Ux = d (3)
Obtenemos
Ld = b (4)

Con (4) se obtiene z y después con (3) se obtiene x.

En los casos en que se tengan varios sistemas con la misma matriz de


coeficientes es más eficiente aplicar este método que resolver cada uno
mediante Gauss.
Supongamos un sistema de 3x3

 a11 a12 a13   x1   b1 


a a23   x2   b2 
 21 a22
a31 a32 a33   x3  b3 
En el primer paso de eliminación gaussiana se multiplica el renglón 1 por
f 21 = a21/a11 y se le resta al segundo para eliminar a21.
Luego se multiplica el renglón 1 por f 31 = a31/a11 y se le resta al tercer para
eliminar a31.
El paso final es multiplicar el segundo renglón por f 32 = a’32/a’22 y restar el
resultado al tercer renglón.
Los valores de f 21, f 31 y f 32 se pueden retener en a21, a31 y a32 .
Después de la eliminación
 a11 a12 a13 
f a'23 
 21 a'22
 f 31 f 32 a' '33 
Esta matriz representa un almacenamiento eficiente de la
descomposición LU de A.
A=LU
donde

a11 a12 a13 


U   0 a'22 a'23 
 0 0 a' '33 

1 0 0
L   f 21 1 0
 f 31 f 32 1
Ejemplo
 3  0.1  0.2 Los valores de f 21, f 31 son
A  0.1 7  0.3 f 21 = 0.1/3 = 0.033333 y
0.3  0.2 10  f 31 = 0.3/3 = 0.1

 3  0.1  0.2  El valore de f 32 es


0.03333 7.00333  0.29333
  f 32 = 0.19/7.003333 = 0.027130
 0.1  0.19 10.020 

 3  0.1  0.2 
0.03333 7.00333  0.29333
 
 0.1  0.027130 10.0120 
3  0.1  0.2 
U  0 7.00333  0.29333
0 0 10.0120 

 1 0 0
L  0.03333 1 0
 0.1  0.027130 1

 1 0 0 3  0.1  0.2 
A  0.03333 1 0 0 7.00333  0.29333 
 0.1  0.027130 1 0 0 10.0120 
 3  0.1  0.2 
0.099999 7  0.3 
 
 0.3  0.2 9.99996
Algoritmo

Sub Decompose(a, n)
DoFor k=1, n – 1
DoFor i=k+1, n
factor = ai,k/ak,k
ai,k = factor
DoFor j=k+1, n
ai,j = ai,j – factor * ak,j
EndDo
EndDo
EndDo
End Decompose
Solución del sistema
Para resolver un sistema de ecuaciones procedemos
multiplicando L por un vector d y sustituyendo hacia adelante.

 1 0 0  d1   b1  d1  b1
l 1 0  d   b  l21d1  d 2  b2
 21  2   2 
l31 l32 1  d 3  b3  l31d1  l32d 2  d 3  b3

Con estos valores evaluamos U por X y sustituimos hacia atrás

a11 a12 a13   x1   d1  x3  d 3


 0 a' a'23   x2   d 2  a'22 x2  a'23 x1  d 2
 22

 0 0 a'33   x3   d 3  a11x1  a12 x2  a13 x3  d1


Ejemplo
 3  0.1  0.2  x1   7.85 
0.1 7  0.3  x    19.3
  2   
0.3  0.2 10   x3   71.4 

 1 0 0  d1   7.85  d1  7.85 d1  7.85


Ld  0.03333 1 0 d 2    19.3 0.3333d1  d 2  19.3 d 2  19.5617
 0.1  0.027130 1  d3   71.4  0.1d1  0.02713d 2  d3  71.4 d3  70.0843

3  0.1  0.2   x1   7.58  x1  3


Ux  0 7.00333  0.29333  x2    19.5617 x2  2.5
0 0 10.0120   x3   70.0843  x3  7.00003
Ejemplo
Sea el sistema:
 6 1 1  37
-6x1 + x2 + x3 = -37
4x1 + 3x2 + x3 = -25 A   4 3 1 b   25
5x1 - 3x2 + x3 = -34
 5  3 1  34
La descomposición LU nos da
 1 0 0  6 1 1 
L   .6667 1 0 U   0 3.6667 1.6667 
  .8333  .5909 1  0 0 2.8182

 1 0 0  z1   37 z1 = -37
Ly   .6667 1 0  z2    25 -.6667z1 + z2 = -25
  .8333  .5909 1  z3   34 -.8333z1 - .5909z2 + z3 = -34

 6 1 1   x1    37  2.8182x3 = -94.180
Ux   0 3.6667 1.6667   x2    49.667 3.6667x1 + 1.6667x2 = -49.667
 0 0 2.8182  x3    94.180 -6x1 + x2 + x3 = -37
X1 = 0.87097
X2 = 1.64516
X3 = -33.41935
Pivoteo
La descomposición LU se implementa con el algoritmo de Gauss. Si se modifica
el orden de las filas, se deberá tomar en cuenta este hecho.
El algoritmo siguiente genera una matriz P de permutación para tomar en cuenta
el intercambio de filas.
La matriz de permutación se obtiene intercambiando renglones en una matriz
identidad. Por ejemplo, la siguiente matriz intercambia el primer y segundo de
una matriz A al premultiplicarla por A.
0 1 0
P  1 0 0
0 0 1
El guión regresa
PA = LU
La ecuación original se escribe
PAx = Py
O
LUx = y
Comandos de Octave

[l, u, p] = lu (a) – regresa la matriz triangular inferior (l), la matriz


triangular superior (u) y la matriz de permutaciones (p)

[l, u] = lu (a) – regresa la matriz triangular inferior (l) y la matriz


triangular superior (u), l se regresa permutada (pl)
Algoritmo en Matlab
function [l u p]= descomposicionLU(a)
%l – matriz triangular inferior
%u – matriz triangular superior
%p – matriz de permutaciones
lu = a;
[n muda] = size(a);
p = eye(n);
psigno = 1;
for k=1:n
j = k;
for i = k+1:n % encontrar pivote
if abs(lu(i,k))>abs(lu(j,k))
j = i;
end
end
if j!= k % intercambia con el pivote
t = lu(j,:); lu(j,:) = lu(k,:); lu(k,:) = t;
t = p(j,:); p(j,:) = p(k,:); p(k,:) = t;
psigno = -psigno;
end
if lu (k,k) != 0
for i = k+1:n
lu(i,k) = lu(i,k)/lu(k,k);
for m=k+1:n
lu(i,l) = lu(i,m)-lu(i,k)*lu(k,m);
end
end
end
end %fin lazo k
for i = 1:n
for j = 1:n
if i>j
l(i,j) = lu(i,j);
elseif i==j, l(i,j) = 1; elsel(i,j) = 0;
end
end
end
for i = 1:n
for j = 1:n
if i<=j, u(i,j) = lu(i,j); else u(i,j) = 0;
end
end
end
Substitución hacia adelante y
hacia atrás
function y=sub_adelante(L,w)
[nRow,nCol]=size(L);
y=zeros(nRow,1);
y(1)=w(1)/L(1,1);
for n=2:nRow
y(n)=( w(n) - L(n,1:n-1)*y(1:n-1) ) / L(n,n);
end

function x=sub_atras(U,v)
[nRow,nCol]=size(U);
x=zeros(nRow,1);
x(nRow)=v(nRow)/U(nRow,nRow);
for n=(nRow-1):-1:1
x(n)=(v(n)-(U(n,n+1:end)*x(n+1:end))) / U(n,n);
end
Guión para resolver un sistema
function x=resolver(A,b)
% Resuelve Ax=b
%ENTRADA:
% A: matriz cuadrada
% b: vector de tamaño n
%
%SALIDA:
% x: la solución a A*x=b
[L,U,P] = descomposicionLU(A);
y = sub_adelante(L,P*b);
x = sub_atras(U,y);
Tarea 31
1. Factorice las siguientes matrices en la
descomposición LU con Octave y con los guiones para LU.
Haga a mano el producto PLU y confirme que es igual a
la matriz original. Utilice 3 cifras después del punto
decimal.
a.| 4 2 6| b.|1 2 6| c.|1 3 8|
| 3 5 7| |2 1 -1| |0 7 0|
|-2 -1 3| |3 1 1| |1 7 3|

d.| 1 -1 -1 1| e.|4 0 4 0| f.|1 3 1 2|


| 1 2 -4 -2| |6 7 1 5| |8 1 -6 2|
| 2 1 1 5| |7 1 1 0| |2 -4 3 -1|
|-1 6 -2 -4| |2 4 1 1| |3 -2 4 3|
2. Encuentre los determinantes de las matrices
anteriores
Aplicación
Una red eléctrica puede representarse por medio de un sistema de ecuaciones.
Supongamos una red que consista solo de resistencias y fuentes de voltaje
independientes.
El sistema a resolver es
RI = V
Donde R es la matriz de resistencias de la red, V es un vector donde cada
componente es el voltaje de la malla e I es el vector de corrientes a determinar.
La matriz de resistencias tiene la siguiente forma

 R11  R12 ...  R1n 


 R . 
 21 R22 ...
 . . . . 
 

 n1R . . Rnn 

Donde Rii es la resistencia total de la malla i, y –Rij es la resistencia total entre la


malla i y la malla j.
Análisis de redes
R2 R3

R5 V1
R1 I1 I2

R4 R6
V2
V3 I3 I4 R9

R7 R8

 R1  R2  R4  R5  R4 0   I1   0 
  R5 R3  R5  R6 0  R6  I    V 
  2    1 

  R4 0 R4  R7 0   I 3  V3  V2 
    
 0  R6 0 R6  R8  R9   I 4   V2 
Solución en Matlab
% Calculo de las corrientes de malla en una red eléctrica
% a - vector utilizado para leer los datos desde un archivo
% nm = numero de mallas
% nr = numero de resistencias
% m1 = vector con la malla uno de cada resistencia
% m2 = vector con la malla dos de cada resistencia
% res = vector con los valores de las resistencias leídas
% r = matriz de resistencias
% v = vector con los voltajes totales de malla
% amp = vector de corrientes de malla
% la descripción de la red se lee desde un archivo, el formato es
% nm
% nr
% res(1)
% m1(1)
% m2(1)
% ...
% res(nr)
% m1(nr)
% m2(nr)
% v(1)
% ...
% v(nm)
%
Solución en Matlab
nn = 1;
%almacena todos los datos en el vector a
a = textread('malla.txt');
nm = a(nn);nn = nn+1;
nr = a(nn);nn = nn+1;
%lee cada elemento
for n = 1:nr
res(n) = a(nn);nn = nn+1;
m1(n) = a(nn);nn = nn+1;
m2(n) = a(nn);nn = nn+1;
end
%descripcion de los datos leidos
for n = 1:nr
fprintf('R%d=%6.3f entre malla %d y %d\n',n,res(n),m1(n),m2(n));
end
%Leer voltajes de malla y los despliega
for n = 1:nm
v(n) = a(nn);nn = nn+1;
fprintf('Voltaje de malla %d = %12f8:\n',n,v(n))
end
Solución en Matlab
%crea matriz de resistencias
r = zeros(nm);
for n = 1:nr
j = m1(n);
k = m2(n);
if k~=0
r(k,k) = r(k,k) + res(n);
r(j,k) = r(j,k) - res(n);
r(k,j) = r(j,k);
end
r(j,j) = r(j,j) + res(n);
end
%imprime matriz de resistencias
fprintf('Matriz de resistencias');
r
%calcula corrientes
amp = inv(r)*v';
%imprimir resultados
for n = 1:nm
fprintf('Corrientes de malla %d = %12f8:\n',n,amp(n))
end
Ejemplo numérico
Número de mallas 5
4821
9
Número de resistencias 3
1017
4
38.9 I1 I5 1
949 986
3492 Valor de resistencia
3
1017 837 4
3492
0
4821
1
5732
42.1 986
Malla 1 2
I2 I4 4
Malla 2
837
5
2
5670
842 5732 4
5
59.76 949
I3 0
2
38.9
0
0
5670 842
42.1
3
0
5
59.76
Resultados
R1=1017.000 entre malla 1 y 3 Matriz de resistencias
R2=3492.000 entre malla 1 y 2 r=
R3=837.000 entre malla 2 y 4 4509 -3492 -1017 0 0
R4=949.000 entre malla 2 y 0 -3492 5278 0 -837 0
R5=842.000 entre malla 3 y 5 -1017 0 6680 -4821 -842
R6=4821.000 entre malla 3 y 4 0 -837 -4821 12376 -5732
R7=986.000 entre malla 4 y 0 0 0 -842 -5732 12244
R8=5732.000 entre malla 4 y 5
R9=5670.000 entre malla 5 y 0 Corrientes de malla 1 = 0.036338
Voltaje de malla 1 = 38.900000 Corrientes de malla 2 = 0.027346
Voltaje de malla 2 = 0.000000 Corrientes de malla 3 = 0.028966
Voltaje de malla 3 = 42.100000 Corrientes de malla 4 = 0.020833
Voltaje de malla 4 = 0.000000 Corrientes de malla 5 = 0.016626
Voltaje de malla 5 = 59.760000
2  1 1  4 2 3 1 2  1 1 1  1
a) 3 3 9 b)  3 1 4 c) 0 1  1 d ) 0 2 3 
3 3 5  2 4 5 2 4 0  0  1 1 

2  1 0   x1  1
 1 2  1  x2   2

 0  1 2   x3  3
2  1 1   x1  4
 3 4  1  x2   5

 1  1 1   x3  6

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