{"id":10346,"date":"2024-11-20T10:30:46","date_gmt":"2024-11-20T15:30:46","guid":{"rendered":"http:\/\/blog.espol.edu.ec\/analisisnumerico\/?p=10346"},"modified":"2026-04-05T19:56:25","modified_gmt":"2026-04-06T00:56:25","slug":"s1eva2024paoii_t3-matriz-de-distribucion-de-energia-por-sectores","status":"publish","type":"post","link":"https:\/\/blog.espol.edu.ec\/algoritmos101\/mn-s1eva30\/s1eva2024paoii_t3-matriz-de-distribucion-de-energia-por-sectores\/","title":{"rendered":"s1Eva2024PAOII_T3 matriz de distribuci\u00f3n de energ\u00eda por sectores"},"content":{"rendered":"\n<p><strong>Ejercicio<\/strong>: <a href=\"https:\/\/blog.espol.edu.ec\/algoritmos101\/mn-1eva30\/1eva2024paoii_t3-matriz-distribucion-energia-sectores\/\" data-type=\"post\" data-id=\"10317\">1Eva2024PAOII_T3 matriz de distribuci\u00f3n de energ\u00eda por sectores<\/a><\/p>\n\n\n\n<p> La distribuci\u00f3n de energ\u00eda el\u00e9ctrica en un pa\u00eds, considerando distintas fuentes de generaci\u00f3n de energ\u00eda y tipos de consumidores se muestra como ejemplo en la tabla:<\/p>\n\n\n\n<figure class=\"wp-block-table alignwide is-style-stripes\"><table class=\"has-border-color has-contrast-border-color\" style=\"border-width:1px\"><thead><tr><th>Fuente\\Consumidor<\/th><th>Industrial<\/th><th>Comercial<\/th><th>Transporte<\/th><th>Residencial<\/th><\/tr><\/thead><tbody><tr><td><strong>Hidroel\u00e9ctrica<\/strong><\/td><td><strong>0.7<\/strong><\/td><td><strong>0.19<\/strong><\/td><td><strong>0.1<\/strong><\/td><td><strong>0.01<\/strong><\/td><\/tr><tr><td>Gas Natural<\/td><td>0.12<\/td><td>0.18<\/td><td>0.68<\/td><td>0.02<\/td><\/tr><tr><td>Petr\u00f3leos-combustible<\/td><td>0.2<\/td><td>0.38<\/td><td>0.4<\/td><td>0.02<\/td><\/tr><tr><td>E\u00f3lica<\/td><td>0.11<\/td><td>0.23<\/td><td>0.15<\/td><td>0.51<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>total de <strong>fuente de generaci\u00f3n<\/strong> para la tabla es: [<strong>1500<\/strong>,400,600,200]<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">literal a Planteamiento<\/h2>\n\n\n\n<p>Considerando que el factor de la tabla es el factor de consumo por tipo de cliente, para encontrar las cantidades por tipo cliente que se puedan atender con la capacidad de cada \"fuente de generaci\u00f3n\", se plantea:<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> 0.7x+0.19y+0.1z+0.01w = 1500 <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> 0.12x+0.18y+0.68z+0.02w = 400 <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> 0.2x+0.38y+0.4z+0.04w = 600 <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> 0.11x+0.23y+0.15z+0.51w =200<\/span>\n\n\n\n<h2 class=\"wp-block-heading\">literal b. Matriz aumentada y Pivoteo parcial por filas<\/h2>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> \\begin{bmatrix} 0.7 &amp; 0.19&amp; 0.1 &amp; 0.01 &amp;1500 \\\\ 0.12 &amp; 0.18 &amp; 0.68 &amp; 0.02 &amp; 400 \\\\0.2 &amp; 0.38 &amp; 0.4 &amp; 0.02 &amp; 600 \\\\0.11 &amp; 0.23&amp; 0.15 &amp; 0.51 &amp; 200 \\end{bmatrix}<\/span>\n\n\n\n<p>Revisando la primera columna j=0,&nbsp; el mayor valor ya se encuentra en la posici\u00f3n de la diagonal i=0, por lo que no hay cambio de filas<\/p>\n\n\n\n<p>Para la segunda columna j=1, desde la posici\u00f3n de la diagonal i=1, el mayor valor se encuentra en i=2, por lo que intercambian las filas.<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> \\begin{bmatrix} 0.7 &amp; 0.19&amp; 0.1 &amp; 0.01 &amp;1500\\\\0.2 &amp; 0.38 &amp; 0.4 &amp; 0.02 &amp; 600 \\\\ 0.12 &amp; 0.18 &amp; 0.68 &amp; 0.02 &amp; 400 \\\\ 0.11 &amp; 0.23&amp; 0.15 &amp; 0.51 &amp; 200 \\end{bmatrix}<\/span>\n\n\n\n<p>Al observar la tercera columna j=2, desde la diagonal i=2, el valor mayor ya se encuentra en la posici\u00f3n de la diagonal, no hay cambio de filas. Para la \u00faltima fila no se tiene otra fila para comparar, con lo que el pivoteo se termin\u00f3.<\/p>\n\n\n\n<p>literal c. M\u00e9todo de Jacobi<\/p>\n\n\n\n<p>A partir de la matriz del literal anterior, las expresiones quedan:<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> 0.7x+0.19y+0.1z+0.01w = 1500 <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> 0.2x+0.38y+0.4z+0.04w = 600 <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> 0.12x+0.18y+0.68z+0.02w = 400 <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> 0.11x+0.23y+0.15z+0.51w =200<\/span>\n\n\n\n<p>y despejar una inc\u00f3gnita de cada ecuaci\u00f3n se convierte en:<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> x = \\frac{1}{0.7} \\Big( 1500 - (+0.19y+0.1z+0.01w) \\Big) <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> y = \\frac{1}{0.38} \\Big( 600 - (0.2x +0.4z+0.04w) \\Big) <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> z = \\frac{1}{0.68} \\Big(400-(0.12x+0.18y+0.02w)\\Big) <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> w =\\frac{1}{0.51} \\Big(200-(0.11x+0.23y+0.15z) \\Big)<\/span>\n\n\n\n<h2 class=\"wp-block-heading\">literal d. iteraciones<\/h2>\n\n\n\n<p>En el literal c, se sugiere iniciar con el vector X<sub>0<\/sub> = [100,100,100,100].<\/p>\n\n\n\n<p>Como la unidad de medida en las inc\u00f3gnitas es n\u00famero de clientes, la tolerancia puede ajustarse a 0.1.<\/p>\n\n\n\n<p>itera = 0<\/p>\n\n\n\n<p>X<sub>0<\/sub> = [100,100,100,100]<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> x = \\frac{1}{0.7} \\Big( 1500 - (+0.19(100)+0.1(100)+0.01(100)) \\Big) = 2100<\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> y = \\frac{1}{0.38} \\Big( 600 - (0.2(100) +0.4(100)+0.04(100)) \\Big) = 1415.7 <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> z = \\frac{1}{0.68} \\Big(400-(0.12(100)+0.18(100)+0.02(100))\\Big) = 541.17 <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> w =\\frac{1}{0.51} \\Big(200-(0.11(100)+0.23(100)+0.15(100)) \\Big) =296.1 <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> errado = max| [ 2100-100, 1415.7-100, 541.17-100, 296.1-100] | <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> errado = max| [ 2000, 1315.7,441.17,196.1] | = 2000 <\/span>\n\n\n\n<p>itera = 1<\/p>\n\n\n\n<p>X<sub>0<\/sub> = [ 2100, 1415.7, 541.1, 296.1 ]<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> x = \\frac{1}{0.7} \\Big( 1500 - (+0.19(1415.7)+0.1(541.1)+0.01(296.1)) \\Big) = 1677.0<\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> y = \\frac{1}{0.38} \\Big( 600 - (0.2(2100) +0.4(541.1)+0.04( 296.1)) \\Big) = -111.55 <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> z = \\frac{1}{0.68} \\Big(400-(0.12(2100)+0.18(1415.7)+0.02(541.1))\\Big) = -165.82 <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> w =\\frac{1}{0.51} \\Big(200-(0.11( 2100)+0.23( 1415.7)+0.15(541.1)) \\Big) =-858.44 <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> errado = max| [ 1677.0 - 2100,-111.55 -1415.7,<\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> -165.82- 541.17, -858.44- 296.1] | <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> errado = max| [ -423, -1527.25 ,-706.99 ,-1154.54] | = 1527.25 <\/span>\n\n\n\n<p>itera = 2<\/p>\n\n\n\n<p><strong>tarea..<\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">literal e. convergencia y revisi\u00f3n de resultados obtenidos<\/h2>\n\n\n\n<p>Para el asunto de convergencia, el error disminuye entre iteraciones, por lo que el m\u00e9todo es convergente.<\/p>\n\n\n\n<p>Analizando los resultados desde la segunda iteraci\u00f3n, se obtienen valores negativos, lo que no es acorde al concepto del problema. Se continuar\u00e1n con las iteraciones siguientes y se observar\u00e1 el resultado para dar mayor \"opini\u00f3n\" sobre lo obtenido.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">literal f N\u00famero de condici\u00f3n<\/h2>\n\n\n\n<p>N\u00famero de condici\u00f3n = 5.77 que al ser \"bajo y cercano a 1\" se considera que el m\u00e9todo converge.<\/p>\n\n\n\n<p>Resultados con el algoritmo<\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code>Iteraciones Jacobi\nitera,&#091;X],errado\n0 &#091;100. 100. 100. 100.] 1.0\n1 &#091;2100.      1415.78947  541.17647  296.07843] 2000.0\n2 &#091;1677.03081 -111.55831 -165.82893 -858.44716] 1527.3477812177503\n3 &#091;2209.09063  916.03777  347.06727  129.52816] 1027.5960799832396\n4 &#091;1842.78688   44.11685  -47.89447 -599.50735] 871.9209205662409\n5 &#091;2146.28903  691.02779  268.99219  -11.1162 ] 646.9109334007268\n...\n40 &#091;2022.87519  383.13614  137.36642 -257.41944] 0.11802984805018468\n41 &#091;2022.91669  383.22837  137.41009 -257.33833] 0.09223623893257127\nnumero de condici\u00f3n: 5.7772167744910625\nrespuesta X: \n&#091;2022.91669  383.22837  137.41009 -257.33833]\niterado, incluyendo X0:  42<\/code><\/pre>\n\n\n\n<p>El resultado muestra que los clientes residenciales ser\u00e1n -257 seg\u00fan las ecuaciones planteadas. Lo que se interpreta seg\u00fan lo presentado por los estudiantes:<\/p>\n\n\n\n<p>1. energ\u00eda insuficiente: causa por los apagones diarios en el pa\u00eds en \u00e9stos d\u00edas.<\/p>\n\n\n\n<p>2. Se requiere mejorar el planteamiento, pues la respuesta no debe contener valores negativos seg\u00fan el concepto planteado en el ejercicio.<\/p>\n\n\n\n<p>Se considerar\u00e1n ambas v\u00e1lidas para la evaluaci\u00f3n al observar que el resultado num\u00e9rico es correcto, pero no es acorde al ejercicio.<\/p>\n\n\n\n<p>Instrucciones en Python<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\n# 1Eva_2024PAOII_T3 matriz de distribuci\u00f3n de energ\u00eda por sectores\nimport numpy as np\n\n#INGRESO\nA= &#x5B;&#x5B;0.7,0.19,0.1,0.01],\n    &#x5B;0.12,0.18,0.68,0.02],\n    &#x5B;0.2,0.38,0.4,0.02],\n    &#x5B;0.11,0.23,0.15,0.51]]\n\nB = &#x5B;1500,400,600,200]\n\n# PROCEDIMIENTO\nA = np.array(A,dtype=float)\nB = np.transpose(&#x5B;np.array(B)])\n\nX0 = &#x5B;100,100,100,100]\ntolera = 0.1\niteramax = 100\nverdecimal = 5\n\ndef jacobi(A,B,X0, tolera, iteramax=100, vertabla=False, precision=4):\n    ''' M\u00e9todo de Jacobi, tolerancia, vector inicial X0\n        para mostrar iteraciones: vertabla=True\n    '''\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    diferencia = np.ones(n, dtype=float)\n    errado = np.max(diferencia)\n    X = np.copy(X0)\n    xnuevo = np.copy(X0)\n    tabla = &#x5B;np.copy(X0)]\n\n    itera = 0\n    if vertabla==True:\n        print('Iteraciones Jacobi')\n        print('itera,&#x5B;X],errado')\n        print(itera, xnuevo, errado)\n        np.set_printoptions(precision)\n    while not(errado&lt;=tolera or itera&gt;iteramax):\n        \n        for i in range(0,n,1):\n            nuevo = B&#x5B;i]\n            for j in range(0,m,1):\n                if (i!=j): # excepto diagonal de A\n                    nuevo = nuevo-A&#x5B;i,j]*X&#x5B;j]\n            nuevo = nuevo\/A&#x5B;i,i]\n            xnuevo&#x5B;i] = nuevo\n        diferencia = np.abs(xnuevo-X)\n        errado = np.max(diferencia)\n        X = np.copy(xnuevo)\n        \n        tabla = np.concatenate((tabla,&#x5B;X]),axis = 0)\n\n        itera = itera + 1\n        if vertabla==True:\n            print(itera, xnuevo, errado)\n\n    # No converge\n    if (itera&gt;iteramax):\n        X=itera\n        print('iteramax superado, No converge')\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    return(AB)\n\n# PROGRAMA B\u00fasqueda de solucion  --------\n\n# PROCEDIMIENTO\nAB = pivoteafila(A,B,vertabla=True)\n# separa matriz aumentada en A y B\n&#x5B;n,m] = np.shape(AB)\nA = AB&#x5B;:,:m-1]\nB = AB&#x5B;:,m-1]\n\n&#x5B;X, puntos] = jacobi(A,B,X0,tolera,vertabla=True,precision=verdecimal)\niterado = len(puntos)\n\n# numero de condicion\nncond = np.linalg.cond(A)\n\n# SALIDA\nprint('numero de condici\u00f3n:', ncond)\nprint('respuesta X: ')\nprint(X)\nprint('iterado, incluyendo X0: ', iterado)\n<\/pre><\/div>","protected":false},"excerpt":{"rendered":"<p>Ejercicio: 1Eva2024PAOII_T3 matriz de distribuci\u00f3n de energ\u00eda por sectores La distribuci\u00f3n de energ\u00eda el\u00e9ctrica en un pa\u00eds, considerando distintas fuentes de generaci\u00f3n de energ\u00eda y tipos de consumidores se muestra como ejemplo en la tabla: Fuente\\Consumidor Industrial Comercial Transporte Residencial Hidroel\u00e9ctrica 0.7 0.19 0.1 0.01 Gas Natural 0.12 0.18 0.68 0.02 Petr\u00f3leos-combustible 0.2 0.38 0.4 [&hellip;]<\/p>\n","protected":false},"author":8043,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"wp-custom-template-p-ginas-mn-ejemplos","format":"standard","meta":{"footnotes":""},"categories":[46],"tags":[58,54],"class_list":["post-10346","post","type-post","status-publish","format-standard","hentry","category-mn-s1eva30","tag-ejemplos-python","tag-mnumericos"],"_links":{"self":[{"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/10346","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=10346"}],"version-history":[{"count":3,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/10346\/revisions"}],"predecessor-version":[{"id":23822,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/10346\/revisions\/23822"}],"wp:attachment":[{"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/media?parent=10346"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/categories?post=10346"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/tags?post=10346"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}