{"id":3984,"date":"2017-12-10T13:05:09","date_gmt":"2017-12-10T18:05:09","guid":{"rendered":"http:\/\/blog.espol.edu.ec\/matg1013\/?p=3984"},"modified":"2026-04-05T20:06:41","modified_gmt":"2026-04-06T01:06:41","slug":"s2eva2010ti_t3-edp-eliptica-placa-no-rectangular","status":"publish","type":"post","link":"https:\/\/blog.espol.edu.ec\/algoritmos101\/mn-s2eva10\/s2eva2010ti_t3-edp-eliptica-placa-no-rectangular\/","title":{"rendered":"s2Eva2010TI_T3 EDP el\u00edptica, Placa no rectangular"},"content":{"rendered":"\n<p><em><strong>Ejercicio<\/strong><\/em>: <a href=\"https:\/\/blog.espol.edu.ec\/algoritmos101\/mn-2eva10\/2eva2010ti_t3-edp-eliptica-placa-no-rectangular\/\" data-type=\"post\" data-id=\"736\">2Eva2010TI_T3 EDP el\u00edptica, Placa no rectangular<\/a><\/p>\n\n\n\n<p>la f\u00f3rmula a resolver, siendo f(x,y)=20<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> \\frac{\\delta^2 u}{\\delta x^2} + \\frac{\\delta^2 u}{\\delta y^2} = f <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> \\frac{\\delta^2 u}{\\delta x^2} + \\frac{\\delta^2 u}{\\delta y^2} = 20 <\/span>\n\n\n\n<p>Siendo las condiciones de frontera en los bordes marcados:<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"291\" height=\"225\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2017\/11\/PlacaTemp02.png\" alt=\"Placa Temperatura no rectangular\" class=\"wp-image-17318\" \/><\/figure>\n\n\n\n<p>Se convierte a forma discreta la ecuaci\u00f3n<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> \\frac{u_{i+1,j}-2u_{i,j}+u_{i-1,j}}{\\Delta x^2} + \\frac{u_{i,j+1} -2u_{i,j}+u_{i,j-1}}{\\Delta y^2} = 20 <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> u_{i+1,j}-2u_{i,j}+u_{i-1,j} + \\frac{\\Delta x^2}{\\Delta y^2} \\Big( u_{i,j+1} -2u_{i,j}+u_{i,j-1} \\Big) = 20 \\Delta x^2 <\/span>\n\n\n\n<p>siendo \u03bb = 1, al tener la malla en cuadr\u00edcula \u0394x=\u0394y<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> u_{i+1,j}-4u_{i,j}+u_{i-1,j} + u_{i,j+1}+u_{i,j-1} = 20 \\Delta x^2 <\/span>\n\n\n\n<p>despejando u[i,j]<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> u_{i,j} =\\frac{1}{4}\\Big(u_{i+1,j}+u_{i-1,j} + u_{i,j+1}+u_{i,j-1} - 20 \\Delta x^2 \\Big) <\/span>\n\n\n\n<p>Para el ejercicio, se debe usar las fronteras para los valores de c\u00e1lculo que se puede hacer de dos formas:<\/p>\n\n\n\n<p>1. Por posici\u00f3n del valor en la malla [i,j]<\/p>\n\n\n\n<p>2. Por valor xi,yj que es la forma usada cuando la funci\u00f3n es cont\u00ednua.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">1. Por posici\u00f3n del valor en la malla<\/h4>\n\n\n\n<p>Se busca la posici\u00f3n de la esquina derecha ubicada en xi = 0 y yj=1.5 y se la ubica como variable 'desde' como referencia para ubicar los valores de las fronteras usando los \u00edndices i, j.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\n# valores en fronteras\n# busca poscici\u00f3n de esquina izquierda\ndesde = -1 \nfor j in range(0,m,1):\n    if ((yj&#x5B;j]-1.5)&lt;tolera):\n        desde = j\n# llena los datos de bordes de placa\nfor j  in range(0,m,1):\n    if (yj&#x5B;j]&gt;=1):\n        u&#x5B;j-desde,j] = Ta\n    u&#x5B;n-1,j] = Tb(xi&#x5B;n-1],yj&#x5B;j])\nfor i in range(0,n,1):\n    if (xi&#x5B;i]&gt;=1):\n        u&#x5B;i,m-1]=Td\n    u&#x5B;i,desde-i] = Tc(xi&#x5B;i],yj&#x5B;i])\n# valor inicial de iteraci\u00f3n\n<\/pre><\/div>\n\n\n<h4 class=\"wp-block-heading\">2. Por valor x<sub>i<\/sub>, y<sub>j<\/sub><\/h4>\n\n\n\n<p>Se establecen las ecuaciones que forman la frontera:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ymin = lambda x,y: 1.5-(1.5\/1.5)*x\nymax = lambda x,y: 1.5+(1\/1)*x <\/code><\/pre>\n\n\n\n<p>que se usan como condici\u00f3n para hacer el c\u00e1lculo en cada nodo<\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code>if ((yj&#091;j]-yjmin)&gt;tolera and (yj&#091;j]-yjmax)&lt;-tolera):\n                u&#091;i,j] = (u&#091;i-1,j]+u&#091;i+1,j]+u&#091;i,j-1]+u&#091;i,j+1]-20*(dx**2))\/4\n<\/code><\/pre>\n\n\n\n<p>Para minimizar errores por redondeo o truncamiento al seleccionar los puntos, la referencia hacia cero se toma como \"tolerancia\"; en lugar de m\u00e1s que cero o menos que cero.<\/p>\n\n\n\n<p>Con lo que se obtiene el resultado mostrado en la gr\u00e1fica aumentando la resoluci\u00f3n con \u0394x=\u0394y=0.05:<\/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\/PlacaNoRectangular01.png\" alt=\"Placa No Rectangular 01\" class=\"wp-image-18552\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code>converge =  1\nxi=\n&#091;0.   0.05 0.1  0.15 0.2  0.25 0.3  0.35 0.4  0.45 0.5  0.55 0.6  0.65\n 0.7  0.75 0.8  0.85 0.9  0.95 1.   1.05 1.1  1.15 1.2  1.25 1.3  1.35\n 1.4  1.45 1.5 ]\nyj=\n&#091;0.   0.05 0.1  0.15 0.2  0.25 0.3  0.35 0.4  0.45 0.5  0.55 0.6  0.65\n 0.7  0.75 0.8  0.85 0.9  0.95 1.   1.05 1.1  1.15 1.2  1.25 1.3  1.35\n 1.4  1.45 1.5  1.55 1.6  1.65 1.7  1.75 1.8  1.85 1.9  1.95 2.   2.05\n 2.1  2.15 2.2  2.25 2.3  2.35 2.4  2.45 2.5 ]\nmatriz u\n&#091;&#091;  0.     0.     0.   ...   0.     0.     0.  ]\n &#091;  0.     0.     0.   ...   0.     0.     0.  ]\n &#091;  0.     0.     0.   ...   0.     0.     0.  ]\n ...\n &#091;  0.     0.     6.67 ...  96.1   98.03 100.  ]\n &#091;  0.     3.33   5.31 ...  96.03  98.   100.  ]\n &#091;  0.     2.     4.   ...  96.    98.   100.  ]]\n&gt;&gt;&gt;<\/code><\/pre>\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<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\n# Ecuaciones Diferenciales Parciales\n# Elipticas. M\u00e9todo iterativo para placa NO rectangular\nimport numpy as np\n\n# INGRESO\n# Condiciones iniciales en los bordes\nTa = 100\nTb = lambda x,y:(100\/2.5)*y\nTc = lambda x,y: 100-(100\/1.5)*x\nTd = 100\n# dimensiones de la placa no rectangular\nx0 = 0\nxn = 1.5\ny0 = 0\nyn = 2.5\nymin = lambda x,y: 1.5-(1.5\/1.5)*x\nymax = lambda x,y: 1.5+(1\/1)*x\n# discretiza, supone dx=dy\ndx = 0.05 \ndy = 0.05 \nmaxitera = 100\ntolera = 0.0001\n\n# PROCEDIMIENTO\nxi = np.arange(x0,xn+dx,dx)\nyj = np.arange(y0,yn+dy,dy)\nn = len(xi)\nm = len(yj)\n# Matriz u\nu = np.zeros(shape=(n,m),dtype = float)\n\n# valores en fronteras\n# busca posici\u00f3n de esquina izquierda\ndesde = -1 \nfor j in range(0,m,1):\n    if ((yj&#x5B;j]-1.5)&lt;tolera): desde = j \n\n# llena los datos de bordes de placa \n\nfor j in range(0,m,1):\n    if (yj&#x5B;j]&gt;=1):\n        u&#x5B;j-desde,j] = Ta\n    u&#x5B;n-1,j] = Tb(xi&#x5B;n-1],yj&#x5B;j])\nfor i in range(0,n,1):\n    if (xi&#x5B;i]&gt;=1):\n        u&#x5B;i,m-1]=Td\n    u&#x5B;i,desde-i] = Tc(xi&#x5B;i],yj&#x5B;i])\n# valor inicial de iteraci\u00f3n\n# se usan los valores cero\n\n# iterar puntos interiores\nitera = 0\nconverge = 0\nwhile not(itera&gt;=maxitera and converge==1):\n    itera = itera + 10000\n    nueva = np.copy(u)\n    for i in range(1,n-1):\n        for j in range(1,m-1):\n            yjmin = ymin(xi&#x5B;i],yj&#x5B;j])\n            yjmax = ymax(xi&#x5B;i],yj&#x5B;j])\n            if ((yj&#x5B;j]-yjmin)&gt;tolera and (yj&#x5B;j]-yjmax)&lt;-tolera):\n                u&#x5B;i,j] = (u&#x5B;i-1,j]+u&#x5B;i+1,j]+u&#x5B;i,j-1]+u&#x5B;i,j+1]-20*(dx**2))\/4\n    diferencia = nueva-u\n    erroru = np.linalg.norm(np.abs(diferencia))\n\n    if (erroru&lt;tolera):\n        converge=1\n\n# SALIDA\nnp.set_printoptions(precision=2)\nprint('converge = ', converge)\nprint('xi=')\nprint(xi)\nprint('yj=')\nprint(yj)\nprint('matriz u')\nprint(u)\n<\/pre><\/div>\n\n\n<p>Para incorporar la gr\u00e1fica en forma de superficie.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\n# Gr\u00e1fica\nimport matplotlib.pyplot as plt\n\nX, Y = np.meshgrid(xi, yj)\nU = np.transpose(u) # ajuste de \u00edndices fila es x\nfigura = plt.figure()\ngraf3D = figura.add_subplot(111, projection = '3d')\ngraf3D.plot_wireframe(X, Y, U)\nplt.title('EDP el\u00edptica')\nplt.xlabel('x')\nplt.ylabel('y')\nplt.show()\n<\/pre><\/div>","protected":false},"excerpt":{"rendered":"<p>Ejercicio: 2Eva2010TI_T3 EDP el\u00edptica, Placa no rectangular la f\u00f3rmula a resolver, siendo f(x,y)=20 Siendo las condiciones de frontera en los bordes marcados: Se convierte a forma discreta la ecuaci\u00f3n siendo \u03bb = 1, al tener la malla en cuadr\u00edcula \u0394x=\u0394y despejando u[i,j] Para el ejercicio, se debe usar las fronteras para los valores de c\u00e1lculo [&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":[47],"tags":[58,54],"class_list":["post-3984","post","type-post","status-publish","format-standard","hentry","category-mn-s2eva10","tag-ejemplos-python","tag-mnumericos"],"_links":{"self":[{"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/3984","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=3984"}],"version-history":[{"count":3,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/3984\/revisions"}],"predecessor-version":[{"id":23847,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/3984\/revisions\/23847"}],"wp:attachment":[{"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/media?parent=3984"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/categories?post=3984"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/tags?post=3984"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}