Benemérita Universidad Autónoma de
Puebla
FACULTAD C IENCIAS DE LA E LECTR ÓNICA
M AESTR ÍA EN C IENCIAS DE LA E LECTR ÓNICA , O PCI ÓN EN
AUTOMATIZACI ÓN
Tarea de cómputo 2: Resolver sistemas de ecuaciones lineales por el
método de descomposición L-U
Materia:
Modelado y Simulado
Docente:
Dr. Zemliak Evdokimov Alexandre Mikhailovich
Autor:
Diego Ruiz Sánchez de la Vega
28 de Agosto 2023
Resumen
En el presente trabajo, se ha explorado en profundidad el método de
descomposición L-U como una poderosa técnica para resolver sistemas de
ecuaciones lineales, combinando conceptos matemáticos esenciales con la
implementación práctica en el lenguaje de programación Python versión 3-11.
Mediante la biblioteca numérica NumPy, podemos realizar operaciones matriciales
de manera eficiente y precisa.
Objetivos
Generales
Diseñar un programa para el algoritmo de L-U y resolver unos sistemas de
ecuaciones lineales.
Especı́ficos
• Preparar una implementación de software del algoritmo de L-U en un
lenguaje de alto nivel.
• Preparar un diagrama de flujo que represente el algoritmo de L-U.
1
1 Contenido
1.1 Base Teórica
La resolución de sistemas de ecuaciones lineales es una tarea fundamental en una
amplia gama de disciplinas cientı́ficas y de ingenierı́a. Estos sistemas modelan
relaciones lineales entre variables y proporcionan información crucial para la toma
de decisiones y la comprensión de fenómenos naturales y procesos tecnológicos.
El Método de Descomposición L-U, también conocido como Descomposición LU,
emerge como una herramienta poderosa en este contexto, permitiendo una
resolución numérica eficiente y estructuralmente informativa de sistemas lineales
complejos.
La Descomposición L-U se basa en la idea fundamental de descomponer una
matriz de coeficientes A dada por:
a11 a12 ... a1n
a21 a22 ... a2n
.. .. . . ..
. . . .
an1 an2 ... ann
en dos matrices triangulares: una matriz inferior (L) y una matriz superior (U).
Una matriz L de m x n es triangular inferior si sus entradas satisfacen li j = 0
para i < j. Una matriz U de m x n es triangular superior si sus entradas
satisfacen ui j = 0 para i > j [Sauer, 2013]. Dentro de la representación de las
matrices triangulares, ya sea superior o inferior, existen distintos métodos que
modifican ligeramente el método, la usada en este trabajo es modificación dada por
el método de Crout, en el cual la diagonal de la matriz U se propone como una
diagonal de unos.
El desarrollo del método es el siguiente, se tiene un sistema de ecuaciones
lineales dados por:
B = AX (1)
La matriz A será descompuesta en dos matrices, una matriz inferior L y una
matriz superior U de la siguiente forma:
A = LU (2)
Supongamos una matriz Y que cumple con la ecuación Y = UX, si sustituimos
esta Y en la ecuación (1), obtendremos las dos ecuaciones en las que se basa este
algoritmo:
LY = B ; UX = Y (3)
O de forma reducida
Y = AX (4)
La representación del algoritmo LU es dividida en dos diagramas de flujo, el
primero representa el proceso para la obtención de las matrices L y U, y el segundo
diagrama la obtención del vector solución x usando el proceso anterior, en resumen
tendremos los siguientes diagramas de flujo.
2
3
1.2 Programa en lenguaje de alto nivel
El programa siguiente fue realizado en python 3.11 para realizar el algoritmo L-U,
se utilizo la librerı́a NumPy para el uso mas eficiente de matrices en el programa:
## Algoritmo LU para solucion de un sistema de ecuaciones lineales
import numpy as np
def get_sub(x): # Funcoin para expresar subindices
normal = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456
sub_s = "CDGQwZw"
4
res = [Link](''.join(normal), ''.join(sub_s))
return [Link](res)
def calcularLU(): # Calcular la matriz superior MU y la inferior ML
for i in range(0, n):
for j in range(0, n):
if i>=j:
ML[i][j] = A[i][j]
k = 0
while k<=j-1:
ML[i][j] = ML[i][j]-ML[i][k]*MU[k][j]
k = k+1
else:
MU[i][j] = A[i][j]
k = 0
while k<=i-1:
MU[i][j] = MU[i][j]-ML[i][k]*MU[k][j]
k = k+1
MU[i][j] = MU[i][j]/ML[i][i]
def calcularY(): # Calculo de la matriz Y a partir de Y = L B
for i in range(0, n):
y[i]=B[i]
k = 0
while k<=i-1:
y[i]=y[i]-ML[i][k]*y[k]
k=k+1
y[i] = y[i]/ML[i][i]
def calcularX(): ## Calcular X a partir de UX = Y
for i in range(n-1, -1, -1):
k = 0
x[i] = y[i]
while k<n-i-1:
x[i]=x[i]-MU[i][n-k-1]*x[n-k-1]
k=k+1
def imprimirResultados():
for i in range(0, n):
print("x{}".format(get_sub(str(i+1))), " = ", x[i])
A = [Link]([[10,-2,2,0], # Introduce la matriz A
[-1,11,-1,3],
[2,-1,10,-1],
5
[0,3,-1,8]])
B = [Link]([6,25,-11,15])
n = len(A) # Tama~
no del sistema
# Inicializar vectores
y = [Link](n)
x = [Link](n)
ML = [Link]((n,n))
MU = [Link](n)
print("Resolviendo sistema de ecuaciones...")
calcularLU()
calcularY()
calcularX()
imprimirResultados()
6
1.3 Resultados
El programa anterior con el algoritmo LU se utilizo para la solución de los
siguientes sistemas:
1. Sistema 1
2x1 + x2 + x3 = 7
−2x1 + x2 + x3 = 3
−x1 + 4x2 + x3 = 10
Con resultado igual a:
2. Sistema 2
x1 − x2 + x3 − x4 = −5
x1 + x2 + x3 + x4 = 7
(1/4)x1 + (1/2)x2 + x3 + 2x4 = 7
(1/16)x1 + (1/4)x2 + x3 + 4x4 = 10
Con resultado igual a:
3. Sistema 3
x1 + x2 + 3x4 = 4
2x1 + x2 − x3 + x4 = 1
3x1 − x2 − x3 + 2x4 = −3
−x1 + 2x2 + 2x3 − x4 = 4
Con resultado igual a:
7
4. Sistema 4
10x1 − 2x2 + 2x3 = 6
−x1 + 11x2 − x3 + 3x4 = 25
2x1 − x2 + 10x3 − x4 = −11
3x2 − x3 + 8x4 = 15
Con resultado igual a:
1.4 Conclusiones del trabajo
En el transcurso de esta tarea, hemos explorado en profundidad el Método de
Descomposición L-U como una poderosa técnica para resolver sistemas de
ecuaciones lineales, combinando conceptos matemáticos esenciales con la
implementación práctica en el lenguaje de programación Python.
La Descomposición L-U, también conocida como Descomposición LU, se basa
en la idea de factorizar una matriz de coeficientes en dos matrices triangulares: una
inferior (L) y una superior (U). A través de esta factorización, podemos reescribir
un sistema de ecuaciones lineales en una forma más manejable, lo que facilita la
obtención de soluciones numéricas precisas y eficientes.
Referencias
[1] [Link], ”Análisis Numérico”, Pearson, 2013.