{"id":6392,"date":"2017-11-12T06:05:14","date_gmt":"2017-11-12T11:05:14","guid":{"rendered":"http:\/\/blog.espol.edu.ec\/analisisnumerico\/?p=6392"},"modified":"2026-02-17T05:35:24","modified_gmt":"2026-02-17T10:35:24","slug":"s1eva2012ti_t2_mn-modelo-leontief","status":"publish","type":"post","link":"https:\/\/blog.espol.edu.ec\/algoritmos101\/mn-s1eva20\/s1eva2012ti_t2_mn-modelo-leontief\/","title":{"rendered":"s1Eva2012TI_T2_MN Modelo Leontief"},"content":{"rendered":"\n<p><strong>Ejercicio<\/strong>: <a href=\"https:\/\/blog.espol.edu.ec\/algoritmos101\/mn-evalua\/mn-1e15\/1eva2012ti_t1_mn-modelo-leontief\/\" data-type=\"post\" data-id=\"374\">1Eva2012TI_T2_MN Modelo Leontief<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Planteamiento<\/h2>\n\n\n\n<p class=\"has-text-align-center\">X - TX = D<\/p>\n\n\n\n<p class=\"has-text-align-center\">A(I-T) = D<\/p>\n\n\n\n<p class=\"has-text-align-center\">(I-T)X = D<\/p>\n\n\n\n<p>para el algoritmo:<\/p>\n\n\n\n<p class=\"has-text-align-center\">A = I - T<\/p>\n\n\n\n<p class=\"has-text-align-center\">B = D<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Desarrollo anal\u00edtico<\/h2>\n\n\n\n<p>Se asigna como tarea<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\">Algoritmo en Python<\/h2>\n\n\n\n<p>Resultados del algoritmo<\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code>Matriz aumentada\n&#091;&#091; 6.0e-01 -3.0e-02 -2.0e-02  8.0e+01]\n &#091;-6.0e-02  6.3e-01 -1.0e-01  1.4e+02]\n &#091;-1.2e-01 -1.5e-01  8.1e-01  2.0e+02]]\nPivoteo parcial:\n  Pivoteo por filas NO requerido\nIteraciones Gauss-Seidel\nitera,&#091;X]\n   errado,&#091;diferencia]\n0 &#091;200. 200. 200.]\n  nan\n1 &#091;150.     268.254  318.8125]\n  118.81246325690768 &#091; 50.      68.254  118.8125]\n2 &#091;157.3731 287.8153 323.5272]\n  19.561322471375377 &#091; 7.3731 19.5613  4.7148]\n3 &#091;158.5083 288.6718 323.854 ]\n  1.1352254665011685 &#091;1.1352 0.8565 0.3268]\n4 &#091;158.5621 288.7288 323.8725]\n  0.05698766962200352 &#091;0.0537 0.057  0.0185]\n5 &#091;158.5655 288.732  323.8737]\n  0.0034664322156459093 &#091;0.0035 0.0033 0.0011]\n6 &#091;158.5657 288.7322 323.8737]\n  0.00020071707112379045 &#091;2.0072e-04 1.9671e-04 6.6163e-05]\n7 &#091;158.5657 288.7322 323.8737]\n  1.2040721173889324e-05 &#091;1.2041e-05 1.1649e-05 3.9410e-06]\n8 &#091;158.5657 288.7323 323.8737]\n  7.138053206290351e-07 &#091;7.1381e-07 6.9354e-07 2.3418e-07]\nMetodo de Gauss-Seidel\nnumero de condici\u00f3n: 1.7314308659809885\nX:  &#091;158.5657 288.7323 323.8737]\nerrado: 7.138053206290351e-07\niteraciones: 8<\/code><\/pre>\n\n\n\n<p>Algoritmo en Python<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code alignwide\"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\n# 1Eva2012TI_T2_MN Modelo Leontief\n# Algoritmo Gauss-Seidel\n# soluci\u00f3n de matrices\n# m\u00e9todos iterativos\nimport numpy as np\n \ndef gauss_seidel(A,B,X0,tolera, iteramax=100, vertabla=False, precision=4):\n    ''' M\u00e9todo de Gauss Seidel, tolerancia, vector inicial X0\n        para mostrar iteraciones: vertabla=True\n    '''\n    # Matrices como arreglo, numeros reales\n    A = np.array(A, dtype=float)\n    B = np.array(B, dtype=float)\n    X0 = np.array(X0, dtype=float)\n    tamano = np.shape(A)\n    n = tamano&#x5B;0]\n    m = tamano&#x5B;1]\n \n    # valores iniciales\n    diferencia = 2*tolera*np.ones(n, dtype=float)\n    errado = 2*tolera # np.max(diferencia)\n    \n    tabla = &#x5B;np.copy(X0)] # tabla de iteraciones\n    tabla = np.concatenate((tabla,&#x5B;&#x5B;np.nan]]),\n                            axis=1) # a\u00f1ade errado\n \n    if vertabla==True:\n        print('Iteraciones Gauss-Seidel')\n        print('itera,&#x5B;X]')\n        print('   errado,&#x5B;diferencia]')\n        print(0,X0)\n        print(' ',np.nan)\n        np.set_printoptions(precision)\n \n    itera = 0 # Gauss-Sediel\n    X = np.copy(X0)\n    while (errado&gt;tolera and itera&lt;iteramax):\n         \n        for i in range(0,n,1): # una ecuacion\n            suma = B&#x5B;i]\n            for j in range(0,m,1):\n                if (i!=j):\n                    suma = suma-A&#x5B;i,j]*X&#x5B;j]\n            nuevo = suma\/A&#x5B;i,i]\n            diferencia&#x5B;i] = np.abs(nuevo-X&#x5B;i])\n            X&#x5B;i] = nuevo\n        errado = np.max(diferencia)\n \n        Xfila= np.concatenate((X,&#x5B;errado]),axis=0)\n        tabla = np.concatenate((tabla,&#x5B;Xfila]),axis = 0)\n        itera = itera + 1\n        if vertabla==True:\n            print(itera, X)\n            print(' ', errado,diferencia)\n         \n    # No converge\n    if (itera&gt;iteramax):\n        X = np.nan\n        print('No converge,iteramax superado')\n    return(X,tabla)\n \ndef pivoteafila(A,B,vertabla=False):\n    '''\n    Pivotea parcial por filas, entrega matriz aumentada AB\n    Si hay ceros en diagonal es matriz singular,\n    Tarea: Revisar si diagonal tiene ceros\n    '''\n    A = np.array(A,dtype=float)\n    B = np.array(B,dtype=float)\n    # Matriz aumentada\n    nB = len(np.shape(B))\n    if nB == 1:\n        B = np.transpose(&#x5B;B])\n    AB  = np.concatenate((A,B),axis=1)\n     \n    if vertabla==True:\n        print('Matriz aumentada')\n        print(AB)\n        print('Pivoteo parcial:')\n     \n    # Pivoteo por filas AB\n    tamano = np.shape(AB)\n    n = tamano&#x5B;0]\n    m = tamano&#x5B;1]\n     \n    # Para cada fila en AB\n    pivoteado = 0\n    for i in range(0,n-1,1):\n        # columna desde diagonal i en adelante\n        columna = np.abs(AB&#x5B;i:,i])\n        dondemax = np.argmax(columna)\n         \n        # dondemax no es en diagonal\n        if (dondemax != 0):\n            # intercambia filas\n            temporal = np.copy(AB&#x5B;i,:])\n            AB&#x5B;i,:] = AB&#x5B;dondemax+i,:]\n            AB&#x5B;dondemax+i,:] = temporal\n \n            pivoteado = pivoteado + 1\n            if vertabla==True:\n                print(' ',pivoteado, 'intercambiar filas: ',i,'y', dondemax+i)\n    if vertabla==True:\n        if pivoteado==0:\n            print('  Pivoteo por filas NO requerido')\n        else:\n            print('AB')\n            print(AB)\n    return(AB)\n \n# PROGRAMA B\u00fasqueda de solucion  --------\n# INGRESO\nT = &#x5B;&#x5B;0.40, 0.03, 0.02],\n     &#x5B;0.06, 0.37, 0.10],\n     &#x5B;0.12, 0.15, 0.19]]\nA = np.identity(3) - T\n\nB = &#x5B;80.0, 140.0, 200.0]\n\nX0 = &#x5B;200.0,200.0,200.0]\n\ntolera = 0.00001\niteramax = 100\nverdecimal = 4\n \n# PROCEDIMIENTO\nAB = pivoteafila(A,B,vertabla=True)\nn,m = np.shape(AB)\n \nA = AB&#x5B;:,:n] # separa en A y B\nB = AB&#x5B;:,n]\n \n&#x5B;X, tabla] = gauss_seidel(A,B,X0, tolera,\n                           vertabla=True,\n                           precision=verdecimal)\nn_itera = len(tabla)-1\nerrado = tabla&#x5B;-1,-1]\n \n# numero de condicion\nncond = np.linalg.cond(A)\n \n# SALIDA\nprint('Metodo de Gauss-Seidel')\nprint('numero de condici\u00f3n:', ncond)\nprint('X: ',X)\nprint('errado:',errado)\nprint('iteraciones:', n_itera)\n<\/pre><\/div>","protected":false},"excerpt":{"rendered":"<p>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 Desarrollo anal\u00edtico Se asigna como tarea Algoritmo en Python Resultados del algoritmo Algoritmo en Python<\/p>\n","protected":false},"author":8043,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"wp-custom-template-entrada-mn-ejemplo","format":"standard","meta":{"footnotes":""},"categories":[45],"tags":[58,54],"class_list":["post-6392","post","type-post","status-publish","format-standard","hentry","category-mn-s1eva20","tag-ejemplos-python","tag-mnumericos"],"_links":{"self":[{"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/6392","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/users\/8043"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/comments?post=6392"}],"version-history":[{"count":4,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/6392\/revisions"}],"predecessor-version":[{"id":21713,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/6392\/revisions\/21713"}],"wp:attachment":[{"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/media?parent=6392"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/categories?post=6392"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/tags?post=6392"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}