{"id":2140,"date":"2017-10-08T09:30:09","date_gmt":"2017-10-08T14:30:09","guid":{"rendered":"http:\/\/blog.espol.edu.ec\/matg1013\/?p=2140"},"modified":"2026-01-31T00:04:53","modified_gmt":"2026-01-31T05:04:53","slug":"edp-hiperbolicas","status":"publish","type":"post","link":"https:\/\/blog.espol.edu.ec\/algoritmos101\/mn-u07\/edp-hiperbolicas\/","title":{"rendered":"7.3 EDP hiperb\u00f3licas con Python"},"content":{"rendered":"\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<div class=\"wp-block-group has-medium-font-size is-layout-flex wp-block-group-is-layout-flex\">\n<p>EDP Hiperb\u00f3licas<\/p>\n\n\n\n<p><a href=\"#ejercicio\">Ejercicio<\/a><\/p>\n\n\n\n<p><a href=\"#analitico\">anal\u00edtico<\/a><\/p>\n\n\n\n<p><a href=\"#algoritmo\">algoritmo<\/a><\/p>\n\n\n\n<p><a href=\"#grafica\">gr\u00e1fica<\/a><\/p>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"ejercicio\">1.&nbsp;Ejercicio - EDP Hiperb\u00f3licas<\/h2>\n\n\n\n<p><em><strong>Referencia<\/strong><\/em>:&nbsp; Chapra PT8.1 p860,&nbsp; Rodr\u00edguez 10.4 p435<\/p>\n\n\n\n<p>Las <strong>E<\/strong>cuaciones <strong>D<\/strong>iferenciales <strong>P<\/strong>arciales tipo <strong><em>hiperb\u00f3licas <\/em><\/strong>semejantes a la mostrada, para un ejemplo en particular, representa la ecuaci\u00f3n de onda&nbsp;de una dimensi\u00f3n u[x,t], que representa el desplazamiento vertical de una cuerda.<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> \\frac{\\partial ^2 u}{\\partial t^2}=c^2\\frac{\\partial ^2 u}{\\partial x^2}<\/span>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"326\" height=\"181\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2017\/10\/EDPCuerda01.png\" alt=\"EDP Hiperb\u00f3lica Cuerda tensa en medio\" class=\"wp-image-13903\" \/><\/figure>\n\n\n\n<p>Los extremos de la cuerda de longitud unitaria est\u00e1n sujetos y referenciados a una posici\u00f3n 0 a la izquierda y 1 a la derecha.<\/p>\n\n\n\n<p class=\"has-text-align-center\">u[x,t] , 0&lt;x&lt;1, t\u22650<br>u(0,t) = 0 , t\u22650<br>u(1,t) = 0 , t\u22650<\/p>\n\n\n\n<p>Al inicio, la cuerda est\u00e1 estirada por su punto central:<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> u(x,0) = \\begin{cases} -0.5x &amp;, 0\\lt x\\leq 0.5 \\\\ 0.5(x-1) &amp;, 0.5\\lt x \\lt 1 \\end{cases} <\/span>\n\n\n\n<p>Se suelta la cuerda, con velocidad cero desde la posici\u00f3n inicial:<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> \\frac{\\partial u(x,0)}{\\partial t} = 0<\/span>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<div class=\"wp-block-group has-medium-font-size is-layout-flex wp-block-group-is-layout-flex\">\n<p>EDP Hiperb\u00f3licas<\/p>\n\n\n\n<p><a href=\"#ejercicio\">Ejercicio<\/a><\/p>\n\n\n\n<p><a href=\"#analitico\">anal\u00edtico<\/a><\/p>\n\n\n\n<p><a href=\"#algoritmo\">algoritmo<\/a><\/p>\n\n\n\n<p><a href=\"#grafica\">gr\u00e1fica<\/a><\/p>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"analitico\">2. Desarrollo anal\u00edtico<\/h2>\n\n\n\n<p>La soluci\u00f3n se realiza de forma semejante al procedimiento para EDP parab\u00f3licas y el\u00edpticas. Se cambia a la forma discreta&nbsp; usando diferencias finitas divididas:<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> \\frac{u_{i,j+1}-2u_{i,j}+u_{i,j-1}}{(\\Delta t)^2} =c^2 \\frac{u_{i+1,j}-2u_{i,j}+u_{i-1,j}}{(\\Delta x)^2} <\/span>\n\n\n\n<p>El error es del orden <span class=\"wp-katex-eq\" data-display=\"false\"> O(\\Delta x)^2 + O(\\Delta t)^2<\/span>.<br>se reagrupa de la forma:<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> u_{i,j+1}-2u_{i,j}+u_{i,j-1} = \\frac{c^2 (\\Delta t)^2}{(\\Delta x)^2} \\big( u_{i+1,j}-2u_{i,j}+u_{i-1,j} \\big) <\/span>\n\n\n\n<p>El t\u00e9rmino constante, por facilidad se simplifica con el valor de 1<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> \\lambda = \\frac{c^2 (\\Delta t)^2}{(\\Delta x)^2} =1 <\/span>\n\n\n\n<p>si c = 2 y \u0394x = 0.2, se deduce que \u0394t = 0.1<\/p>\n\n\n\n<p>que al sustituir en la ecuaci\u00f3n, se simplifica anulando el t\u00e9rmino u[i,j]:<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> u_{i,j+1}+u_{i,j-1} = u_{i+1,j}+u_{i-1,j} <\/span>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"684\" height=\"413\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2017\/10\/EDPCuerda02.png\" alt=\"EDP Hiperb\u00f3lica gr\u00e1fica malla puntos\" class=\"wp-image-13904\" \/><\/figure>\n\n\n\n<p>en los que intervienen solo los puntos extremos. Despejando el punto superior del rombo:<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> u_{i,j+1} = u_{i+1,j}-u_{i,j-1}+u_{i-1,j} <\/span>\n\n\n\n<p>Convergencia:<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> \\lambda = \\frac{c^2 (\\Delta t)^2}{(\\Delta x)^2} \\leq 1 <\/span>\n\n\n\n<p>para simplificar a\u00fan m\u00e1s el problema, se usa la condici\u00f3n velocidad inicial de la cuerda igual a cero<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> \\frac{\\delta u_{i,0}}{\\delta t}=\\frac{u_{i,1}-u_{i,-1}}{2\\Delta t} = 0<\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> u_{i,-1}=u_{i,1}<\/span>\n\n\n\n<p>que se usa para cuando el tiempo es cero, permite calcular los puntos para t[1]:<\/p>\n\n\n\n<p>j=0<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> u_{i,1} = u_{i+1,0}-u_{i,-1}+u_{i-1,0} <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> u_{i,1} = u_{i+1,0}-u_{i,1}+u_{i-1,0} <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> 2 u_{i,1} = u_{i+1,0}+u_{i-1,0} <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> u_{i,1} = \\frac{u_{i+1,0}+u_{i-1,0}}{2} <\/span>\n\n\n\n<p>Aplicando solo cuando j = 0<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"685\" height=\"405\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2017\/10\/EDPCuerda03.png\" alt=\"EDP Hiperb\u00f3lica Cuerda malla puntos gr\u00e1fica\" class=\"wp-image-13905\" \/><\/figure>\n\n\n\n<p>que al ponerlos en la malla se logra un sistema expl\u00edcito para cada u[i,j], con lo que se puede resolver con un algoritmo:<\/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\/10\/EDP_hiperbolica_ani.gif\" alt=\"EDP hiperb\u00f3lica cuerda tensa en mitad gr\u00e1fico animado\" class=\"wp-image-13906\" \/><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<div class=\"wp-block-group has-medium-font-size is-layout-flex wp-block-group-is-layout-flex\">\n<p>EDP Hiperb\u00f3licas<\/p>\n\n\n\n<p><a href=\"#ejercicio\">Ejercicio<\/a><\/p>\n\n\n\n<p><a href=\"#analitico\">anal\u00edtico<\/a><\/p>\n\n\n\n<p><a href=\"#algoritmo\">algoritmo<\/a><\/p>\n\n\n\n<p><a href=\"#grafica\">gr\u00e1fica<\/a><\/p>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"algoritmo\">3. Algoritmo con Python<\/h2>\n\n\n<div class=\"wp-block-syntaxhighlighter-code alignwide\"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\n# Ecuaciones Diferenciales Parciales\n# Hiperb\u00f3lica. M\u00e9todo explicito\nimport numpy as np\n\ndef cuerdainicio(xi):\n    n = len(xi)\n    y = np.zeros(n,dtype=float)\n    for i in range(0,n,1):\n        if (xi&#x5B;i]&lt;=0.5):\n            y&#x5B;i]=-0.5*xi&#x5B;i]\n        else:\n            y&#x5B;i]=0.5*(xi&#x5B;i]-1)\n    return(y)\n\n# INGRESO\nx0 = 0 # Longitud de cuerda\nxn = 1\ny0 = 0 # Puntos de amarre\nyn = 0\nt0 = 0 # tiempo inicial\nc = 2  # constante EDP\n# discretiza\ntramosx = 16\ntramost = 32\ndx = (xn-x0)\/tramosx \ndt = dx\/c\n\n# PROCEDIMIENTO\nxi = np.arange(x0,xn+dx\/2,dx)\ntj = np.arange(0,tramost*dt+dt\/2,dt)\nn = len(xi)\nm = len(tj)\n\nu = np.zeros(shape=(n,m),dtype=float)\nu&#x5B;:,0] = cuerdainicio(xi)\nu&#x5B;0,:] = y0\nu&#x5B;n-1,:] = yn\n# Aplicando condici\u00f3n inicial\nj = 0\nfor i in range(1,n-1,1):\n    u&#x5B;i,j+1] = (u&#x5B;i+1,j]+u&#x5B;i-1,j])\/2\n# Para los otros puntos\nfor j in range(1,m-1,1):\n    for i in range(1,n-1,1):\n        u&#x5B;i,j+1] = u&#x5B;i+1,j]-u&#x5B;i,j-1]+u&#x5B;i-1,j]\n\n# SALIDA\nnp.set_printoptions(precision=2)\nprint('xi =')\nprint(xi)\nprint('tj =')\nprint(tj)\nprint('matriz u =')\nprint(u)\n<\/pre><\/div>\n\n\n<p>con lo que se obtienen los resultados num\u00e9ricos, <\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<div class=\"wp-block-group has-medium-font-size is-layout-flex wp-block-group-is-layout-flex\">\n<p>EDP Hiperb\u00f3licas<\/p>\n\n\n\n<p><a href=\"#ejercicio\">Ejercicio<\/a><\/p>\n\n\n\n<p><a href=\"#analitico\">anal\u00edtico<\/a><\/p>\n\n\n\n<p><a href=\"#algoritmo\">algoritmo<\/a><\/p>\n\n\n\n<p><a href=\"#grafica\">gr\u00e1fica<\/a><\/p>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"grafica\">4. Gr\u00e1fica en Python<\/h2>\n\n\n\n<p>Para mejor interpretaci\u00f3n se presentan en una gr\u00e1fica est\u00e1tica y otra animada.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code alignwide\"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\n# GRAFICA\nimport matplotlib.pyplot as plt\n\nfor j in range(0,m,1):\n    y = u&#x5B;:,j]\n    plt.plot(xi,y)\n\nplt.title('EDP hiperb\u00f3lica')\nplt.xlabel('x')\nplt.ylabel('y')\nplt.show()\n<\/pre><\/div>\n\n\n<p>Una vez realizado el algoritmo, se pueden cambiar las condiciones iniciales de la cuerda y se observan los resultados.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">gr\u00e1fica con animaci\u00f3n<\/h3>\n\n\n<div class=\"wp-block-syntaxhighlighter-code alignwide\"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\n# **** GR\u00c1FICO CON ANIMACION ***********\nimport matplotlib.animation as animation\n\n# Inicializa parametros de trama\/foto\nretardo = 70   # milisegundos entre tramas\ntramas  = m\nmaximoy = np.max(np.abs(u))\nfigura, ejes = plt.subplots()\nplt.xlim(&#x5B;x0,xn])\nplt.ylim(&#x5B;-maximoy,maximoy])\n\n# lineas de funci\u00f3n y polinomio en gr\u00e1fico\nlinea_poli, = ejes.plot(xi,u&#x5B;:,0], '-')\nplt.axhline(0, color='k')  # Eje en x=0\n\nplt.title('EDP hiperb\u00f3lica')\n# plt.legend()\n# txt_x = (x0+xn)\/2\ntxt_y = maximoy*(1-0.1)\ntexto = ejes.text(x0,txt_y,'tiempo:',\n                  horizontalalignment='left')\nplt.xlabel('x')\nplt.ylabel('y')\nplt.grid()\n\n# Nueva Trama\ndef unatrama(i,xi,u):\n    # actualiza cada linea\n    linea_poli.set_ydata(u&#x5B;:,i])\n    linea_poli.set_xdata(xi)\n    linea_poli.set_label('tiempo linea: '+str(i))\n    texto.set_text('tiempo&#x5B;'+str(i)+']')\n    # color de la l\u00ednea\n    if (i&lt;=9):\n        lineacolor = 'C'+str(i)\n    else:\n        numcolor = i%10\n        lineacolor = 'C'+str(numcolor)\n    linea_poli.set_color(lineacolor)\n    return linea_poli, texto\n\n# Limpia Trama anterior\ndef limpiatrama():\n    linea_poli.set_ydata(np.ma.array(xi, mask=True))\n    linea_poli.set_label('')\n    texto.set_text('')\n    return linea_poli, texto\n\n# Trama contador\ni = np.arange(0,tramas,1)\nani = animation.FuncAnimation(figura,\n                              unatrama,\n                              i ,\n                              fargs=(xi,u),\n                              init_func=limpiatrama,\n                              interval=retardo,\n                              blit=True)\n# Graba Archivo video y GIFAnimado :\n# ani.save('EDP_hiperb\u00f3lica.mp4')\nani.save('EDP_hiperbolica.gif', writer='imagemagick')\nplt.draw()\nplt.show()\n<\/pre><\/div>\n\n\n<p>Se recomienda realizar otros ejercicios de la secci\u00f3n de evaluaciones para EDP Hiperb\u00f3licas y observar los resultados con el algoritmo modificado.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<div class=\"wp-block-group has-medium-font-size is-layout-flex wp-block-group-is-layout-flex\">\n<p>EDP Hiperb\u00f3licas<\/p>\n\n\n\n<p><a href=\"#ejercicio\">Ejercicio<\/a><\/p>\n\n\n\n<p><a href=\"#analitico\">anal\u00edtico<\/a><\/p>\n\n\n\n<p><a href=\"#algoritmo\">algoritmo<\/a><\/p>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n","protected":false},"excerpt":{"rendered":"<p>EDP Hiperb\u00f3licas Ejercicio anal\u00edtico algoritmo gr\u00e1fica 1.&nbsp;Ejercicio - EDP Hiperb\u00f3licas Referencia:&nbsp; Chapra PT8.1 p860,&nbsp; Rodr\u00edguez 10.4 p435 Las Ecuaciones Diferenciales Parciales tipo hiperb\u00f3licas semejantes a la mostrada, para un ejemplo en particular, representa la ecuaci\u00f3n de onda&nbsp;de una dimensi\u00f3n u[x,t], que representa el desplazamiento vertical de una cuerda. Los extremos de la cuerda de longitud [&hellip;]<\/p>\n","protected":false},"author":8043,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"wp-custom-template-entrada-mn-unidades","format":"standard","meta":{"footnotes":""},"categories":[41],"tags":[],"class_list":["post-2140","post","type-post","status-publish","format-standard","hentry","category-mn-u07"],"_links":{"self":[{"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/2140","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=2140"}],"version-history":[{"count":5,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/2140\/revisions"}],"predecessor-version":[{"id":21246,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/2140\/revisions\/21246"}],"wp:attachment":[{"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/media?parent=2140"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/categories?post=2140"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/tags?post=2140"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}