{"id":1646,"date":"2018-06-28T06:10:21","date_gmt":"2018-06-28T11:10:21","guid":{"rendered":"http:\/\/blog.espol.edu.ec\/matg1013\/?p=1646"},"modified":"2026-02-19T06:34:22","modified_gmt":"2026-02-19T11:34:22","slug":"s1eva2018ti_t3-temperatura-en-nodos-de-placa","status":"publish","type":"post","link":"https:\/\/blog.espol.edu.ec\/algoritmos101\/mn-s1eva20\/s1eva2018ti_t3-temperatura-en-nodos-de-placa\/","title":{"rendered":"s1Eva2018TI_T3 Temperatura en nodos de placa"},"content":{"rendered":"\n<p><strong>Ejercicio<\/strong>: <a href=\"https:\/\/blog.espol.edu.ec\/algoritmos101\/mn-evalua\/mn-1e20\/1eva2018ti_t3-temperatura-en-nodos-de-placa\/\" data-type=\"post\" data-id=\"1615\">1Eva2018TI_T3 Temperatura en nodos de placa<\/a><\/p>\n\n\n\n<figure class=\"wp-block-image alignright size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"273\" height=\"235\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2018\/06\/PlacaTemp03.png\" alt=\"Placa Temperatura 03\" class=\"wp-image-14150\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">literal a<\/h2>\n\n\n\n<p>Plantear el sistema de ecuaciones. Usando el promedio para cada nodo interior, seg\u00fan el enunciado:<\/p>\n\n\n\n<p>La temperatura en los nodos de la malla de una placa se puede calcular con el promedio de las temperaturas de los 4 nodos vecinos de la izquierda, derecha, arriba y abajo.<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> a=\\frac{50+c+100+b}{4} <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> b=\\frac{a+30+50+d}{4} <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> c=\\frac{a+60+100+d}{4} <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> d=\\frac{b+60+c+30}{4} <\/span>\n\n\n\n<p>que reordenando se convierte en:<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> 4a=150+c+b <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> 4b=a+80+d <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> 4c=a+160+d <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> 4d=b+c+90 <\/span>\n\n\n\n<p>simplificando:<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> 4a-b-c= 150 <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> a-4b+d = -80 <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> a-4c+d = -160 <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> b+c-4d = -90 <\/span>\n\n\n\n<p>que a forma matricial se convierte en:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>A = &#091;&#091; 4, -1, -1, 0],\n     &#091; 1, -4,  0, 1],\n     &#091; 1,  0, -4, 1],\n     &#091; 0,  1,  1,-4]]\nB = &#091;150,-80,-160,-90]<\/code><\/pre>\n\n\n\n<p><strong>Observaci\u00f3n<\/strong>: la matriz A ya es diagonal dominante, no requiere pivotear por filas. Para usar el algoritmo se requiere convertir A y B en arreglos:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>A = np.array(A, dtype=float)\nB = np.array(B, dtype=float)<\/code><\/pre>\n\n\n\n<p>El n\u00famero de condici\u00f3n es: <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><code>np.linalg.cond(A) = 3.0<\/code><\/code><\/pre>\n\n\n\n<p>que es cercano a 1 en un orden de magnitud, por lo que la soluci\u00f3n matricial es \"estable\" y los cambios en los coeficientes afectan proporcionalmente a los resultados. Se puede aplicar m\u00e9todos iterativos sin mayores inconvenientes.<\/p>\n\n\n\n<p>b y c) m\u00e9todo de Jacobi para sistemas de ecuaciones, con vector inicial<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>X(0) = &#091;60.0,40,70,50]<\/code><\/pre>\n\n\n\n<p>reemplazando los valores iniciales en cada ecuaci\u00f3n sin cambios.<\/p>\n\n\n\n<p><strong>iteraci\u00f3n 1<\/strong><\/p>\n\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> a=\\frac{50+70+100+40}{4} = 65 <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> b=\\frac{60+30+50+50}{4} = 47.5<\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> c=\\frac{60+60+100+50}{4} = 67.5 <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> d=\\frac{40+60+70+30}{4} = 50 <\/span>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code>X(1) = &#091;65,47.5,67.5,50]\n\nvector de error = &#091; |65-60|,|47.5-40|,|67.5-70|,|50-50|]\n  = &#091; |5|,|7.5|,|-2.5|,|0| ]\nerrormax = 7.5<\/code><\/pre>\n\n\n\n<p><strong>iteraci\u00f3n 2<\/strong><br><span class=\"wp-katex-eq katex-display\" data-display=\"true\"> a=\\frac{50+67.5+100+47.5}{4} = 66.25<\/span><\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> b=\\frac{65+30+50+50}{4} = 48.75 <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> c=\\frac{65+60+100+50}{4} = 68.75 <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> d=\\frac{47.5+60+67.7+30}{4} = 51.3 <\/span>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code>X(2) = &#091;66.25,48.75,68.75,51.3]\n\nvector de error = &#091; |66.25-65|, |48.75-47.5|,|68.75-67.5|,|51.3-50| ] \n  = &#091; |1.25|,|1.25|,|1.25|,|1.3| ]\nerrormax = 1.3<\/code><\/pre>\n\n\n\n<p><strong>iteraci\u00f3n 3<\/strong><\/p>\n\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> a=\\frac{50+68.75+100+48.75}{4} = 66.875 <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> b=\\frac{66.25+30+50+51.3}{4} = 49.38 <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> c=\\frac{66.25+60+100+51.3}{4} = 69.3875 <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> d=\\frac{48.75+60+68.75+30}{4} = 51.875<\/span>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code>X(2) = &#091;66.875,49.38,69.3875,51.875]\n\nvector de error = &#091; |66.875-66.25|,|49.38-48.75|,|69.3875-68.75|,|51.875-51.3| ]\n    = &#091; |0.655|,|0,63|,|0.6375|,|0.575| ]\nerrormax = 0.655\ncon error relativo de:\n100*0.655\/66.875 = 0.97%<\/code><\/pre>\n\n\n\n<p>siguiendo las iteraciones se deber\u00eda llegar a:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&gt;&gt;&gt; np.linalg.solve(A,B)\narray(&#091;67.5, 50., 70., 52.5])<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Algoritmo en Python<\/h2>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code>Matriz aumentada\n&#091;&#091;   4.   -1.   -1.    0.  150.]\n &#091;   1.   -4.    0.    1.  -80.]\n &#091;   1.    0.   -4.    1. -160.]\n &#091;   0.    1.    1.   -4.  -90.]]\nPivoteo parcial:\n  Pivoteo por filas NO requerido\nIteraciones Jacobi\nitera,&#091;X]\n     ,errado,|diferencia|\n0 &#091;60. 40. 70. 50.]\n  nan\n1 &#091;65.  47.5 67.5 50. ]\n  7.5 &#091;5.  7.5 2.5 0. ]\n2 &#091;66.25 48.75 68.75 51.25]\n  1.25 &#091;1.25 1.25 1.25 1.25]\n3 &#091;66.875 49.375 69.375 51.875]\n  0.625 &#091;0.625 0.625 0.625 0.625]\n4 &#091;67.1875 49.6875 69.6875 52.1875]\n  0.3125 &#091;0.3125 0.3125 0.3125 0.3125]\n5 &#091;67.3438 49.8438 69.8438 52.3438]\n  0.15625 &#091;0.1562 0.1562 0.1562 0.1562]\n6 &#091;67.4219 49.9219 69.9219 52.4219]\n  0.078125 &#091;0.0781 0.0781 0.0781 0.0781]\n7 &#091;67.4609 49.9609 69.9609 52.4609]\n  0.0390625 &#091;0.0391 0.0391 0.0391 0.0391]\n8 &#091;67.4805 49.9805 69.9805 52.4805]\n  0.01953125 &#091;0.0195 0.0195 0.0195 0.0195]\n9 &#091;67.4902 49.9902 69.9902 52.4902]\n  0.009765625 &#091;0.0098 0.0098 0.0098 0.0098]\n10 &#091;67.4951 49.9951 69.9951 52.4951]\n  0.0048828125 &#091;0.0049 0.0049 0.0049 0.0049]\n11 &#091;67.4976 49.9976 69.9976 52.4976]\n  0.00244140625 &#091;0.0024 0.0024 0.0024 0.0024]\n12 &#091;67.4988 49.9988 69.9988 52.4988]\n  0.001220703125 &#091;0.0012 0.0012 0.0012 0.0012]\n13 &#091;67.4994 49.9994 69.9994 52.4994]\n  0.0006103515625 &#091;0.0006 0.0006 0.0006 0.0006]\nMetodo de Jacobi\nnumero de condici\u00f3n: 3.000000000000001\nX:  &#091;67.4994 49.9994 69.9994 52.4994]\nerrado: 0.0006103515625\niteraciones: 13\n&gt;&gt;&gt;<\/code><\/pre>\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\/2018\/06\/1Eva2018TI_T3TemperaturaNodosPlaca_JacobiGraf01.png\" alt=\"1Eva2018TI_T3 Temperatura Nodos Placa Jacobi Graf01.\" class=\"wp-image-21758\" \/><\/figure>\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# 1Eva2018TI_T3 Temperatura en nodos de placa\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; 4, -1, -1, 0.0],\n     &#x5B; 1, -4,  0, 1.0],\n     &#x5B; 1,  0, -4, 1.0],\n     &#x5B; 0,  1,  1,-4.0]]\nB = &#x5B;150,-80,-160,-90]\n \nX0 = &#x5B;60.0,40,70,50]\ntolera = 0.001\niteramax = 100\nverdecimal = 4\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\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>","protected":false},"excerpt":{"rendered":"<p>Ejercicio: 1Eva2018TI_T3 Temperatura en nodos de placa literal a Plantear el sistema de ecuaciones. Usando el promedio para cada nodo interior, seg\u00fan el enunciado: La temperatura en los nodos de la malla de una placa se puede calcular con el promedio de las temperaturas de los 4 nodos vecinos de la izquierda, derecha, arriba y [&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-1646","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\/1646","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=1646"}],"version-history":[{"count":5,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/1646\/revisions"}],"predecessor-version":[{"id":21760,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/1646\/revisions\/21760"}],"wp:attachment":[{"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/media?parent=1646"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/categories?post=1646"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/tags?post=1646"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}