{"id":3619,"date":"2017-11-15T06:15:17","date_gmt":"2017-11-15T11:15:17","guid":{"rendered":"http:\/\/blog.espol.edu.ec\/matg1013\/?p=3619"},"modified":"2026-02-17T06:47:14","modified_gmt":"2026-02-17T11:47:14","slug":"s1eva2015ti_t4-lingotes-metales","status":"publish","type":"post","link":"https:\/\/blog.espol.edu.ec\/algoritmos101\/mn-s1eva20\/s1eva2015ti_t4-lingotes-metales\/","title":{"rendered":"s1Eva2015TI_T4 Lingotes metales"},"content":{"rendered":"\n<p><strong>Ejercicio<\/strong>: <a href=\"https:\/\/blog.espol.edu.ec\/algoritmos101\/mn-evalua\/mn-1e15\/1eva2015ti_t4-lingotes-metales\/\" data-type=\"post\" data-id=\"278\">1Eva2015TI_T4 Lingotes metales<\/a><\/p>\n\n\n\n<p>Se plantea que cada lingote debe aportar una proporci\u00f3n x<sub>i<\/sub> al lingote nuevo a ser fundido.<\/p>\n\n\n\n<p>Se dispone de los compuestos de cada lingote por filas:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>             &#091;oro,plata,cobre,esta\u00f1o]\n\ncompuesto = &#091;&#091; 20, 50, 20, 10],\n             &#091; 30, 40, 10, 20],\n             &#091; 20, 40, 10, 30],\n             &#091; 50, 20, 20, 10]]\nproporcion = &#091; 27, 39.5, 14, 19.5]<\/code><\/pre>\n\n\n\n<p>El contenido final de cada componente basado en los aportes x<sub>i<\/sub> de cada lingote para cada componente.<\/p>\n\n\n\n<p>Ejemplo para los 27 gramos de oro<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\">20x_1 + 30x_2+ 20x_3 + 50x_4 = 27<\/span>\n\n\n\n<p>Se debe observar que se est\u00e1 sumando la columna, por lo que para el algoritmo se est\u00e1 usando A transpuesta:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>A = np.array(compuesto,dtype=float)\nA = np.transpose(A)\nB = proporcion<\/code><\/pre>\n\n\n\n<p>se realiza el mismo procedimiento para los otros tipos de metal.<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\">50x_1 + 40x_2+ 40x_3 + 20x_4 = 39.5<\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\">20x_1 + 10x_2+ 10x_3 + 20x_4 = 14<\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\">10x_1 + 20x_2+ 30x_3 + 10x_4 = 19.5<\/span>\n\n\n\n<p>Las ecuaciones se escriben en la forma matricial Ax=B<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\">\\begin{bmatrix} 20 &amp;&amp; 30&amp;&amp; 20 &amp;&amp;50 \\\\ 50 &amp;&amp; 40 &amp;&amp; 40 &amp;&amp; 20 \\\\ 20 &amp;&amp; 10 &amp;&amp; 10 &amp;&amp; 20 \\\\ 10 &amp;&amp; 20 &amp;&amp; 30 &amp;&amp; 10 \\end{bmatrix} = \\begin{bmatrix} x_1 \\\\ x_2 \\\\x_3 \\\\ x_4 \\end{bmatrix} = \\begin{bmatrix} 27 \\\\ 39.5 \\\\ 14 \\\\ 19.5 \\end{bmatrix}<\/span>\n\n\n\n<p>Para resolver se plantea la matriz aumentada<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\">\\begin{bmatrix} 20 &amp;&amp; 30&amp;&amp; 20 &amp;&amp;50 &amp;&amp; 27\\\\ 50 &amp;&amp; 40 &amp;&amp; 40 &amp;&amp; 20 &amp;&amp; 39.5\\\\ 20 &amp;&amp; 10 &amp;&amp; 10 &amp;&amp; 20 &amp;&amp; 14 \\\\ 10 &amp;&amp; 20 &amp;&amp; 30 &amp;&amp; 10 &amp;&amp; 19.5 \\end{bmatrix} <\/span>\n\n\n\n<p>se pivotea por filas la matriz:<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\">\\begin{bmatrix} 50 &amp;&amp; 40 &amp;&amp; 40 &amp;&amp; 20 &amp;&amp; 39.5\\\\ 20 &amp;&amp; 30&amp;&amp; 20 &amp;&amp;50 &amp;&amp; 27\\\\ 10 &amp;&amp; 20 &amp;&amp; 30 &amp;&amp; 10 &amp;&amp; 19.5 \\\\ 20 &amp;&amp; 10 &amp;&amp; 10 &amp;&amp; 20 &amp;&amp; 14 \\end{bmatrix} <\/span>\n\n\n\n<p>Para eliminar hacia adelante:<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\">\\begin{bmatrix} 50 &amp;&amp; 40 &amp;&amp; 40 &amp;&amp; 20 &amp;&amp; 39.5 \\\\ 20 - 50\\frac{20}{50} &amp;&amp; 30-40\\frac{20}{50} &amp;&amp; 20-40\\frac{20}{50} &amp;&amp; 50-20\\frac{20}{50} &amp;&amp; 27-39.5\\frac{20}{50}\\\\ 10 - 50\\frac{10}{50} &amp;&amp; 20-40\\frac{10}{50} &amp;&amp; 30-40\\frac{10}{50} &amp;&amp; 10-20\\frac{10}{50} &amp;&amp; 19.5-39.5\\frac{10}{50} \\\\ 20 - 50\\frac{20}{50} &amp;&amp; 10-40\\frac{20}{50} &amp;&amp; 10-40\\frac{20}{50} &amp;&amp; 20-20\\frac{20}{50} &amp;&amp; 14-39.5\\frac{20}{50} \\end{bmatrix} <\/span>\n\n\n\n<p>continuando con el desarrollo:<\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code>Matriz aumentada\n&#091;&#091;20.  30.  20.  50.  27. ]\n &#091;50.  40.  40.  20.  39.5]\n &#091;20.  10.  10.  20.  14. ]\n &#091;10.  20.  30.  10.  19.5]]\nPivoteo parcial:\n  1 intercambiar filas:  0 y 1\n  2 intercambiar filas:  2 y 3\nAB\n&#091;&#091;50.  40.  40.  20.  39.5]\n &#091;20.  30.  20.  50.  27. ]\n &#091;10.  20.  30.  10.  19.5]\n &#091;20.  10.  10.  20.  14. ]]\nElimina hacia adelante:\n fila i: 0  pivote: 50.0\n  fila k: 1  factor: 0.4\n  fila k: 2  factor: 0.2\n  fila k: 3  factor: 0.4\n&#091;&#091;50.  40.  40.  20.  39.5]\n &#091; 0.  14.   4.  42.  11.2]\n &#091; 0.  12.  22.   6.  11.6]\n &#091; 0.  -6.  -6.  12.  -1.8]]\n fila i: 1  pivote: 14.0\n  fila k: 2  factor: 0.8571428571428571\n  fila k: 3  factor: -0.42857142857142855\n&#091;&#091; 50.      40.      40.      20.      39.5   ]\n &#091;  0.      14.       4.      42.      11.2   ]\n &#091;  0.       0.      18.5714 -30.       2.    ]\n &#091;  0.       0.      -4.2857  30.       3.    ]]\n fila i: 2  pivote: 18.571428571428573\n  fila k: 3  factor: -0.23076923076923075\n&#091;&#091; 50.      40.      40.      20.      39.5   ]\n &#091;  0.      14.       4.      42.      11.2   ]\n &#091;  0.       0.      18.5714 -30.       2.    ]\n &#091;  0.       0.       0.      23.0769   3.4615]]\n fila i: 3  pivote: 23.076923076923077\n&#091;&#091; 50.      40.      40.      20.      39.5   ]\n &#091;  0.      14.       4.      42.      11.2   ]\n &#091;  0.       0.      18.5714 -30.       2.    ]\n &#091;  0.       0.       0.      23.0769   3.4615]]\nElimina hacia Atr\u00e1s:\n fila i: 3  pivote: 23.076923076923077\n  fila k: 2  factor: -1.3\n  fila k: 1  factor: 1.82\n  fila k: 0  factor: 0.8666666666666667\n&#091;&#091;50.     40.     40.      0.     36.5   ]\n &#091; 0.     14.      4.      0.      4.9   ]\n &#091; 0.      0.     18.5714  0.      6.5   ]\n &#091; 0.      0.      0.      1.      0.15  ]]\n fila i: 2  pivote: 18.571428571428573\n  fila k: 1  factor: 0.21538461538461537\n  fila k: 0  factor: 2.1538461538461537\n&#091;&#091;50.   40.    0.    0.   22.5 ]\n &#091; 0.   14.    0.    0.    3.5 ]\n &#091; 0.    0.    1.    0.    0.35]\n &#091; 0.    0.    0.    1.    0.15]]\n fila i: 1  pivote: 14.0\n  fila k: 0  factor: 2.857142857142857\n&#091;&#091;50.    0.    0.    0.   12.5 ]\n &#091; 0.    1.    0.    0.    0.25]\n &#091; 0.    0.    1.    0.    0.35]\n &#091; 0.    0.    0.    1.    0.15]]\n fila i: 0  pivote: 50.0\n&#091;&#091;1.   0.   0.   0.   0.25]\n &#091;0.   1.   0.   0.   0.25]\n &#091;0.   0.   1.   0.   0.35]\n &#091;0.   0.   0.   1.   0.15]]\nsoluci\u00f3n X: \n&#091;0.25 0.25 0.35 0.15]<\/code><\/pre>\n\n\n\n<p>Las proporciones de cada lingote a usar para el nuevo lingote que cumple con lo solicitado son:<\/p>\n\n\n\n<p>[0.25, 0.25, 0.35, 0.15]<\/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>usado para la soluci\u00f3n es:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code alignwide\"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\n# 1Eva2015TI_T4 Lingotes metales\n# M\u00e9todo de Gauss-Jordan\n# Sistemas de Ecuaciones A.X=B\nimport numpy as np\n \ndef gauss_eliminaAtras(AB, vertabla=False,\n                       inversa=False,\n                       casicero = 1e-15):\n    ''' Gauss-Jordan elimina hacia atr\u00e1s\n    Requiere la matriz triangular inferior\n    Tarea: Verificar que sea triangular inferior\n    '''\n    tamano = np.shape(AB)\n    n = tamano&#x5B;0]\n    m = tamano&#x5B;1]\n     \n    ultfila = n-1\n    ultcolumna = m-1\n    if vertabla==True:\n        print('Elimina hacia Atr\u00e1s:')\n         \n    for i in range(ultfila,0-1,-1):\n        pivote = AB&#x5B;i,i]\n        atras = i-1  # arriba de la fila i\n        if vertabla==True:\n            print(' fila i:',i,' pivote:', pivote)\n             \n        for k in range(atras,0-1,-1):\n            if np.abs(AB&#x5B;k,i])&gt;=casicero:\n                factor = AB&#x5B;k,i]\/pivote\n                AB&#x5B;k,:] = AB&#x5B;k,:] - factor*AB&#x5B;i,:]\n                 \n                # redondeo a cero\n                for j in range(0,m,1): \n                    if np.abs(AB&#x5B;k,j])&lt;=casicero:\n                        AB&#x5B;k,j]=0\n                if vertabla==True:\n                    print('  fila k:',k,\n                          ' factor:',factor)\n            else:\n                print('  pivote:', pivote,'en fila:',i,\n                      'genera division para cero')\n        AB&#x5B;i,:] = AB&#x5B;i,:]\/AB&#x5B;i,i] # diagonal a unos\n         \n        if vertabla==True:\n            print(AB)\n     \n    respuesta = np.copy(AB&#x5B;:,ultcolumna])\n    if inversa==True: # matriz inversa\n        respuesta = np.copy(AB&#x5B;:,n:])\n    return(respuesta)\n \ndef gauss_eliminaAdelante(AB,vertabla=False,\n                          lu=False,casicero = 1e-15):\n    ''' Gauss elimina hacia adelante\n    tarea: verificar t\u00e9rminos cero\n    '''\n    tamano = np.shape(AB)\n    n = tamano&#x5B;0]\n    m = tamano&#x5B;1]\n    if vertabla==True:\n        print('Elimina hacia adelante:')\n    for i in range(0,n,1):\n        pivote = AB&#x5B;i,i]\n        adelante = i+1\n        if vertabla==True:\n            print(' fila i:',i,' pivote:', pivote)\n        for k in range(adelante,n,1):\n            if (np.abs(pivote)&gt;=casicero):\n                factor = AB&#x5B;k,i]\/pivote\n                AB&#x5B;k,:] = AB&#x5B;k,:] - factor*AB&#x5B;i,:]\n                for j in range(0,m,1): # casicero revisa\n                    if abs(AB&#x5B;k,j])&lt;casicero:\n                        AB&#x5B;k,j]=0\n                if vertabla==True:\n                    print('  fila k:',k,\n                          ' factor:',factor)\n            else:\n                print('  pivote:', pivote,'en fila:',i,\n                      'genera division para cero')\n        if vertabla==True:\n            print(AB)\n    respuesta = np.copy(AB)\n    if lu==True: # matriz triangular A=L.U\n        U = AB&#x5B;:,:n-1]\n        respuesta = &#x5B;AB,L,U]\n    return(respuesta)\n \ndef pivoteafila(A,B,vertabla=False):\n    '''\n    Pivotea parcial por filas\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 ------------------------\n# INGRESO\ncompuesto = &#x5B;&#x5B; 20, 50, 20, 10],\n             &#x5B; 30, 40, 10, 20],\n             &#x5B; 20, 40, 10, 30],\n             &#x5B; 50, 20, 20, 10]]\nproporcion = &#x5B; 27, 39.5, 14, 19.5]\n\nA = np.array(compuesto,dtype=float)\nA = np.transpose(A)\nB = proporcion\n \n# PROCEDIMIENTO\nnp.set_printoptions(precision=4) # 4 decimales en print\ncasicero = 1e-15  # redondear a cero\n \nAB = pivoteafila(A,B,vertabla=True)\n \nAB = gauss_eliminaAdelante(AB,vertabla=True)\n \nX = gauss_eliminaAtras(AB,vertabla=True)\n \n# SALIDA\nprint('soluci\u00f3n X: ')\nprint(X)\n<\/pre><\/div>\n\n\n<p><strong>Tarea<\/strong>: Revisar sobre la \u00faltima pregunta.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ejercicio: 1Eva2015TI_T4 Lingotes metales Se plantea que cada lingote debe aportar una proporci\u00f3n xi al lingote nuevo a ser fundido. Se dispone de los compuestos de cada lingote por filas: El contenido final de cada componente basado en los aportes xi de cada lingote para cada componente. Ejemplo para los 27 gramos de oro Se [&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-3619","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\/3619","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=3619"}],"version-history":[{"count":4,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/3619\/revisions"}],"predecessor-version":[{"id":21725,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/3619\/revisions\/21725"}],"wp:attachment":[{"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/media?parent=3619"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/categories?post=3619"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/tags?post=3619"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}