{"id":997,"date":"2017-09-03T09:05:09","date_gmt":"2017-09-03T14:05:09","guid":{"rendered":"http:\/\/blog.espol.edu.ec\/matg1013\/?p=997"},"modified":"2026-03-14T05:10:02","modified_gmt":"2026-03-14T10:10:02","slug":"runge-kutta-2orden-dydx","status":"publish","type":"post","link":"https:\/\/blog.espol.edu.ec\/algoritmos101\/mn-u06\/runge-kutta-2orden-dydx\/","title":{"rendered":"6.2 EDO dy\/dx, Runge-Kutta 2do orden 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><a href=\"#concepto\">Runge Kutta<\/a>&nbsp; dy\/dx<\/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=\"concepto\">1. EDO <span class=\"wp-katex-eq\" data-display=\"false\"> \\frac{\\delta y}{\\delta x}<\/span> con Runge-Kutta<\/h2>\n\n\n\n<p><strong>Referencia<\/strong>: Burden 5.4 p209, Chapra 25.3 p740, Rodr\u00edguez 9.1.7 p354, Boyce DiPrima 4Ed 8.4 p450<\/p>\n\n\n\n<p>Para una ecuaci\u00f3n diferencial ordinaria de primera derivada, el m\u00e9todo&nbsp;Runge-Kutta de <strong>2do Orden<\/strong> usa una correcci\u00f3n sobre la derivada a partir de los puntos <strong>x<\/strong>i y <strong>x<\/strong>i+<strong>h<\/strong>,&nbsp; es decir un tama\u00f1o de paso <strong>h<\/strong> hacia adelante, calculados como t\u00e9rminos K<sub>1<\/sub> y K<sub>2<\/sub>.<\/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\/EdoRK2df_ani.gif\" alt=\"EDO Runge-Kutta 2 orden df\/dx_gr\u00e1fico animado\" class=\"wp-image-22917\" \/><\/figure>\n\n\n\n<p>Considere una ecuaci\u00f3n diferencial de primera derivada con una condici\u00f3n de inicio se reordena y se escribe como f(x,y) siguiendo los pasos:<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> \\frac{\\delta y}{\\delta x} + etc =0 <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> y'(x) = f(x_i,y_i)<\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> y(x_0) = y_0 <\/span>\n\n\n\n<p>Los t\u00e9rminos K<sub>1<\/sub> y K<sub>2<\/sub> se calculan para predecir el pr\u00f3ximo valor en y[i+1], observe que el t\u00e9rmino K<sub>1<\/sub> es el mismo que el m\u00e9todo de Edo con Taylor de dos t\u00e9rminos.<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> K_1 = h f(x_i,y_i) <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> K_2 = h f(x_i+h, y_i + K_1) <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> y_{i+1} = y_i + \\frac{K_1+K_2}{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<figure class=\"wp-block-image alignright size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"560\" height=\"440\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2017\/09\/rungekutta2doorden_02.png\" alt=\"Runge-Kutta 2do Orden dy\/dx esquema gr\u00e1fico\" class=\"wp-image-13812\" \/><\/figure>\n\n\n\n<p>Runge-Kutta 2do Orden tiene error de truncamiento O(h<sup>3<\/sup>)<\/p>\n\n\n\n<p>Las iteraciones se repiten para encontrar el siguiente punto en x[i+1] como se muestra en el gr\u00e1fico animado.<\/p>\n\n\n\n<p>Los m\u00e9todos de Runge-Kutta&nbsp; mejoran la aproximaci\u00f3n a la respuesta de la ecuaci\u00f3n diferencial ordinaria sin requerir determinar las expresiones de las derivadas de orden superior, como fue necesario en <a href=\"https:\/\/blog.espol.edu.ec\/algoritmos101\/mn-unidades\/mn-u06\/edo-taylor-3terminos\/\" data-type=\"post\" data-id=\"1003\">EDO con Taylor<\/a>.<\/p>\n\n\n\n<p>Para observar al idea b\u00e1sica, considere observar un combate a\u00e9reo simulado en la d\u00e9cada de 1940, donde las armas se encuentras fijas en las alas del avi\u00f3n. Observe <strong>dos minutos<\/strong> del video sugerido a partir de donde se encuentra marcado el enlace.<\/p>\n\n\n\n<p><strong><em>Video Revisar<\/em><\/strong>:<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"The First Tuskegee Ace of WWII | Dogfights | History\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/Vr7nzvwm2Z4?start=194&feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<p>Luego de observar el video de introducci\u00f3n conteste las siguientes preguntas:<br>\u00bf Que trayectoria siguen los proyectiles al salir del ca\u00f1\u00f3n?<br>\u00bf Que trayectoria siguen los aviones, el perseguido y el que caza?<br>\u00bf Cu\u00e1l es la relaci\u00f3n entre las trayectorias de los dos aviones?<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"653\" height=\"442\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2017\/09\/rungekutta2doorden_01.png\" alt=\"Runge-Kutta 2do Orden Esquema gr\u00e1fico inicial\" class=\"wp-image-13813\" \/><\/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><a href=\"#concepto\">Runge Kutta<\/a>&nbsp; dy\/dx<\/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\">2. Ejercicio<\/h2>\n\n\n\n<p><strong>Referencia<\/strong>: Rodr\u00edguez 9.1.1 ejemplo p335. Chapra 25.1.3 p731<\/p>\n\n\n\n<p>Se pide encontrar puntos de la soluci\u00f3n en la ecuaci\u00f3n diferencial usando los tres primeros t\u00e9rminos de la serie de Taylor con <strong>h<\/strong>=0.1 y punto inicial <strong>x<\/strong><sub>0<\/sub>=0, <strong>y<\/strong><sub>0<\/sub>=1<\/p>\n\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> \\frac{dy}{dx}-y -x +x^2 -1 = 0 <\/span>\n\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> y'-y -x +x^2 -1 = 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><a href=\"#concepto\">Runge Kutta<\/a>&nbsp; dy\/dx<\/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\">3. Desarrollo Anal\u00edtico<\/h2>\n\n\n\n<p>Se reordena la expresi\u00f3n haciendo que la derivada se encuentre en el lado izquierdo:<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> f(x,y) = y' = y -x^2 +x +1 <\/span>\n\n\n\n<p>Se usa las expresiones de Runge-Kutta en orden, K1 corresponde a una correcci\u00f3n de EDO con Taylor de dos t\u00e9rminos (m\u00e9todo de Euler). K2 considera el c\u00e1lculo a un tama\u00f1o de paso m\u00e1s adelante. <strong>iteraci\u00f3n<\/strong>:<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> K_1 = h f(x_i,y_i) = 0.1 (y_i -x_i^2 +x_i +1) <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> K_2 = h f(x_i+h, y_i + K_1) <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> K_2 = 0.1 \\Big((y_i+K_1) -(x_i+h)^2 +(x_i+h) +1 \\Big) <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> y_{i+1} = y_i + \\frac{K_1+K_2}{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<p>Runge-Kutta 2do Orden tiene error de truncamiento O(h<sup>3<\/sup>)<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"638\" height=\"479\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2017\/09\/EdoRungeKutta2Orden_itera_n.gif\" alt=\"EDO Runge-Kutta 2 Orden itera=n gr\u00e1fica\" class=\"wp-image-22919\" \/><\/figure>\n\n\n\n<p>para el ejercicio, el tama\u00f1o de paso h=0.1, se realizan tres iteraciones en las actividades del curso con l\u00e1piz y papel,<\/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<\/strong> = 0 , x<sub>0<\/sub> = 0, y<sub>0<\/sub> = 1<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> K_1 = 0.1 f(0,1) = 0.1 \\Big( 1 -0^2 +0 +1 \\Big) = 0.2<\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> K_2 = 0.1 f(0+0.1, 1+ 0.2) <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> K_2 = 0.1 \\Big( (1+ 0.2) - (0+0.1) ^2 +(0+0.1) +1\\Big) = 0.229<\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> y_1 = 1 + \\frac{0.2+0.229}{2} = 1.2145<\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> x_1 = 0 + 0.1 = 0.1 <\/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 size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"640\" height=\"480\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2017\/09\/EdoRungeKutta2Orden_itera0.gif\" alt=\"EDO Runge-Kutta 2 Orden itera=0 gr\u00e1fica\" class=\"wp-image-22920\" style=\"width:350px\" \/><\/figure>\n<\/div>\n<\/div>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>x<sub>i<\/sub><\/th><th>y<sub>i<\/sub><\/th><th>K<sub>1<\/sub><\/th><th>K<sub>2<\/sub><\/th><\/tr><\/thead><tbody><tr><td>0<\/td><td>1<\/td><td>-<\/td><td>-<\/td><\/tr><tr><td>0.1<\/td><td>1.2145<\/td><td>0.2<\/td><td>0.229<\/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<\/strong> = 1 , x<sub>1<\/sub> = 0.1, y<sub>1<\/sub> = 1.2145<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> K_1 = 0.1 f(0.1,1.2145)<\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> = 0.1( 1.2145 -0.1^2 +0.1 +1)<\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> K_1 = 0.2304 <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> K_2 = 0.1 f(0.1+0.1, 1.2145 + 0.2304) <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> =0.1 \\Big((1.2145 + 0.2304) -(0.1+0.1)^2 +(0.1+0.1) +1\\Big)<\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> K_2 = 0.2604 <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> y_2 = 1.2145 + \\frac{0.2304+0.2604}{2} = 1.4599 <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> x_2 = 0.1 +0.1 = 0.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 size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"640\" height=\"480\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2017\/09\/EdoRungeKutta2Orden_itera1.gif\" alt=\"EDO Runge-Kutta 2Orden itera=1 gr\u00e1fica\" class=\"wp-image-22921\" style=\"width:350px\" \/><\/figure>\n<\/div>\n<\/div>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>x<sub>i<\/sub><\/th><th>y<sub>i<\/sub><\/th><th>K<sub>1<\/sub><\/th><th>K<sub>2<\/sub><\/th><\/tr><\/thead><tbody><tr><td>0<\/td><td>1<\/td><td>-<\/td><td>-<\/td><\/tr><tr><td>0.1<\/td><td>1.2145<\/td><td>0.2<\/td><td>0.229<\/td><\/tr><tr><td>0.2<\/td><td>1.459973<\/td><td>0.23045<\/td><td>0.260495<\/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<\/strong> = 2 , x<sub>2<\/sub> = 0.2, y<sub>2<\/sub> = 1.4599<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> K_1 = 0.1 f(0.2,1.4599)<\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> = 0.1( 1.4599 -0.2^2 +0.2 +1)<\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> K_1 = 0.2619 <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> K_2 = 0.1 f(0.2+0.1, 1.4599 + 0.2619) <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> =0.1 \\Big((1.4599 + 0.2619) -(0.2+0.1)^2 +(0.2+0.1) +1\\Big)<\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> K_2 = 0.2931 <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> y_2 = 1.4599 + \\frac{0.2619+0.2931}{2} = 1.7375 <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> x_2 = 0.2 +0.1 = 0.3 <\/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 size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"640\" height=\"480\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2017\/09\/EdoRungeKutta2Orden_itera2.gif\" alt=\"EDO Runge-Kutta 2Orden itera=1 gr\u00e1fica\" class=\"wp-image-22922\" style=\"width:350px\" \/><\/figure>\n<\/div>\n<\/div>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>x<sub>i<\/sub><\/th><th>y<sub>i<\/sub><\/th><th>K<sub>1<\/sub><\/th><th>K<sub>2<\/sub><\/th><\/tr><\/thead><tbody><tr><td>0<\/td><td>1<\/td><td>-<\/td><td>-<\/td><\/tr><tr><td>0.1<\/td><td>1.2145<\/td><td>0.2<\/td><td>0.229<\/td><\/tr><tr><td>0.2<\/td><td>1.459973<\/td><td>0.23045<\/td><td>0.260495<\/td><\/tr><tr><td>0.3<\/td><td>1.73757<\/td><td>0.261997<\/td><td>0.293197<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<p>Luego de las 3 iteraciones en papel, se completan los dem\u00e1s puntos con el algoritmo obteniendo la gr\u00e1fica resultante para y(x) correspondiente.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>EDO dy\/dx con Runge-Kutta 2 Orden\ni, &#091;xi,     yi,     K1,    K2]\n0 &#091;0. 1. 0. 0.]\n1 &#091;0.1    1.2145 0.2    0.229 ]\n2 &#091;0.2      1.459973 0.23045  0.260495]\n3 &#091;0.3      1.73757  0.261997 0.293197]\n4 &#091;0.4      2.048564 0.294757 0.327233]\n5 &#091;0.5      2.394364 0.328856 0.362742]\n&gt;&gt;&gt;<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"638\" height=\"479\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2017\/09\/EdoRungeKutta2Orden_itera_n.gif\" alt=\"EDO Runge-Kutta 2 Orden itera=n gr\u00e1fica\" class=\"wp-image-22919\" \/><\/figure>\n\n\n\n<p>Compare los resultados con Taylor de 2 y 3 t\u00e9rminos.<\/p>\n\n\n\n<p>Runge-Kutta 2do Orden tiene error de truncamiento O(h<sup>3<\/sup>)<\/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><a href=\"#concepto\">Runge Kutta<\/a>&nbsp; dy\/dx<\/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\">4. Algoritmo en Python para Runge-Kutta 2do Orden<\/h2>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"EDO con Runge-Kutta 2do Orden con Python\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/TbejBSPjJzE?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<p>Para el ejercicio anterior, se adjunta el programa de prueba que usa la funci\u00f3n <code><strong><em>rungekutta2<\/em><\/strong>(<em>d1y,x0,y0,h,muestras<\/em>)<\/code>&nbsp;.<\/p>\n\n\n\n<p>Las iteraciones y sus valores se pueden observar usando <code>vertabla=true<\/code><\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code alignwide\"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\n# EDO dy\/dx. M todo de RungeKutta 2do Orden \n# estima la solucion para muestras espaciadas h en eje x\n# valores iniciales x0,y0, entrega tabla&#x5B;xi,yi,K1,K2]\nimport numpy as np\n \n# INGRESO\n# d1y = y' = f\nd1y = lambda x,y: y -x**2 + x + 1\nx0 = 0\ny0 = 1\nh  = 0.1\nmuestras = 5\n \n# algoritmos como funcion\ndef rungekutta2(d1y,x0,y0,h,muestras,\n                vertabla=False,precision=6):\n    '''solucion a EDO dy\/dx, con Runge Kutta de 2do orden\n    d1y es la expresion dy\/dx, tambien planteada como f(x,y),\n    valores iniciales: x0,y0, tamano de paso h.\n    muestras es la cantidad de puntos a calcular. \n    '''\n    tamano = muestras + 1\n    tabla = np.zeros(shape=(tamano,2+2),dtype=float)\n    tabla&#x5B;0] = &#x5B;x0,y0,0,0] # incluye el punto &#x5B;x0,y0]\n     \n    xi = x0 # valores iniciales\n    yi = y0\n    for i in range(1,tamano,1):\n        K1 = h * d1y(xi,yi)\n        K2 = h * d1y(xi+h, yi + K1)\n \n        yi = yi + (K1+K2)\/2\n        xi = xi + h\n         \n        tabla&#x5B;i] = &#x5B;xi,yi,K1,K2]\n        \n    if vertabla==True:\n        np.set_printoptions(precision)\n        print( 'EDO dy\/dx con Runge-Kutta 2 Orden')\n        print('i, &#x5B;xi,     yi,     K1,    K2]')\n        for i in range(0,tamano,1):\n            print(i,tabla&#x5B;i])\n \n    return(tabla)\n \n# PROCEDIMIENTO\ntabla = rungekutta2(d1y,x0,y0,h,muestras)\nn = len(tabla)\n \n# SALIDA\nprint('EDO dy\/dx con Runge-Kutta 2 Orden')\nprint('i, &#x5B;xi,     yi,     K1,    K2]')\nfor i in range(0,n,1):\n    print(i,tabla&#x5B;i])\n<\/pre><\/div>\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><a href=\"#concepto\">Runge Kutta<\/a>&nbsp; dy\/dx<\/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\">5. Gr\u00e1fica<\/h2>\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 dy\/dx con Runge-Kutta 2 Orden'\ni = muestras # iteraci\u00f3n en gr\u00e1fica\n \ntitulo = titulo+', i='+str(i)\nxi = tabla&#x5B;:,0]\nyi = tabla&#x5B;:,1]\nK1 = tabla&#x5B;:,2]\nK2 = tabla&#x5B;:,3]\n \nplt.plot(xi&#x5B;0:i+2],yi&#x5B;0:i+2]) # iteraciones\nplt.plot(xi&#x5B;0],yi&#x5B;0],'o',\n         color='red', label ='&#x5B;x0,y0]')\nplt.plot(xi&#x5B;1:i+2],yi&#x5B;1:i+2],'o',\n         color='green', label ='&#x5B;x&#x5B;i],y&#x5B;i]]')\n \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]+K1&#x5B;i+1]],\n             color='green',label='K1',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]+K2&#x5B;i+1]],\n             color='magenta',label='K2',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]+K1&#x5B;i+1],yi&#x5B;i]+K2&#x5B;i+1]],\n             color='magenta')\n# entorno de gr\u00e1fica\nplt.title(titulo)\nplt.xlabel('x')\nplt.ylabel('y')\nplt.legend()\nplt.grid()\nplt.tight_layout()\nplt.show() # plt.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 has-medium-font-size is-layout-flex wp-block-group-is-layout-flex\">\n<p><a href=\"#concepto\">Runge Kutta<\/a>&nbsp; dy\/dx<\/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=\"errado\">6. C\u00e1lculo de Error con la soluci\u00f3n conocida<\/h2>\n\n\n\n<p>La ecuaci\u00f3n diferencial ordinaria del ejercicio tiene una soluci\u00f3n conocida, lo que permite encontrar el error real en cada punto respecto a la aproximaci\u00f3n estimada.<\/p>\n\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> y = e^x + x + x^2 <\/span>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"555\" height=\"440\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2017\/09\/edo_rungekutta2orden03.png\" alt=\"EDO Runge-Kutta 2orden compara resultado con soluci\u00f3n anal\u00edtica\" class=\"wp-image-13815\" \/><\/figure>\n\n\n\n<p>Note que el error crece al distanciarse del punto inicial.<\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code>Error m\u00e1ximo estimado:  0.004357584597315167\nentre puntos: \n&#091;0.         0.00067092 0.00143026 \n 0.0022892  0.00326028 0.00435758]\n&gt;&gt;&gt;<\/code><\/pre>\n\n\n\n<p>Para las siguientes instrucciones, comente la \u00faltima l\u00ednea <code>#plt.show()<\/code> antes de continuar con:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code alignwide\"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\n# ERROR vs soluci\u00f3n conocida -----------------\ny_sol = lambda x: ((np.e)**x) + x + x**2\n\nyi_psol  = y_sol(xi)\nerrores  = yi_psol - yiRK2\nerrormax = np.max(np.abs(errores))\n\n# SALIDA\nprint('Error m\u00e1ximo estimado: ',errormax)\nprint('entre puntos: ')\nprint(errores)\n\n# GRAFICA &#x5B;a,b+2*h]\na = x0\nb = h*muestras+2*h\nmuestreo = 10*muestras+2\nxis = np.linspace(a,b,muestreo)\nyis = y_sol(xis)\n\nplt.plot(xis,yis, label='y soluci\u00f3n conocida',\n         linestyle='dashed')\nplt.legend()\nplt.show()\n<\/pre><\/div>\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><a href=\"#concepto\">Runge Kutta<\/a>&nbsp; dy\/dx<\/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","protected":false},"excerpt":{"rendered":"<p>Runge Kutta&nbsp; dy\/dx Ejercicio Anal\u00edtico Algoritmo gr\u00e1fica 1. EDO con Runge-Kutta Referencia: Burden 5.4 p209, Chapra 25.3 p740, Rodr\u00edguez 9.1.7 p354, Boyce DiPrima 4Ed 8.4 p450 Para una ecuaci\u00f3n diferencial ordinaria de primera derivada, el m\u00e9todo&nbsp;Runge-Kutta de 2do Orden usa una correcci\u00f3n sobre la derivada a partir de los puntos xi y xi+h,&nbsp; es decir [&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-997","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\/997","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=997"}],"version-history":[{"count":12,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/997\/revisions"}],"predecessor-version":[{"id":22930,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/997\/revisions\/22930"}],"wp:attachment":[{"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/media?parent=997"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/categories?post=997"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/tags?post=997"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}