{"id":1989,"date":"2017-09-05T09:15:54","date_gmt":"2017-09-05T14:15:54","guid":{"rendered":"http:\/\/blog.espol.edu.ec\/matg1013\/?p=1989"},"modified":"2026-03-14T09:58:22","modified_gmt":"2026-03-14T14:58:22","slug":"runge-kutta-d2y-dx2","status":"publish","type":"post","link":"https:\/\/blog.espol.edu.ec\/algoritmos101\/mn-u06\/runge-kutta-d2y-dx2\/","title":{"rendered":"6.3 EDO d2y\/dx2 Runge-Kutta con Python"},"content":{"rendered":"\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<div class=\"wp-block-group alignwide has-medium-font-size is-content-justification-center is-layout-flex wp-container-core-group-is-layout-b02886af wp-block-group-is-layout-flex\">\n<p><a href=\"#concepto\">Runge Kutta<\/a>&nbsp;<span class=\"wp-katex-eq\" data-display=\"false\"> \\frac{\\delta^2 y}{\\delta x^2}<\/span><\/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><em>Algoritmo<\/em>:<\/p>\n\n\n\n<p><a href=\"#rk2ordend2f\">RK 2do Orden<\/a><\/p>\n\n\n\n<p><a href=\"#grafica\">gr\u00e1fica<\/a><\/p>\n\n\n\n<p><a href=\"#rk4ordend2f\">RK 4to Orden<\/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=\"concepto\">1. EDO <span class=\"wp-katex-eq\" data-display=\"false\"> \\frac{\\delta^2 y}{\\delta x^2}<\/span> con Runge-Kutta<\/h2>\n\n\n\n<p>Para una ecuaci\u00f3n diferencial de segunda derivada (segundo orden) con condiciones de inicio en x<sub>0<\/sub>, y<sub>0<\/sub>, y'<sub>0<\/sub><\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> \\frac{\\delta ^2 y}{\\delta x^2} = \\frac{\\delta y}{\\delta x} + etc <\/span>\n\n\n\n<p>Forma estandarizada de la ecuaci\u00f3n:<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> y'' = y' + etc <\/span>\n\n\n\n<p>Se puede sustituir la variable y' por z, lo que se convierte a dos expresiones que forman un sistema de ecuaciones:<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> \\begin{cases} z= y' = f_x(x,y,z) \\\\ z' = (y')' = z + etc = g_x(x,y,z) \\end{cases} <\/span>\n\n\n\n<figure class=\"wp-block-image alignright size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"640\" height=\"480\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2017\/09\/EdoRK_Wingsuit_ani.gif\" alt=\"EDO Runge-Kutta 2Orden d2y\/dx2 gr\u00e1fica animada\" class=\"wp-image-22940\" \/><\/figure>\n\n\n\n<p>Se pueden reutilizar los m\u00e9todos para primeras derivadas, por ejemplo Runge-Kutta de 2do y 4to orden para las variables x,y,z de forma simultanea.<\/p>\n\n\n\n<p>Runge-Kutta 2do Orden tiene error de truncamiento O(h<sup>3<\/sup>)<\/p>\n\n\n\n<p>Runge-Kutta 4do Orden tiene error de truncamiento O(h<sup>5<\/sup>)<\/p>\n\n\n\n<p>.<br>Al aplicar el m\u00e9todo de Runge-Kutta para las variables dependientes, se tiene:<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> y'' = y' + etc <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> \\begin{cases} f_x(x,y,z) = z \\\\ g_x(x,y,z) = z + etc \\end{cases} <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> K_{1y} = h f(x_i, y_i, z_i) <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> K_{1z} = hg(x_i, y_i, z_i) <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> K_{2y} = h f(x_i +h, y_i + K_{1y} , z_i + K_{1z}) <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> K_{2z} = h g(x_i +h, y_i + K_{1y}, z_i + K_{1z}) <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> y_{i+1}=y_i+\\frac{K_{1y}+K_{2y}}{2}<\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> z_{i+1}=z_i+\\frac{K_{1z}+K_{2z}}{2}<\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> x_{i+1} = x_i +h <\/span>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<div class=\"wp-block-group alignwide has-medium-font-size is-content-justification-center is-layout-flex wp-container-core-group-is-layout-b02886af wp-block-group-is-layout-flex\">\n<p><a href=\"#concepto\">Runge Kutta<\/a>&nbsp;<span class=\"wp-katex-eq\" data-display=\"false\"> \\frac{\\delta^2 y}{\\delta x^2}<\/span><\/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><em>Algoritmo<\/em>:<\/p>\n\n\n\n<p><a href=\"#rk2ordend2f\">RK 2do Orden<\/a><\/p>\n\n\n\n<p><a href=\"#grafica\">gr\u00e1fica<\/a><\/p>\n\n\n\n<p><a href=\"#rk4ordend2f\">RK 4to Orden<\/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\">2. Ejercicio<\/h2>\n\n\n\n<figure class=\"wp-block-image alignright size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"321\" height=\"213\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2017\/09\/paracaidistawingsuit01.png\" alt=\"Paracaidista Wingsuit cayendo\" class=\"wp-image-13826\" \/><\/figure>\n\n\n\n<p><strong>Referencia<\/strong>:&nbsp;Chapra Ejercicio 25.23 p265,&nbsp;<a href=\"https:\/\/blog.espol.edu.ec\/algoritmos101\/mn-eval\/mn-2e20\/2eva2018ti_t1-paracaidista-wingsuit\/\" data-type=\"post\" data-id=\"2250\">2Eva2018TI_T1 Paracaidista wingsuit<\/a>&nbsp;<\/p>\n\n\n\n<p>Si suponemos que el arrastre es proporcional al cuadrado de la velocidad, se puede modelar la altura (y) de un objeto que cae, como un paracaidista, por medio de la ecuaci\u00f3n diferencial ordinaria:<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> \\frac{d^2y}{dt^2} = g - \\frac{Cd}{m} \\Big( \\frac{dy}{dt} \\Big) ^2 <\/span>\n\n\n\n<p>Que es una EDO de 2do orden o como 2da derivada.<\/p>\n\n\n\n<p>Resuelva para la altura que recorre un objeto de 90 Kg con coeficiente de arrastre&nbsp; Cd =0.225 kg\/m.<\/p>\n\n\n\n<p>Si la velocidad inicial es 0 y la altura inicial es 1 Km, determine la velocidad y posici\u00f3n en cada tiempo, usando un tama\u00f1o de paso de 2s.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<div class=\"wp-block-group alignwide has-medium-font-size is-content-justification-center is-layout-flex wp-container-core-group-is-layout-b02886af wp-block-group-is-layout-flex\">\n<p><a href=\"#concepto\">Runge Kutta<\/a>&nbsp;<span class=\"wp-katex-eq\" data-display=\"false\"> \\frac{\\delta^2 y}{\\delta x^2}<\/span><\/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><em>Algoritmo<\/em>:<\/p>\n\n\n\n<p><a href=\"#rk2ordend2f\">RK 2do Orden<\/a><\/p>\n\n\n\n<p><a href=\"#grafica\">gr\u00e1fica<\/a><\/p>\n\n\n\n<p><a href=\"#rk4ordend2f\">RK 4to Orden<\/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\">3. Desarrollo anal\u00edtico - paso a paso<\/h2>\n\n\n\n<figure class=\"wp-block-image alignright size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"260\" height=\"272\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2017\/09\/wingsuitdiagrama02.gif\" alt=\"wingsuit diagrama cuerpo libre 02\" class=\"wp-image-22941\" \/><\/figure>\n\n\n\n<p>La soluci\u00f3n propone resolver de forma simultanea para t,y,v con&nbsp;Runge Kutta para segunda derivada,  siendo las expresiones:<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> f(t,y,v) = -v <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> g(t,y,v) = g - \\frac{Cd}{m} v^2 <\/span>\n\n\n\n<p>Al sustituir los valores de las constantes en la ecuaci\u00f3n como gravedad, masa e \u00edndice de arrastre se tiene:<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> f(t,y,v) = -v <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> g(t,y,v) = 9.8 - \\frac{0.225}{90} v^2 <\/span>\n\n\n\n<p>con las condiciones iniciales del ejercicio&nbsp; t<sub>0<\/sub> = 0 , y<sub>0<\/sub> = 1000, v<sub>0<\/sub> = 0<br>la velocidad se inicia con cero, si el paracaidista se deja caer desde el borde el risco, como en el video adjunto al enunciado.<\/p>\n\n\n\n<p>Para las iteraciones, recuerde que<br>t se corrige con t+h (en el algoritmo era la posici\u00f3n para x)<br>y se corrige con y+K1y<br>v se corrige con v+K1v (en el algoritmo era la posici\u00f3n para z)<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<div class=\"wp-block-columns alignwide is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<p><strong>itera = 0<\/strong><\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> K1y = h f(t,y,v) = 2(-(0)) = 0 <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> K1v = h g(t,y,v) = 2(9.8 - \\frac{0.225}{90} (0)^2) = 19.6<\/span>\n\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> K2y = h f(t+h, y+K1y, v + K1v)<\/span>\n\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> = 2(-(0 + 19.6)) = -39.2 <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> K2v = h g(t+h, y+K1y, v + K1v) <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> = 2(9.8 - \\frac{0.225}{90} (0+19.6)^2) =17.6792 <\/span>\n\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> y_1 = y_0 + \\frac{K1y+K2y}{2} <\/span>\n\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\">= 1000 + \\frac{0-39.2}{2}= 980.4 <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> v_1 = v_0 + \\frac{K1v+K2v}{2} = 0 + \\frac{19.6-17.67}{2} = 18.63 <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> t_1 =t_0 + h = 0+2 = 2 <\/span>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image alignright size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"640\" height=\"480\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2017\/09\/EdoRungeKutta2Orden_d2y_itera0.gif\" alt=\"EDO Runge-Kutta 2Orden d2y\/dx2 itera=0 gr\u00e1fica\" class=\"wp-image-22935\" style=\"object-fit:cover\" \/><\/figure>\n<\/div>\n<\/div>\n\n\n\n<figure class=\"wp-block-table alignwide\"><table><thead><tr><th>ti<\/th><th>yi<\/th><th>vi<\/th><th>K1y<\/th><th>K1v<\/th><th>K2y<\/th><th>K2v<\/th><\/tr><\/thead><tbody><tr><td>0<\/td><td>1000<\/td><td>0<\/td><td>-<\/td><td>-<\/td><td>-<\/td><td>-<\/td><\/tr><tr><td>2<\/td><td>980.4<\/td><td>18.63<\/td><td>0<\/td><td>19.6<\/td><td>-39.2<\/td><td>17.6792<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<div class=\"wp-block-columns alignwide is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<p><strong>itera = 1<\/strong><\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> K1y = 2(-(18.63)) = -37.2792 <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> K1v = 2(9.8 - \\frac{0.225}{90} (18.63)^2) = 17.8628 <\/span>\n\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> K2y =2(-(18.6396+17.8628)) =-73.00 <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> K2v = 2(9.8 - \\frac{0.225}{90} (18.6396+17.8628)^2) =12.9378 <\/span>\n\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> y_2 =980.4 + \\frac{ -37.2792+(-73.00)}{2}= 925.25 <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> v_2 = 18.63 + \\frac{17.8628+12.9378}{2} = 34.0399 <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> t_2 =t_1 + h = 2+2 = 4 <\/span>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image alignright size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"640\" height=\"480\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2017\/09\/EdoRungeKutta2Orden_d2y_itera1.gif\" alt=\"EDO Runge-Kutta 2Orden d2y\/dx2 itera=1 gr\u00e1fica\" class=\"wp-image-22936\" style=\"object-fit:cover\" \/><\/figure>\n<\/div>\n<\/div>\n\n\n\n<figure class=\"wp-block-table alignwide\"><table><thead><tr><th>ti<\/th><th>yi<\/th><th>vi<\/th><th>K1y<\/th><th>K1v<\/th><th>K2y<\/th><th>K2v<\/th><\/tr><\/thead><tbody><tr><td>0<\/td><td>1000<\/td><td>0<\/td><td>-<\/td><td>-<\/td><td>-<\/td><td>-<\/td><\/tr><tr><td>2<\/td><td>980.4<\/td><td>18.63<\/td><td>0<\/td><td>19.6<\/td><td>-39.2<\/td><td>17.6792<\/td><\/tr><tr><td>4<\/td><td>925.25<\/td><td>34.0399<\/td><td>-37.2792<\/td><td>17.8628<\/td><td>-73.00<\/td><td>12.9378<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<div class=\"wp-block-columns alignwide is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<p><strong>itera = 2<\/strong><\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> K1y = h f(t,y,v) = 2(-(34.0399)) = -68.0798 <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> K1v = h g(t,y,v) = 2(9.8 - \\frac{0.225}{90} (34.0399)^2) = 13.8064 <\/span>\n\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> K2y = h f(t+h, y+K1y, v + K1v) <\/span>\n\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> = 2(-(34.0399+13.8064)) =-95.6927 <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> K2v = h g(t+h, y+K1y, v + K1v) <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> = 2(9.8 - \\frac{0.225}{90} (34.0399+13.8064)^2) =8.1536 <\/span>\n\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> y_2 = 925.25 + \\frac{ -68.0798+(-95.6927)}{2}= 843.3716 <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> v_2 = 34.0399 + \\frac{13.8064+8.1536}{2} = 45.0199 <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> t_2 =t_1 + h = 4+2 = 6 <\/span>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image alignright size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"640\" height=\"480\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2017\/09\/EdoRungeKutta2Orden_d2y_itera2.gif\" alt=\"EDO Runge-Kutta 2Orden d2y\/dx2 itera=2 gr\u00e1fica\" class=\"wp-image-22937\" style=\"object-fit:cover\" \/><\/figure>\n<\/div>\n<\/div>\n\n\n\n<figure class=\"wp-block-table alignwide\"><table><thead><tr><th>ti<\/th><th>yi<\/th><th>vi<\/th><th>K1y<\/th><th>K1v<\/th><th>K2y<\/th><th>K2v<\/th><\/tr><\/thead><tbody><tr><td>0<\/td><td>1000<\/td><td>0<\/td><td>-<\/td><td>-<\/td><td>-<\/td><td>-<\/td><\/tr><tr><td>2<\/td><td>980.4<\/td><td>18.63<\/td><td>0<\/td><td>19.6<\/td><td>-39.2<\/td><td>17.6792<\/td><\/tr><tr><td>4<\/td><td>925.25<\/td><td>34.0399<\/td><td>-37.2792<\/td><td>17.8628<\/td><td>-73.00<\/td><td>12.9378<\/td><\/tr><tr><td>6<\/td><td>843.37<\/td><td>45.0199<\/td><td>-68.0798<\/td><td>13.8064<\/td><td>-95.6927<\/td><td>8.1536<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Usando el algoritmo se obtiene el siguiente resultado:<\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code>EDO f,g con Runge-Kutta 2 Orden\ni  &#091; xi,  yi,  zi ]\n   &#091; K1y,  K1z,  K2y,  K2z ]\n0 &#091;   0. 1000.    0.]\n  &#091;0. 0. 0. 0.]\n1 &#091;  2.     980.4     18.6396]\n  &#091;  0.      19.6    -39.2     17.6792]\n2 &#091;  4.     925.258   34.0399]\n  &#091;-37.2792  17.8628 -73.0049  12.9379]\n3 &#091;  6.     843.3717  45.02  ]\n  &#091;-68.0799  13.8064 -95.6927   8.1536]\n4 &#091;  8.     743.8657  52.1312]\n  &#091; -90.0399    9.466  -108.972     4.7564]\n5 &#091; 10.     633.5917  56.4855]\n  &#091;-104.2623    6.0117 -116.2857    2.697 ]\n6 &#091; 12.     516.9737  59.0692]\n...\n13 &#091;  26.     -348.3079   62.5395]\n   &#091;-1.2497e+02  7.7276e-02 -1.2513e+02  2.8959e-02]\n14 &#091;  28.     -473.4309   62.5698]\n   &#091;-1.2508e+02  4.4071e-02 -1.2517e+02  1.6499e-02]\n15 &#091;  30.     -598.5956   62.587 ]\n   &#091;-1.2514e+02  2.5126e-02 -1.2519e+02  9.4015e-03]<\/code><\/pre>\n\n\n\n<p>con la siguiente gr\u00e1fica<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"640\" height=\"480\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2017\/09\/EdoRungeKutta2Orden_d2y_itera_n.gif\" alt=\"EDO Runge-Kutta 2Orden d2y\/dx2 itera=n gr\u00e1fica\" class=\"wp-image-22939\" \/><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<div class=\"wp-block-group alignwide has-medium-font-size is-content-justification-center is-layout-flex wp-container-core-group-is-layout-b02886af wp-block-group-is-layout-flex\">\n<p><a href=\"#concepto\">Runge Kutta<\/a>&nbsp;<span class=\"wp-katex-eq\" data-display=\"false\"> \\frac{\\delta^2 y}{\\delta x^2}<\/span><\/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><em>Algoritmo<\/em>:<\/p>\n\n\n\n<p><a href=\"#rk2ordend2f\">RK 2do Orden<\/a><\/p>\n\n\n\n<p><a href=\"#grafica\">gr\u00e1fica<\/a><\/p>\n\n\n\n<p><a href=\"#rk4ordend2f\">RK 4to Orden<\/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=\"rk2ordend2f\">4. Algoritmo en Python para&nbsp;<span class=\"wp-katex-eq\" data-display=\"false\"> \\frac{\\delta^2 y}{\\delta x^2}<\/span>&nbsp;Runge-Kutta 2do Orden<\/h2>\n\n\n\n<p>Se presenta las instrucciones en Python del algoritmo para segunda derivada con una funci\u00f3n.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code alignwide\"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\n# EDO d2y\/dx2. M\u00e9todo de RungeKutta 2do Orden \n# estima la solucion para muestras espaciadas h en eje x\n# valores iniciales x0,y0,z0 entrega tabla&#x5B;xi,yi,zi,K1y,K1z,K2y,K2z]\nimport numpy as np\n\n# INGRESO\n# 2Eva_IT2018_T1 Paracaidista wingsuit\nf = lambda t,y,v: -v # el signo, revisar diagrama cuerpo libre\ng = lambda t,y,v: 9.8 - (0.225\/90)*(v**2)\nt0 = 0\ny0 = 1000\nv0 = 0\nh  = 2\nmuestras = 14+1\n\n# Algoritmo como funci\u00f3n\ndef rungekutta2_fg(f,g,x0,y0,z0,h,muestras,\n                   vertabla=False, precision=6):\n    ''' solucion a EDO d2y\/dx2 con Runge-Kutta 2do Orden,\n    f(x,y,z) = z #= y'\n    g(x,y,z) = expresion d2y\/dx2 con z=y'\n    tambien es solucion a sistemas edo f() y g()\n    x0,y0,z0 son valores iniciales, h es tamano de paso,\n    muestras es la cantidad de puntos a calcular.\n    '''\n    tamano = muestras + 1\n    tabla = np.zeros(shape=(tamano,3+4),dtype=float)\n    # incluye el punto &#x5B;x0,y0,z0,K1y,K1z,K2y,K2z]\n    tabla&#x5B;0] = &#x5B;x0,y0,z0,0,0,0,0]\n    \n    xi = x0 # valores iniciales\n    yi = y0\n    zi = z0\n    for i in range(1,tamano,1):\n        K1y = h * f(xi,yi,zi)\n        K1z = h * g(xi,yi,zi)\n        \n        K2y = h * f(xi+h, yi + K1y, zi + K1z)\n        K2z = h * g(xi+h, yi + K1y, zi + K1z)\n\n        yi = yi + (K1y+K2y)\/2\n        zi = zi + (K1z+K2z)\/2\n        xi = xi + h\n        \n        tabla&#x5B;i] = &#x5B;xi,yi,zi,K1y,K1z,K2y,K2z]\n        \n    if vertabla==True:\n        np.set_printoptions(precision)\n        print('EDO f,g con Runge-Kutta 2 Orden')\n        print('i ','&#x5B; xi,  yi,  zi',']')\n        print('   &#x5B; K1y,  K1z,  K2y,  K2z ]')\n        for i in range(0,tamano,1):  \n            txt = ' '\n            if i&gt;=10:\n                txt = '  '\n            print(str(i),tabla&#x5B;i,0:3])\n            print(txt,tabla&#x5B;i,3:])\n    \n    return(tabla)\n\n# PROCEDIMIENTO\ntabla = rungekutta2_fg(f,g,t0,y0,v0,h,muestras,\n                       vertabla=True, precision=4)\n# SALIDA\n# print('tabla de resultados')\n# print(tabla)\n<\/pre><\/div>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<div class=\"wp-block-group alignwide has-medium-font-size is-content-justification-center is-layout-flex wp-container-core-group-is-layout-b02886af wp-block-group-is-layout-flex\">\n<p><a href=\"#concepto\">Runge Kutta<\/a>&nbsp;<span class=\"wp-katex-eq\" data-display=\"false\"> \\frac{\\delta^2 y}{\\delta x^2}<\/span><\/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><em>Algoritmo<\/em>:<\/p>\n\n\n\n<p><a href=\"#rk2ordend2f\">RK 2do Orden<\/a><\/p>\n\n\n\n<p><a href=\"#grafica\">gr\u00e1fica<\/a><\/p>\n\n\n\n<p><a href=\"#rk4ordend2f\">RK 4to Orden<\/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\">5. Gr\u00e1fica<\/h2>\n\n\n\n<p>Instrucciones adicionales al algoritmo anterior<\/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\ntitulo = 'EDO Runge-Kutta 2ord - Paracaidista Wingsuit'\ni = muestras # iteraci\u00f3n en gr\u00e1fica\n\ntitulo = titulo+', i='+str(i)\nxi = tabla&#x5B;:,0]\nyi = tabla&#x5B;:,1]\nzi = tabla&#x5B;:,2]\nK1y = tabla&#x5B;:,3]\nK1z = tabla&#x5B;:,4]\nK2y = tabla&#x5B;:,5]\nK2z = tabla&#x5B;:,6]\n\nplt.subplot(211)\nplt.plot(xi&#x5B;0],yi&#x5B;0],'o',\n         color='red', label ='&#x5B;t0,y0]')\nplt.plot(xi&#x5B;1:i+2],yi&#x5B;1:i+2],'o',\n         color='green', label ='&#x5B;t&#x5B;i],y&#x5B;i]]')\nplt.plot(xi&#x5B;0:i+2],yi&#x5B;0:i+2],\n         color='blue',label='y(t)')\nif i&lt;muestras: # gr\u00e1fica para una iteraci\u00f3n\n    plt.plot(xi&#x5B;i+1],yi&#x5B;i+1],'o',color='orange',\n             label ='&#x5B;x&#x5B;i+1],y&#x5B;i+1]]')\n    plt.plot(xi&#x5B;i:i+3],yi&#x5B;i:i+3],'.',color='gray')\n    plt.plot(xi&#x5B;i:i+2],&#x5B;yi&#x5B;i],yi&#x5B;i]], color='orange',\n             label='h',linestyle='dashed')\n    plt.plot(&#x5B;xi&#x5B;i+1]-0.02*h,xi&#x5B;i+1]-0.02*h],\n             &#x5B;yi&#x5B;i],yi&#x5B;i]+K1y&#x5B;i+1]],\n             color='green',label='K1y',linestyle='dashed')\n    plt.plot(&#x5B;xi&#x5B;i+1]+0.02*h,xi&#x5B;i+1]+0.02*h],\n             &#x5B;yi&#x5B;i],yi&#x5B;i]+K2y&#x5B;i+1]],\n             color='magenta',label='K2y',linestyle='dashed')\n    plt.plot(&#x5B;xi&#x5B;i+1]-0.02*h,xi&#x5B;i+1]+0.02*h],\n             &#x5B;yi&#x5B;i]+K1y&#x5B;i+1],yi&#x5B;i]+K2y&#x5B;i+1]],\n             color='magenta')\nif np.min(yi&#x5B;0:i+1])&lt;0: # linea 0\n    plt.axhline(0, color='red')\nplt.ylabel('y = Altura')\nplt.title(titulo)\nplt.legend()\nplt.grid()\nplt.tight_layout()\n\nplt.subplot(212)\nplt.plot(xi&#x5B;0],zi&#x5B;0],'o',\n         color='red', label ='&#x5B;t0,v0]')\nplt.plot(xi&#x5B;1:i+2],zi&#x5B;1:i+2],'o',\n         color='green', label ='&#x5B;t&#x5B;i],v&#x5B;i]]')\nplt.plot(xi&#x5B;0:i+2],zi&#x5B;0:i+2],\n         color='green',label='v(t)')\nif i&lt;muestras: # gr\u00e1fica para una iteraci\u00f3n\n    plt.plot(xi&#x5B;i+1],zi&#x5B;i+1],'o',color='orange',\n             label ='&#x5B;t&#x5B;i+1],v&#x5B;i+1]]')\n    plt.plot(xi&#x5B;i:i+3],zi&#x5B;i:i+3],'.',color='gray')\n    plt.plot(xi&#x5B;i:i+2],&#x5B;zi&#x5B;i],zi&#x5B;i]], color='orange',\n             label='h',linestyle='dashed')\n    plt.plot(&#x5B;xi&#x5B;i+1]-0.02*h,xi&#x5B;i+1]-0.02*h],\n             &#x5B;zi&#x5B;i],zi&#x5B;i]+K1z&#x5B;i+1]],\n             color='green',label='K1z',linestyle='dashed')\n    plt.plot(&#x5B;xi&#x5B;i+1]+0.02*h,xi&#x5B;i+1]+0.02*h],\n             &#x5B;zi&#x5B;i],zi&#x5B;i]+K2z&#x5B;i+1]],\n             color='magenta',label='K2z',linestyle='dashed')\n    plt.plot(&#x5B;xi&#x5B;i+1]-0.02*h,xi&#x5B;i+1]+0.02*h],\n             &#x5B;zi&#x5B;i]+K1z&#x5B;i+1],zi&#x5B;i]+K2z&#x5B;i+1]],\n             color='magenta')\n\nplt.xlabel('x = tiempo')\nplt.ylabel('z = velocidad')\nplt.legend()\nplt.grid()\nplt.tight_layout()\n\nplt.show() #comentar para la siguiente gr\u00e1fica\n<\/pre><\/div>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<div class=\"wp-block-group alignwide has-medium-font-size is-content-justification-center is-layout-flex wp-container-core-group-is-layout-b02886af wp-block-group-is-layout-flex\">\n<p><a href=\"#concepto\">Runge Kutta<\/a>&nbsp;<span class=\"wp-katex-eq\" data-display=\"false\"> \\frac{\\delta^2 y}{\\delta x^2}<\/span><\/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><em>Algoritmo<\/em>:<\/p>\n\n\n\n<p><a href=\"#rk2ordend2f\">RK 2do Orden<\/a><\/p>\n\n\n\n<p><a href=\"#grafica\">gr\u00e1fica<\/a><\/p>\n\n\n\n<p><a href=\"#rk4ordend2f\">RK 4to Orden<\/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=\"rk4ordend2f\">6.&nbsp;Algoritmo en Python para&nbsp;<span class=\"wp-katex-eq\" data-display=\"false\"> \\frac{\\delta^2 y}{\\delta x^2}<\/span>&nbsp;Runge-Kutta 4to Orden<\/h2>\n\n\n\n<p>Se adjunta la funci\u00f3n para 4to orden que se puede probar con el mismo ejercicio anterior.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code alignwide\"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\n# EDO d2y\/dx2. M\u00e9todo de RungeKutta 4to Orden \n# estima la solucion para muestras espaciadas h en eje x\n# valores iniciales x0,y0,z0 entrega\n# tabla&#x5B;xi,yi,zi,K1y,K1z,K2y,K2z,K3y,K3z,K4y,K4z]\nimport numpy as np\n\ndef rungekutta4_fg(fx,gx,x0,y0,z0,h,muestras,\n                   vertabla=False, precision=6):\n    ''' solucion a EDO d2y\/dx2 con Runge-Kutta 4to Orden,\n    f(x,y,z) = z #= y'\n    g(x,y,z) = expresion d2y\/dx2 con z=y'\n    tambien es solucion a sistemas edo f() y g()\n    x0,y0,z0 son valores iniciales, h es tamano de paso,\n    muestras es la cantidad de puntos a calcular.\n    '''\n    tamano = muestras + 1\n    tabla = np.zeros(shape=(tamano,3+8),dtype=float)\n    # incluye el punto &#x5B;x0,y0]\n    tabla&#x5B;0] = &#x5B;x0,y0,z0,0,0,0,0,0,0,0,0]\n\n    xi = x0 # valores iniciales\n    yi = y0\n    zi = z0\n    for i in range(1,tamano,1):\n        K1y = h * fx(xi,yi,zi)\n        K1z = h * gx(xi,yi,zi)\n        \n        K2y = h * fx(xi+h\/2, yi + K1y\/2, zi + K1z\/2)\n        K2z = h * gx(xi+h\/2, yi + K1y\/2, zi + K1z\/2)\n        \n        K3y = h * fx(xi+h\/2, yi + K2y\/2, zi + K2z\/2)\n        K3z = h * gx(xi+h\/2, yi + K2y\/2, zi + K2z\/2)\n\n        K4y = h * fx(xi+h, yi + K3y, zi + K3z)\n        K4z = h * gx(xi+h, yi + K3y, zi + K3z)\n\n        yi = yi + (K1y+2*K2y+2*K3y+K4y)\/6\n        zi = zi + (K1z+2*K2z+2*K3z+K4z)\/6\n        xi = xi + h\n        \n        tabla&#x5B;i] = &#x5B;xi,yi,zi,K1y,K1z,K2y,K2z,K3y,K3z,K4y,K4z]\n    \n    if vertabla==True:\n        np.set_printoptions(precision)\n        print('EDO f,g con Runge-Kutta 4 Orden')\n        print('i ','&#x5B; xi,  yi,  zi',']')\n        print('   &#x5B; K1y,  K1z,  K2y,  K2z ]')\n        print('   &#x5B; K3y,  K3z,  K4y,  K4z ]')\n        for i in range(0,tamano,1):  \n            txt = ' '\n            if i&gt;=10:\n                txt = '  '\n            print(str(i),tabla&#x5B;i,0:3])\n            print(txt,tabla&#x5B;i,3:7])\n            print(txt,tabla&#x5B;i,7:])\n\n    return(tabla)\n<\/pre><\/div>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<div class=\"wp-block-group alignwide has-medium-font-size is-content-justification-center is-layout-flex wp-container-core-group-is-layout-b02886af wp-block-group-is-layout-flex\">\n<p><a href=\"#concepto\">Runge Kutta<\/a>&nbsp;<span class=\"wp-katex-eq\" data-display=\"false\"> \\frac{\\delta^2 y}{\\delta x^2}<\/span><\/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><em>Algoritmo<\/em>:<\/p>\n\n\n\n<p><a href=\"#rk2ordend2f\">RK 2do Orden<\/a><\/p>\n\n\n\n<p><a href=\"#grafica\">gr\u00e1fica<\/a><\/p>\n\n\n\n<p><a href=\"#rk4ordend2f\">RK 4to Orden<\/a><\/p>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n","protected":false},"excerpt":{"rendered":"<p>Runge Kutta&nbsp; Ejercicio anal\u00edtico Algoritmo: RK 2do Orden gr\u00e1fica RK 4to Orden 1. EDO con Runge-Kutta Para una ecuaci\u00f3n diferencial de segunda derivada (segundo orden) con condiciones de inicio en x0, y0, y'0 Forma estandarizada de la ecuaci\u00f3n: Se puede sustituir la variable y' por z, lo que se convierte a dos expresiones que forman [&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":[40],"tags":[],"class_list":["post-1989","post","type-post","status-publish","format-standard","hentry","category-mn-u06"],"_links":{"self":[{"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/1989","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=1989"}],"version-history":[{"count":17,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/1989\/revisions"}],"predecessor-version":[{"id":22951,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/1989\/revisions\/22951"}],"wp:attachment":[{"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/media?parent=1989"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/categories?post=1989"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/tags?post=1989"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}