Está en la página 1de 75

Ecuaciones algebraicas lineales

Ecuaciones algebraicas lineales


● Nos interesa resolver el sistema:

a11 x1 a12 x 2 ... a1n x n= b1


a21 x1 a22 x 2 ... a2n x n = b 2
........... ..........
a n1 x1 an2 x2 ... a nn x n= b n
Ecuaciones algebraicas lineales y la
práctica de la Ingeniería
● Dos tipos de problemas:
a) Solución de sistemas discretos o agrupados
b) Solución de sistemas continuos a través de ED
Orientación
Solución de pequeños sistemas de
ecuaciones
● Método gráfico
● Regla de Cramer (determinantes)
● Sustitución
Eliminación de Gauss simple
● Dos pasos:
Eliminación hacia adelante
● Se multiplica la ecuación 1 (fila pivote) por
a21
f 21 =
a11
Y se resta a la ecuación 2 para obtener

 a 22 −
a21
a11  
a12 x 2... a2n −
a 21
a11 
a1n x n= b2 −
a21
a11
b1

o
a' 22 x 2... a ' 2n x n= b' 2
Eliminación hacia adelante
a21
● Es decir, F '2= F2− F1
a11
● Se procede igual con las restantes filas,
a31 a n1
F ' 3= F 3− F 1 ; ... ; F ' n = F n− F1
a11 a11
Para obtener a11 x1 a12 x 2... a1n x n= b1
           a ' 22 x2 ... a ' 2n x n = b ' 2
           a' 32 x 2... a ' 3n x n = b' 3
........... ..........
           a ' n2 x 2... a' nn x n= b' n
Eliminación hacia adelante
● Se toma como fila pivote la 2, y se efectúan las
operaciones
a32 a n2
F ' ' 3= F ' 3− F ' 2 ; ... ; F ' ' n= F ' n− F '2
a22 a22

Para obtener a x  a x  a x ... a x = b


11 1 12 2 13 3 1n n 1

           a' 22 x 2  a ' 23 x 3... a ' 2n x n= b' 2


                      a ' ' 33 x 3... a ' ' 3n x n= b' ' 3
........... ..........
                     a' ' n3 x 3... a ' ' nn x n= b ' ' n
Eliminación hacia adelante
● Se continúa de esta forma hasta tomar la
(n-1)ésima ecuación como pivote, efectuar
 n−1  n−2
a n , n−1  n− 2
Fn = F n − F n−1
a n−1, n−1
Y obtener
a11 x1 a12 x 2  a13 x 3 ... a1n x n= b1
           a' 22 x 2 a ' 23 x 3... a ' 2n x n = b ' 2
                       a ' ' 33 x 3 ... a ' ' 3n x n= b' ' 3
........... ..........
 n−1  n−1
                                               a nn x n = b n
Eliminación hacia adelante
● Es decir,

[ ]{ } { }
a11 a 12 a 13 ... a 1n x 1 b1
0 a ' 22 a ' 23 ... a ' 2n x 2 b'2
0 0 a ' ' 33 ... a ' ' 3n ⋅ x 3 = b ' '3
... ... ... ... ... ... ...
 n−1
0 0 0 ... a nn xn n−1
bn
Sustitución hacia atrás
 n−1
bn
● De la última ecuación, xn=  n−1
ann
 n− 2  n− 2
b n−1 −a n−1, n xn
● De la ecuación n-1, x n−1=  n− 2
a n−1, n−1

● En general,
n
 i−1  i−1
b
i − ∑ a
ij xj
j= i1
xi=  i−1
Con i = n-1, n-2, ..., 2, 1
aii
Costo computacional (9.2.1)
● Se demuestra que el número de operaciones
requeridas es del orden de

[ ]
3 2 3
2n 2 n 2n 2
lim +O( n ) + + O( n) = +O( n )
n→ ∞ ⏟3 2
⏟ 3
eliminación hacia adelante sustitución hacia atrás
Pseudocódigo
leer A, b; iniciar n   # n: número de filas de A
iniciar x en cero      # x: vector de longitud n   
Jjjjjjjjjjjjjjjjjjjjjjj
                                       
# eliminación hacia adelante
repetir para i desde 1 hasta n­1:
repetir para j desde i+1 hasta n:
factor = A(j,i) / A(i,i) 
repetir para k desde i hasta n:
A(j,k) = A(j,k) ­ factor * A(i,k)
b(j) = b(j) – factor * b(i) 

# sustitución hacia atrás 
x(n) = b(n) / A(n,n) 
repetir para i desde n­1 hasta 1 cada ­1:
x(i) = b(i) 
repetir para j desde i+1 hasta n:
x(i) = x(i) – A(i,j) * x(j) 
x(i) = x(i) / A(i,i)

mostrar x
Ejemplo 9.5 pág. 258
● Resolver por Eliminación de Gauss

3 x1− 0.1 x 2 −0.2 x 3= 7.85


0.1 x1 + 7 x 2−0.3 x 3=−19.3
0.3 x1− 0.2 x 2 +10 x 3 =71.4
Ejemplo 9.5 pág. 258
● Código en Octave: gauss.m 

● Código en Python: gauss.py.  
Dificultades en los métodos de
eliminación
● División por cero:
           2 x 2 + 3 x 3=    8
  4 x1 + 6 x 2 + 7 x 3 =−3
  2 x1 +    x 2 + 6 x 3=    5
● Errores de redondeo
● Sistemas mal condicionados
Sistemas mal condicionados
● Pequeños cambios en los coeficientes
provocan grandes cambios en las soluciones

Bien condicionado Mal condicionado


Técnicas para mejorar las
soluciones
● Uso de más cifras significativas
● Reduce errores de redondeo
● Pivoteo
● Evita la división por cero
● Reduce los errores de redondeo
● Escalamiento
● Gran diferencia de magnitud entre distintos
coeficientes
Pivoteo
● Antes de de normalizar cada renglón se
determina el coeficiente más grande (en valor
absoluto) por debajo del pivote; y se
intercambia, de modo que los pivotes sean los
elementos de mayor valor absoluto.

● Ejemplo 9.9, pag. 268. Resolver por eliminación


de Gauss sin y con pivoteo

0.0003 x1 3.0000 x 2 =2.0001


1.0000 x11.0000 x 2 =1.0000
Ejemplo
● Resolver por Eliminación de Gauss con Pivoteo

0.1 x1 + 7 x 2− 0.3 x 3=−19.3


0.3 x1− 0.2 x 2 +10 x 3 = 71.4
3 x1− 0.1 x 2 − 0.2 x 3= 7.85
Escalamiento
● Se aplica cuando hay diferencias importantes
entre coeficientes del sistema, lo que ocurre
comúnmente en problemas de la Física
(unidades).
● Se divide cada renglón del sistema por su
coficiente de mayor valor absoluto.
● Ejemplo 9.10, pag. 270. Resolver sin y con
escalamiento

2 x1100000 x 2 =100000
x1      x 2= 2
Problemas 9.1 a 9.18 pag. 279
Descomposición LU
● Es más eficiente que la eliminación de Gauss
cuando deben resolverse numerosos sistemas
con los mismos coeficientes [A], pero distintos
términos {B}
● La propia eliminación de Gauss se puede
expresar como una descomposición LU
Descomposición LU
● Sea un sistema de ecuaciones
[ A] {X }={B} ⇒ [ A] {X }−{B}=0
Que pueda expresarse de la forma

[ ]{ } { }
u 11 u 12 u 13 x 1 d 1
0 u 22 u 23 x 2 = d 2 ⇒ [U ]{X }−{D}=0
0 0 u 33 x 3 d 3
Luego de la eliminación hacia adelante de Gauss.
Descomposición LU
Y que existe una matriz [L] de la forma

[ ]
1 0 0
L= l 21 1 0
l 31 l 32 1
Tal que
[ L] { [ U ] {X }−{D} } =[ A] {X }−{B}
Por lo tanto
[ L][ U ]=[ A] , [ L] {D}={B}
Pasos en la descomposición LU
Descomposición LU con eliminación
de Gauss
● Se puede demostrar que

[ ] [ ]
a 11 a12 a13 1 0 0
U = 0 a ' 22 a ' 23 , L= f 21 1 0
0 0 a ' ' 33 f 31 f 32 1
donde
a ' 22 =a22 − f 21 a12 ; a ' 23=a23 − f 21 a13
a ' ' 33=a 33 − f 31 a 13 − f 32 a ' 23
a 21 a 31 a ' 32
y f = , f 31 = , f 32 =
21
a 11 a 11 a ' 22
Ejemplo 10.1
● Obtenga una descomposición LU para la matriz
del ejemplo 9.5

[ ]{ } { }
3 −0.1 −0.2 x 1 7.85
0.1 7 −0.3 x 2 = −19.3
0.3 −0.2 10 x 3 71.4
Solución del sistema
● Sustitución hacia adelante para resolver
[ L] {D}={B}
d 1= b1
i−1 i−1

d i = bi − ∑ l ij d j = bi − ∑ f ij d j , i=2,3 , ... , n
j=1 j=1
Solución del sistema
● Sustitución hacia atrás para resolver
[U ] {X }={ D}

dn
xn=
u nn
n

d i− ∑ u ij x j
j= i1
xi= , i= n−1, n−2,... ,1
u ii
Ejemplo 10.2
● Encontrar la solución del problema 10.1

[ ]{ } { }
3 −0.1 −0.2 x 1 7.85
0.1 7 −0.3 x 2 = −19.3
0.3 −0.2 10 x 3 71.4
● Código en Octave
para descomposición LU: descLU.m
● Código en Python
para descomposición LU: descLU.py
Costo computacional
● El trabajo total es igual a la Eliminación de
Gauss,
3
2n 2
O n 
3
● Sólo que se distribuye en partes iguales entre
la descomposición y la sustitución
Eliminación de Gauss con Descomposición LU:
Pseudocódigo
leer A, b; iniciar n   # n: número de filas de A
crear L                # matriz identidad con n filas
iniciar x en cero      # x: vector de longitud n 
copiar A en U, x en d  
                                       
# descomposición de A
repetir para i desde 1 hasta n­1:
repetir para j desde i+1 hasta n:
L(j,i) = U(j,i) / U(i,i)
repetir para k desde i hasta n:
U(j,k) = U(j,k) – L(j,i) * U(i,k)  

# sustitución hacia adelante 
d(1) = b(1) 
repetir para i desde 2 hasta n:
d(i) = b(i) 
repetir para j desde 1 hasta i­1:
d(i) = d(i) – L(i,j) * d(j) 
Eliminación de Gauss con Descomposición LU:
Pseudocódigo
                                                  (continuación) 
               
# sustitución hacia atrás 
x(n) = d(n) / U(n,n) 
repetir para i desde n­1 hasta 1 cada ­1:
x(i) = d(i) 
repetir para j desde i+1 hasta n:
x(i) = x(i) – U(i,j) * x(j) 
x(i) = x(i) / U(i,i)

mostrar x

 
Matriz Inversa
● Es aquella que satisface
−1 −1
[ A][ A] =[ A] [ A]= I
● Supongamos un sistema de 3 x 3. Para
calcular la primera columna de inv A, se
resuelve el sistema

[ ]{ } { }
−1
a11 a 12 a 13 a 11 1
−1
a 21 a 22 a 23 a 21
=0
a 31 a 32 a 33 a −1 0
31
Matriz Inversa
● para calcular la segunda columna de inv A,

[ ]{ }{}
−1
a11 a 12 a 13 a 12 0
−1
a 21 a 22 a 23 a 22
=1
a 31 a 32 a 33 a −1 0
32

● Y la tercera columna de inv A,

[ ]{ }{}
−1
a11 a 12 a 13 a 13 0
−1
a 21 a 22 a 23 a 23
=0
a 31 a 32 a 33 a −1 1
33
Matriz inversa
● Es decir, resolver n sistemas para una matriz de n x n
● Como A no cambia, conviene usar el algoritmo de
descomposición LU visto

Ejemplo 10.3, pag. 293

● Código en Octave para el cálculo de la inversa:


inversa.m
● Código en Python para el cálculo de la inversa:
inversa.py
Cálculo de la Matriz Inversa: Pseudocódigo
leer A, b; iniciar n   # n: número de filas de A
crear L                # matriz identidad con n filas
crear invA             # matriz cuadrada nula con n filas
iniciar x en cero      # x: vector de longitud n 
copiar A en U, x en d  
                                       
# descomposición de A
repetir para i desde 1 hasta n­1:
repetir para j desde i+1 hasta n:
L(j,i) = U(j,i) / U(i,i)
repetir para k desde i hasta n:
U(j,k) = U(j,k) – L(j,i) * U(i,k)  

# se calcula la matriz inversa invA
# z es el número de columna de invA a calcular
repetir para z desde 1 hasta n: 
iniciar b en cero  # b: vector columna de longitud n
b(z) = 1 # b es la columna z de la matriz identidad

# sustitución hacia adelante 
d(1) = b(1) 
repetir para i desde 2 hasta n:
d(i) = b(i) 
repetir para j desde 1 hasta i­1:
d(i) = d(i) – L(i,j) * d(j)
Cálculo de la Matriz Inversa: Pseudocódigo
                                                          (continuación) 
                    
# sustitución hacia atrás 
# se calcula x: columna z de la matriz inversa
x(n) = d(n) / U(n,n) 
repetir para i desde n­1 hasta 1 cada ­1:
x(i) = d(i) 
repetir para j desde i+1 hasta n:
x(i) = x(i) – U(i,j) * x(j) 
x(i) = x(i) / U(i,i)
# se copian los elementos x(i) en la columna z de invA
repetir para i desde 1 hasta n:
invA(i,z) = x(i)

mostrar invA

Este pseudocódigo se construyó a partir del correspondiente a la


eliminación de Gauss con descomposición LU. Se resaltó en
negrita el código agregado.
Problemas 10.1 a 10.8, pag. 303
Sistemas mal condicionados
● Cuatro formas de detectar el mal
condicionamiento:
● Escalar la matriz A e invertirla. Observar si hay
elementos mucho mayores a 1
● Multiplicar la inversa de A por A y estimar qué tan
lejos está el resultado de I
● Invertir la inversa y estimar qué tan lejos está el
resultado de A
● Calcular el número de condición de A, cond[A]
Normas vectoriales y matriciales
● Proporciona una medida del tamaño o
"longitud" de una matriz o vector
● Por ejemplo, el módulo de un vector es una
norma
Normas de vectores y matrices
● Vectores ● Matrices
n n n
∥X∥∞=max∣x i∣ ∥A∥∞=max ∑ ∣aij∣
i=1 i=1 j=1
Número de condición
● Se define como
−1
cond [ A]=∥A∥⋅∥A ∥1
Ejemplo 10.4
● Calcular el número de condición de la matriz de
Hilbert de rango 3

[ ]
1 1
1
2 3
1 1 1
[ A]=
2 3 4
1 1 1
3 4 5
Problemas 10.9 a 10.21
Matrices bandeadas
● Aparecen en la solución numérica de EDs

● Eliminación de Gauss o descomposición LU son ineficientes


● Existen métodos especiales para sistemas con matrices
bandeadas
Métodos iterativos
● Sea el sistema
[ A]{X }={B}
● Si es de 3 x 3, es posible despejar cada
incógnita como
b1−a12 x 2 −a13 x 3
x 1=
a 11
b 2−a 21 x 1−a 23 x 3
x 2=
a 22
b 3−a31 x 1−a 32 x 2
x 3=
a 33
Métodos iterativos
● En general,
i−1 n
bi − ∑ a ij x j − ∑ a ij x j
j=1 j=i1
xi = , i=1,2 , ... , n
aii
● Se debe partir de un conjunto de valores iniciales
para x (pueden ser cero). Se reemplazan en los
miembros derechos para obtener los valores más
actuales en los miembros izquierdos. Se repite
hasta que

| |
j j−1
x −x i i
|εa , i|= j
100 %<ε s , i=1,2,. .. , n
x i
Métodos iterativos
● Método de Gauss-Seidel
i−1 n
b i −∑ aij x kj − ∑ a ij x k−1
j
k  j=1 j=i1
x =
i , i=1,2 , ... , n
a ii

● Método de Jacobi
i−1 n
b i −∑ aij x k −1
j − ∑ a ij x k −1
j
k  j=1 j=i1
x =
i , i=1,2 , ... , n
a ii
Métodos iterativos

Gauss - Seidel Jacobi


Ejemplo 11.3 pag. 311
● Use los métodos de Gauss-Seidel y de Jacobi
para resolver el sistema

[ ]{ } { }
3 −0.1 −0.2 x 1 7.85
0.1 7 −0.3 x 2 = −19.3
0.3 −0.2 10 x 3 71.4
Ejemplo 11.3 pag. 311
● Solución con planilla de cálculo: seidel.ods
jacobi.ods
● Solución en Octave: seidel.m , jacobi.m
● Solución en Python: gaussSeidel.py
exSeidel.py
jacobi.py
exJacobi.py
Método de Gauss-Seidel: Pseudocódigo
leer A, b; iniciar n    # n: número de filas de A
iniciar x, xAnt en cero    # x, xAnt: vectores de longitud n   
iniciar iter=0, iterMax, ea(valor grande), tol

repetir mientras (ea>tol  and  iter<iterMax): 
xAnt = x 
mayor = 0
repetir para i desde 1 hasta n: 
x(i) = b(i)
repetir para j desde 1 hasta n: 
si i es distinto de j: 
x(i) = x(i) – A(i,j) * x(j) 
x(i) = x(i) / A(i,i)
# ea para la incógnita x(i)
eaXi = abs((x(i)­xAnt(i))/x(i))*100
si eaXi > mayor:
mayor = eaXi 
ea = mayor # ea: mayor eaXi en una iteración
iter = iter + 1 

mostrar x
Método de Jacobi: Pseudocódigo
leer A, b; iniciar n    # n: número de filas de A
iniciar x, xAnt en cero    # x, xAnt: vectores de longitud n   
iniciar iter=0, iterMax, ea(valor grande), tol

repetir mientras (ea>tol  and  iter<iterMax): 
xAnt = x 
mayor = 0
repetir para i desde 1 hasta n: 
x(i) = b(i)
repetir para j desde 1 hasta n: 
si i es distinto de j: 
x(i) = x(i) – A(i,j) * xAnt(j) 
x(i) = x(i) / A(i,i)
# ea para la incógnita x(i)
eaXi = abs((x(i)­xAnt(i))/x(i))*100
si eaXi > mayor:
mayor = eaXi 
ea = mayor # ea: mayor eaXi en una iteración
iter = iter + 1 

mostrar x
Criterio de convergencia
● Se demuestra (11.2.1) que el método es
convergente si [A] es diagonalmente
dominante:
n
∣a ii∣ ∑ ∣aij∣ , ∀ i
j=1
j≠i

● Si no se puede cumplir lo anterior, al menos se


intentará
n
∣a ii∣=max∣a ij∣ , ∀ i
j=1
Criterio de convergencia
Estudio de casos
Sistema de reactores
● Balance de masa

∑ Qi⋅C i saliente=∑ Q j⋅C j entrante


i i

c3⋅3.5=2⋅251.5⋅10
Sistema de reactores
Sistema de reactores
6 c1−c 3=50
−3 c13 c2 =0
−c 29 c3=160
−c 2−8 c311 c 4−2 c 5=0
−3 c1−c2 4 c 5=0

[ ]{ } { }
6 0 −1 0 0 c1 50
−3 3 0 0 0 c2 0
0 −1 9 0 0 c 3 = 160
0 −1 −8 11 −2 c 4 0
−3 −1 0 0 4 c 0
5
Análisis de un reticulado
● Equilibrio de fuerzas

∑ F H =0
∑ F V =0
Análisis de un reticulado
Análisis de un reticulado
● Nodo 1
∑ F H =−F 1 cos 30 °F 3 cos 60 °F 1h =0
∑ F V =−F 1 sin 30 °−F 3 sin 60 °F 1v =0
● Nodo 2
∑ F H =F 2 F 1 cos 30 °F 2h H 2=0
∑ F V =F 1 sin 30 °F 2v V 2 =0
● Nodo 3
∑ F H =−F 2 −F 3 cos 60 °F 3h =0
∑ F V =F 3 sin 60 °F 3v V 3=0
Análisis de un reticulado

[ ]{ } { }
0.866 0 −0.5 0 0 0 F1 0
0.5 0 0.866 0 0 0 F 2 −1000
−0.866 −1 0 −1 0 0 F3 0
=
−0.5 0 0 0 −1 0 H 2 0
0 1 0.5 0 0 0 V2 0
0 0 −0.866 0 0 −1 V 0
3
Análisis de un circuito
● Ley de Kirchhoff

∑ i=0
● Ley de Ohm
∑ iR= V
Análisis de un circuito
Análisis de un circuito
● Ley de Kirchhoff
i12 i 52 i 32 =0
i 65 −i 52 −i 54 =0
i 43 −i 32 =0
i 54 −i 43=0
● Ley de Ohm
−i 54 R54 −i 43 R 43 −i 32 R 32 i 52 R 52 =0
−i 65 R 65−i 52 R 52 i 12 R12 −200=0
Análisis de un circuito

[ ]{ } { }
1 1 1 0 0 0 i 12 0
0 −1 0 1 −1 0 i 52 0
0 0 −1 0 0 1 i 32 0
=
0 0 0 0 1 −1 i 65 0
0 10 −10 0 −15 −5 i 54 0
5 −10 0 −20 0 0 i 200
43
Sistemas masa-resorte
● Segunda ley de Newton

∑ F=m a
2
d x
m 2 =F D −F U
dt
● En el reposo, a = 0
∑ F=0
● Ley de Hooke
F=k  x
Sistemas masa-resorte
Sistemas masa-resorte
● Masa 1
2 k  x 2 −x 1 m1 g−k x 1=0
● Masa 2
k  x 3−x 2 m 2 g−2 k  x 2− x 1 =0
● Masa 3
m 3 g−k  x 3− x 2 =0

[ ]{ } { }
3 k −2 k 0 x 1 W 1
−2 k 3 k −k x 2 = W 2
0 −k k x3 W 3

[ K ]{X }={W }
Sistemas masa-resorte
● Con m1 = 2 kg, m2 = 3 kg, m3 = 2.5 kg, k = 10
kg/s2,

[ ]{ } { }
30 −20 0 x 1 19.6
−20 30 −10 x 2 = 29.4
0 −10 10 x 3 24.5

Problemas 12.1 a 12.40 pag. 339


Lo más importante

También podría gustarte