Ejercicio: 1Eva2012TI_T2_MN Modelo Leontief
Planteamiento
X - TX = D
A(I-T) = D
(I-T)X = D
para el algoritmo:
A = I - T
B = D
Algoritmo en Python
Resultados del algoritmo
respuesta X:
[[158.56573701]
[288.73225044]
[323.87373581]]
verificar A.X=B:
[[ 79.99999997]
[139.99999998]
[200. ]]
>>> itera
8
>>>
Algoritmo en Python
# Método de Gauss-Seidel
# solución de sistemas de ecuaciones
# por métodos iterativos
import numpy as np
# INGRESO
T = np.array([[0.40, 0.03, 0.02],
[0.06, 0.37, 0.10],
[0.12, 0.15, 0.19]])
A = np.identity(3) - T
B = np.array([80.0, 140.0, 200.0],dtype=float)
X0 = np.array([200.0,200.0,200.0])
tolera = 0.00001
iteramax = 100
# PROCEDIMIENTO
# Gauss-Seidel
tamano = np.shape(A)
n = tamano[0]
m = tamano[1]
# valores iniciales
X = np.copy(X0)
diferencia = np.ones(n, dtype=float)
errado = 2*tolera
itera = 0
while not(errado<=tolera or itera>iteramax):
# por fila
for i in range(0,n,1):
# por columna
suma = 0
for j in range(0,m,1):
# excepto diagonal de A
if (i!=j):
suma = suma-A[i,j]*X[j]
nuevo = (B[i]+suma)/A[i,i]
diferencia[i] = np.abs(nuevo-X[i])
X[i] = nuevo
errado = np.max(diferencia)
itera = itera + 1
# Respuesta X en columna
X = np.transpose([X])
# revisa si NO converge
if (itera>iteramax):
X=0
# revisa respuesta
verifica = np.dot(A,X)
# SALIDA
print('respuesta X: ')
print(X)
print('verificar A.X=B: ')
print(verifica)