{"id":3529,"date":"2017-12-17T06:15:54","date_gmt":"2017-12-17T11:15:54","guid":{"rendered":"http:\/\/blog.espol.edu.ec\/matg1013\/?p=3529"},"modified":"2026-02-19T05:22:09","modified_gmt":"2026-02-19T10:22:09","slug":"s1eva2017ti_t4-componentes-electricos","status":"publish","type":"post","link":"https:\/\/blog.espol.edu.ec\/algoritmos101\/mn-s1eva20\/s1eva2017ti_t4-componentes-electricos\/","title":{"rendered":"s1Eva2017TI_T4 Componentes el\u00e9ctricos"},"content":{"rendered":"\n<p><strong>Ejercicio<\/strong>: <a href=\"https:\/\/blog.espol.edu.ec\/algoritmos101\/mn-evalua\/mn-1e20\/1eva2017ti_t4-componentes-electricos\/\" data-type=\"post\" data-id=\"507\">1Eva2017TI_T4 Componentes el\u00e9ctricos<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Desarrollo Anal\u00edtico<\/h2>\n\n\n\n<p>Solo puede usar las cantidades disponibles de material indicadas, por lo que las cantidades desconocidas de producci\u00f3n por componente se convierten en las inc\u00f3gnitas x<sub>0<\/sub>, x<sub>1<\/sub>, x<sub>2<\/sub>. Se usa el \u00edndice cero por compatibilidad con las instrucciones Python.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th><\/th><th>Material 1<\/th><th>Material 2<\/th><th>Material 3<\/th><\/tr><\/thead><tbody><tr><td>Componente 1<\/td><td>5 x<sub>0<\/sub><\/td><td>9 x<sub>0<\/sub><\/td><td>3 x<sub>0<\/sub><\/td><\/tr><tr><td>Componente 2<\/td><td>7 x<sub>1<\/sub><\/td><td>7 x<sub>1<\/sub><\/td><td>16 x<sub>1<\/sub><\/td><\/tr><tr><td>Componente 3<\/td><td>9 x<sub>2<\/sub><\/td><td>3 x<sub>2<\/sub><\/td><td>4 x<sub>2<\/sub><\/td><\/tr><tr><td>Total<\/td><td>945<\/td><td>987<\/td><td>1049<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Se plantean las f\u00f3rmulas a resolver:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>5 x<sub>0<\/sub> +  7 x<sub>1<\/sub> + 9 x<sub>2<\/sub> = 945\n9 x<sub>0<\/sub> +  7 x<sub>1<\/sub> + 3 x<sub>2<\/sub> = 987\n3 x<sub>0<\/sub> + 16 x<sub>1<\/sub> + 4 x<sub>2<\/sub> = 1049<\/code><\/pre>\n\n\n\n<p>Se reescriben en la forma matricial AX=B<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> \\begin{bmatrix} 5 &amp; 7 &amp; 9\\\\ 9 &amp; 7 &amp; 3 \\\\ 3 &amp; 16 &amp; 4 \\end{bmatrix} \\begin{bmatrix} x_0 \\\\ x_1 \\\\ x_2 \\end{bmatrix}= \\begin{bmatrix} 945 \\\\ 987 \\\\ 1049 \\end{bmatrix}<\/span>\n\n\n\n<p>Se reordena, pivoteando por filas para tener la matriz diagonalmente dominante:<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> \\begin{bmatrix} 9 &amp; 7 &amp; 3\\\\ 3 &amp; 16 &amp; 4 \\\\ 5 &amp; 7 &amp; 9 \\end{bmatrix} \\begin{bmatrix} x_0 \\\\ x_1 \\\\ x_2 \\end{bmatrix}= \\begin{bmatrix} 987 \\\\ 1049 \\\\ 945 \\end{bmatrix}<\/span>\n\n\n\n<p>Se determina el n\u00famero de condici\u00f3n de la matriz, por facilidad con Python:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>numero de condicion: 4.396316324708121<\/code><\/pre>\n\n\n\n<p>Obtenido con:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\n# 1Eva_IT2017_T4 Componentes el\u00e9ctricos\nimport numpy as np\nimport matplotlib.pyplot as plt\n\n# INGRESO\nA = &#x5B;&#x5B;9, 7,3],\n     &#x5B;3,16,4],\n     &#x5B;5, 7,9]]\n\nB = &#x5B;987,1049,945]\n\n# PROCEDIMIENTO\nA = np.array(A,dtype=float)\nB = np.array(B,dtype=float)\n\n# numero de condicion\nncond = np.linalg.cond(A)\n\n# SALIDA\nprint('numero de condicion:', ncond)\n<\/pre><\/div>\n\n\n<p>Recordando que la matriz debe ser tipo real, se a\u00f1ade un punto a los d\u00edgitos.<\/p>\n\n\n\n<p>El n\u00famero de condici\u00f3n es cercano a 1, por lo que el sistema si deber\u00eda converger a la soluci\u00f3n.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Desarrollo con Python<\/h2>\n\n\n\n<p>La forma AX=B permite usar los algoritmos desarrollados, obteniendo la soluci\u00f3n. Se verifica el resultado al realizar la multiplicaci\u00f3n de A con el vector respuesta, debe ser el vector B con un error menor al tolerado.<\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code>Matriz aumentada\n&#091;&#091;   9.    7.    3.  987.]\n &#091;   3.   16.    4. 1049.]\n &#091;   5.    7.    9.  945.]]\nPivoteo parcial:\n  Pivoteo por filas NO requerido\nIteraciones Jacobi\nitera,&#091;X]\n     ,errado,|diferencia|\n0 &#091;0. 0. 0.]\n  nan\n1 &#091;109.66667  65.5625  105.     ]\n  109.66666666666667 &#091;109.66667  65.5625  105.     ]\n2 &#091;23.67361 18.75    -6.91898]\n  111.91898148148148 &#091; 85.99306  46.8125  111.91898]\n3 &#091;97.38966 62.85344 77.26466]\n  84.18364197530865 &#091;73.71605 44.10344 84.18364]\n4 &#091;35.02577 27.98577  2.00862]\n  75.2560388803155 &#091;62.36389 34.86767 75.25604]\n...\n83 &#091;63.00004 45.00002 35.00005]\n  0.00010522690335079687 &#091;8.85109e-05 5.08730e-05 1.05227e-04]\n84 &#091;62.99997 44.99998 34.99996]\n  8.874058288199649e-05 &#091;7.46435e-05 4.29025e-05 8.87406e-05]\nMetodo de Jacobi\nnumero de condici\u00f3n: 4.396316324708121\nX:  &#091;62.99997 44.99998 34.99996]\nerrado: 8.874058288199649e-05\niteraciones: 84<\/code><\/pre>\n\n\n\n<p>Si interpreta el resultado, se debe obtener solo la parte entera [63,45,35] pues las unidades producidas son n\u00fameros enteros.<\/p>\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# 1Eva_IT2017_T4 Componentes el\u00e9ctricos\n# Metodo de Jacobi para sistemas de ecuaciones\nimport numpy as np\n \ndef jacobi(A,B,X0, tolera, iteramax=100,\n           vertabla=False, precision=4):\n    ''' M\u00e9todo de Jacobi, tolerancia, vector inicial X0\n        para mostrar iteraciones y tabla: 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) # tama\u00f1o 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    tabla = &#x5B;np.copy(X0)] # tabla de iteraciones\n    tabla = np.concatenate((tabla,&#x5B;&#x5B;np.nan]]),\n                            axis=1) # errado\n \n    if vertabla==True:\n        print('Iteraciones Jacobi')\n        print('itera,&#x5B;X]')\n        print('     ,errado,|diferencia|')\n        print(0,X0)\n        print(' ',np.nan)\n        np.set_printoptions(precision)\n \n    itera = 0 # Jacobi\n    X = np.copy(X0)\n    Xnuevo = 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): # un coeficiente\n                if (i!=j): # excepto diagonal de A\n                    suma = suma-A&#x5B;i,j]*X&#x5B;j]\n            Xnuevo&#x5B;i] = suma\/A&#x5B;i,i]\n        diferencia = abs(Xnuevo-X)\n        errado = np.max(diferencia)\n        X = np.copy(Xnuevo)\n \n        Xfila = np.concatenate((Xnuevo,&#x5B;errado]),axis=0)\n        tabla = np.concatenate((tabla,&#x5B;Xfila]),axis=0)\n \n        itera = itera + 1\n \n        if vertabla==True:\n            print(itera, Xnuevo)\n            print(' ',errado,diferencia)\n \n    # No converge\n    if (itera&gt;iteramax):\n        X = np.nan\n        print('No converge,iteramax superado')\n \n    if vertabla==True:\n        X = &#x5B;X,tabla]\n    return(X)\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\nA = &#x5B;&#x5B;9, 7,3],\n     &#x5B;3,16,4],\n     &#x5B;5, 7,9]]\n\nB = &#x5B;987,1049,945]\n \nX0 = &#x5B;0,0,0]\ntolera = 0.0001\niteramax = 100\nverdecimal = 5\n \n# PROCEDIMIENTO\nAB = pivoteafila(A,B,vertabla=True)\nn,m = np.shape(AB)\nA = AB&#x5B;:,:n] # separa en A y B\nB = AB&#x5B;:,n]\n \n&#x5B;X, tabla] = jacobi(A,B,X0,tolera,iteramax,\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 Jacobi')\nprint('numero de condici\u00f3n:', ncond)\nprint('X: ',X)\nprint('errado:',errado)\nprint('iteraciones:', n_itera)\n\n# GRAFICA de iteraciones\nerrados = tabla&#x5B;:,n]\n \nimport matplotlib.pyplot as plt\n# grafica de error por iteracion\nfig2D = plt.figure()\ngraf = fig2D.add_subplot(111)\ngraf.plot(errados)\ngraf.set_xlabel('itera')\ngraf.set_ylabel('|error|')\ngraf.set_title('M\u00e9todo de Jacobi: error&#x5B;itera]')\ngraf.grid()\n \nplt.show()\n<\/pre><\/div>\n\n\n<p>al ejecutar el algoritmo se determina que se requieren 83 iteraciones para cumplir con con el valor de error tolerado.<\/p>\n\n\n\n<p>La gr\u00e1fica de errores por iteraci\u00f3n muestra que es convergente:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"640\" height=\"480\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2017\/12\/1Eva2017TI_T4ComponentesElectricos01.png\" alt=\"1Eva2017TI_T4 Componentes El\u00e9ctricos gr\u00e1fica de errores por iteraci\u00f3n 01\" class=\"wp-image-21748\" \/><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>Ejercicio: 1Eva2017TI_T4 Componentes el\u00e9ctricos Desarrollo Anal\u00edtico Solo puede usar las cantidades disponibles de material indicadas, por lo que las cantidades desconocidas de producci\u00f3n por componente se convierten en las inc\u00f3gnitas x0, x1, x2. Se usa el \u00edndice cero por compatibilidad con las instrucciones Python. Material 1 Material 2 Material 3 Componente 1 5 x0 9 [&hellip;]<\/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-3529","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\/3529","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=3529"}],"version-history":[{"count":4,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/3529\/revisions"}],"predecessor-version":[{"id":21750,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/3529\/revisions\/21750"}],"wp:attachment":[{"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/media?parent=3529"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/categories?post=3529"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/tags?post=3529"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}