{"id":3747,"date":"2017-04-04T13:00:49","date_gmt":"2017-04-04T18:00:49","guid":{"rendered":"http:\/\/blog.espol.edu.ec\/telg1001\/?p=3747"},"modified":"2026-04-05T23:00:51","modified_gmt":"2026-04-06T04:00:51","slug":"lti-ct-respuesta-entrada-cero-scipy-runge-kutta-scilab","status":"publish","type":"post","link":"https:\/\/blog.espol.edu.ec\/algoritmos101\/ss-u03\/lti-ct-respuesta-entrada-cero-scipy-runge-kutta-scilab\/","title":{"rendered":"3.2.2 LTI CT - Respuesta a entrada cero con Scipy, Runge-Kutta, Scilab"},"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=\"#ejercicio\">Ejercicio<\/a><\/p>\n\n\n\n<p><a href=\"#zirscipy\">ZIR Scipy<\/a><\/p>\n\n\n\n<p><a href=\"#zirrungekutta\">ZIR Runge-Kutta<\/a><\/p>\n\n\n\n<p><a href=\"#zirscilab\">ZIR Xcos-Scilab<\/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. Ejercicio: Circuito RLC<\/h2>\n\n\n\n<figure class=\"wp-block-image alignright size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"315\" height=\"157\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2023\/09\/circuito_RLC01.png\" alt=\"circuito RLC 1H 3Ohm 1\/2F\" class=\"wp-image-13847\" \/><\/figure>\n\n\n\n<p><em><strong>Referencia<\/strong><\/em>: Lathi 1.8-1 p111. Oppenheim problema 2.61c p164, Ejemplo 9.24 p700<\/p>\n\n\n\n<p>Siguiendo con el ejemplo de la referencia planteado en \"<a href=\"https:\/\/blog.espol.edu.ec\/algoritmos101\/ss-u03\/sistema-modelo-entrada-salida\/\" data-type=\"post\" data-id=\"522\">Sistema LTI CT \u2013 Modelo entrada-salida<\/a>\" y las instrucciones del desarrollo anal\u00edtico para \"<a href=\"https:\/\/blog.espol.edu.ec\/algoritmos101\/ss-u03\/lti-ct-respuesta-entrada-cero-python\/\" data-type=\"post\" data-id=\"543\">LTI CT - Respuesta entrada cero<\/a>\", se tiene la expresi\u00f3n:<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> \\frac{d^2}{dt^2}y(t) +3\\frac{d}{dt}y(t) + 2y(t) = \\frac{d}{dt}x(t) <\/span>\n\n\n\n<p>Se prefiere escribir el termino de mayor orden primero y para entrada cero.Se tiene que <strong>x<\/strong>(<strong>t<\/strong>)=<strong>0<\/strong>, con condiciones iniciales y(0)=0, y'(0)=-5.<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> (D^2 + 3D +2)y(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><a href=\"#ejercicio\">Ejercicio<\/a><\/p>\n\n\n\n<p><a href=\"#zirscipy\">ZIR Scipy<\/a><\/p>\n\n\n\n<p><a href=\"#zirrungekutta\">ZIR Runge-Kutta<\/a><\/p>\n\n\n\n<p><a href=\"#zirscilab\">ZIR Xcos-Scilab<\/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=\"zirscipy\">2. ZIR Respuesta entrada cero - desarrollo num\u00e9rico con Scipy-Python<\/h2>\n\n\n\n<p>Esta forma de describir el problema simplifica el desarrollo a partir de la descripci\u00f3n de la ecuaci\u00f3n del sistema.<\/p>\n\n\n\n<p><strong>Scipy<\/strong> define un sistema LTI usando los coeficientes de la ecuaci\u00f3n ordenados como la expresi\u00f3n P(D)\/Q(D) con la funci\u00f3n <strong>Scipy<\/strong>.signal.lti().<\/p>\n\n\n\n<p>Se describe una se\u00f1al de entrada x(t), muestreada en un intervalo [a,b] junto a las condiciones iniciales en un vector [y'(0),y(0)].<\/p>\n\n\n\n<p>El resultado ser\u00e1 la simulaci\u00f3n del paso de la se\u00f1al x(t) por el sistema LTI, usando la funci\u00f3n <strong>scipy.signal.lsim<\/strong>(), con lo que se obtiene la respuesta del sistema y(t) y los componentes yc=[yi(t),y0(t)], donde y0(t) representa la respuesta a entrada cero.<\/p>\n\n\n\n<p>El algoritmo tiene el siguiente resultado:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"552\" height=\"464\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2017\/04\/respuestaEntradaCero01Scipy.png\" alt=\"respuestaEntradaCero01Scipy\" class=\"wp-image-19823\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Algoritmo en Python con Scipy<\/h3>\n\n\n<div class=\"wp-block-syntaxhighlighter-code alignwide\"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\n# Sistema lineal usando scipy.signal\n#   Q(D)y(t)=P(D)x(t)\n# ejemplo: (D^2+3D+2)y(t)=(D+0)x(t)\n\nimport numpy as np\nimport scipy.signal as senal\nimport matplotlib.pyplot as plt\n\n# INGRESO\n# tiempo &#x5B;a,b] intervalo observaci\u00f3n\na = 0 ; b = 5 # intervalo tiempo &#x5B;a,b]\nmuestras = 41\n\n# Se\u00f1al de entrada x(t) = 0\nx = lambda t: t*0\n\n# Sistema LTI\n# coeficientes Q  P de la ecuaci\u00f3n diferencial\nQ = &#x5B;1., 3., 2.]\nP = &#x5B;1., 0.]\n# condiciones iniciales &#x5B;y'(0),y(0)]\ncond_inicio = &#x5B;-5,0]\n\n# PROCEDIMIENTO\n# intervalo observado\nti = np.linspace(a, b, muestras)\nxi = x(ti)\n\nsistema = senal.lti(P,Q)\n\n# respuesta entrada cero\n&#x5B;t_y, yi, yc] = senal.lsim(sistema, xi, ti, cond_inicio)\n# respuesta a impulso\n&#x5B;t_h, hi] = sistema.impulse(T = ti)\n\n# SALIDA - GRAFICA\nplt.subplot(211)\nplt.suptitle('Respuesta a Entrada cero')\nplt.plot(ti, xi, color='blue', label='x(t)')\n#plt.plot(t_h, hi, color='red', label='h(t)')\nplt.legend()\nplt.grid()\n\nplt.subplot(212)\n# plt.plot(t_y, yi, color='magenta', label='y(t)')\n# plt.plot(t_y, yc&#x5B;:,0], 'g-.', label='y(t)')\nplt.plot(t_y, yc&#x5B;:,1], color='orange', label='y0(t)')\nplt.xlabel('t')\nplt.legend()\nplt.grid()\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=\"#ejercicio\">Ejercicio<\/a><\/p>\n\n\n\n<p><a href=\"#zirscipy\">ZIR Scipy<\/a><\/p>\n\n\n\n<p><a href=\"#zirrungekutta\">ZIR Runge-Kutta<\/a><\/p>\n\n\n\n<p><a href=\"#zirscilab\">ZIR Xcos-Scilab<\/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=\"zirrungekutta\">3. ZIR Respuesta entrada cero - desarrollo num\u00e9rico con Runge-Kutta de M\u00e9todos num\u00e9ricos en Python<\/h2>\n\n\n\n<p>Se reordena el sistema de ecuaciones para plantear una soluci\u00f3n con el algoritmo Runge-Kutta de 2do orden para ecuaciones diferenciales con segundas derivadas<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> (D^2 + 3D +2)y(t) = 0 <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> D^2 y(t) + 3Dy(t) + 2y(t) = 0 <\/span>\n\n\n\n<p>Se ubica el t\u00e9rmino de mayor grado a la izquierda de la ecuaci\u00f3n:<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> D^2 y(t) = - 3Dy(t) - 2y(t) <\/span>\n\n\n\n<p>sustituyendo las expresiones de las derivadas como las funciones f(x) por z y g(x) por z':<\/p>\n\n\n\n<p>Dy = y' = z = f(x)<br>D<sup>2<\/sup>y = <code>y\"<\/code> = z'= -3z - 2y = g(x)<\/p>\n\n\n\n<p>Los valores iniciales de t0=0, y0=0, z0=-5 se usan en el algoritmo.<\/p>\n\n\n\n<p>En este caso tambi\u00e9n se requiere conocer un intervalo de tiempo a observar [0,tn=5] y definir el tama\u00f1o de paso o resoluci\u00f3n del resultado h=dt=0.1<\/p>\n\n\n\n<p>El algoritmo permite obtener la gr\u00e1fica y la tabla de datos.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"592\" height=\"457\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2017\/04\/respuestaEntradaCeroRK01.png\" alt=\"respuesta Entrada Cero RK 01\" class=\"wp-image-19824\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Algoritmo en Python con Runge-Kutta<\/h3>\n\n\n<div class=\"wp-block-syntaxhighlighter-code alignwide\"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\n# Respuesta a entrada cero\n# solucion para (D^2+ D + 1)y = 0\nimport numpy as np\nimport matplotlib.pyplot as plt\n\ndef rungekutta2_fg(f,g,x0,y0,z0,h,muestras):\n    tamano = muestras + 1\n    estimado = np.zeros(shape=(tamano,3),dtype=float)\n    # incluye el punto &#x5B;x0,y0]\n    estimado&#x5B;0] = &#x5B;x0,y0,z0]\n    xi = x0\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        estimado&#x5B;i] = &#x5B;xi,yi,zi]\n    return(estimado)\n\n# PROGRAMA\nf = lambda t,y,z: z\ng = lambda t,y,z: -3*z -2*y\n\nt0 = 0\ny0 = 0\nz0 = -5\n\nh = 0.1\ntn = 5\nmuestras = int((tn-t0)\/h)\n\ntabla = rungekutta2_fg(f,g,t0,y0,z0,h,muestras)\nti = tabla&#x5B;:,0]\nyi = tabla&#x5B;:,1]\nzi = tabla&#x5B;:,2]\n\n# SALIDA\nnp.set_printoptions(precision=6)\nprint('ti, yi, zi')\nprint(tabla)\n\n# GRAFICA\nplt.plot(ti,yi, color = 'orange', label='y0(t)')\n\nplt.ylabel('y(t)')\nplt.xlabel('t')\nplt.title('Entrada cero con Runge-Kutta 2do Orden d2y\/dx2 ')\nplt.legend()\nplt.grid()\nplt.show()\n<\/pre><\/div>\n\n\n<p>M\u00e1s detalles del algoritmo de Runge-Kutta para segunda derivada en <a href=\"https:\/\/blog.espol.edu.ec\/algoritmos101\/mn-unidades\/mn-u06\/runge-kutta-d2y-dx2\/\" data-type=\"post\" data-id=\"1989\">6.3 EDO d2y\/dx2, Runge-Kutta con Python<\/a><\/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=\"#ejercicio\">Ejercicio<\/a><\/p>\n\n\n\n<p><a href=\"#zirscipy\">ZIR Scipy<\/a><\/p>\n\n\n\n<p><a href=\"#zirrungekutta\">ZIR Runge-Kutta<\/a><\/p>\n\n\n\n<p><a href=\"#zirscilab\">ZIR Xcos-Scilab<\/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=\"zirscilab\">4. LTI CT - Respuesta a entrada cero - Diagrama Bloques con XCOS-Scilab<\/h2>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"401\" height=\"201\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2017\/04\/respuestacondicioninterna01.png\" alt=\"respuesta condici\u00f3n interna 01\" class=\"wp-image-19826\" \/><\/figure>\n\n\n\n<p>Para XCOS, se a\u00f1ade un visor de se\u00f1al de salida (Sinks\/Scope) y un reloj de muestreo. Para y'(0)=5 siguiendo el diagrama se ubica y'(t)=dy\/dt como la salida del primer integrador . El valor se cambia dando doble click al elemento marcado en rojo y escribiendo el valor de -5.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"585\" height=\"494\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2017\/04\/respuestacondicioninterna03.png\" alt=\"respuesta condici\u00f3n interna 03\" class=\"wp-image-19828\" \/><\/figure>\n\n\n\n<p>La gr\u00e1fica se obtiene usando el osciloscopio (scope)<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"583\" height=\"393\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2017\/04\/respuestacondicioninterna02.png\" alt=\"respuesta condici\u00f3n interna 02\" class=\"wp-image-19829\" \/><\/figure>\n\n\n\n<p>El tiempo de observaci\u00f3n se establece con el valor de \"Simulati\u00f3n\/Final Integration time\" a 5 segundos.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"585\" height=\"492\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2017\/04\/respuestacondicioninterna04.png\" alt=\"respuesta condici\u00f3n interna 04\" class=\"wp-image-19830\" \/><\/figure>\n\n\n\n<p>De forma semejante se puede realizar el ejercicio en otros simuladores, como por ejemplo Simulink-Matlab.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\">4.1 Desarrollo como circuito en simulador<\/h2>\n\n\n\n<p>La simulaci\u00f3n en forma de circuito usando las herramientas de Simulink\/Matlab y SimPowerSystems, para cada componente (Elements) se crea con \"Series RLC Branch\".<\/p>\n\n\n\n<p>Para extraer las lecturas de las se\u00f1al se usa un medidor (Measurements) que se ubica en serie con los dem\u00e1s componentes y se visualiza con un osciloscopio (Simulink\/Commonly Used Blocks\/Scope).<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"894\" height=\"292\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2017\/04\/RespCondicionesInternas04.png\" alt=\"Respuesta Condiciones Internas 04\" class=\"wp-image-19831\" \/><\/figure>\n\n\n\n<p>Las conexiones son similares a las que se usar\u00edan en el laboratorio. Se puede observar que las respuestas ser\u00e1n las mismas.<\/p>\n\n\n\n<p>Las condiciones iniciales se pueden establecer en los componentes que pueden tener un valor inicial como el capacitor en 5 voltios.<\/p>\n\n\n\n<p>El signo de la corriente de salida ya est\u00e1 incluido en la inversi\u00f3n de polaridad respecto a la polaridad de la fuente.<\/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=\"#ejercicio\">Ejercicio<\/a><\/p>\n\n\n\n<p><a href=\"#zirscipy\">ZIR Scipy<\/a><\/p>\n\n\n\n<p><a href=\"#zirrungekutta\">ZIR Runge-Kutta<\/a><\/p>\n\n\n\n<p><a href=\"#zirscilab\">ZIR Xcos-Scilab<\/a><\/p>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n","protected":false},"excerpt":{"rendered":"<p>Ejercicio ZIR Scipy ZIR Runge-Kutta ZIR Xcos-Scilab 1. Ejercicio: Circuito RLC Referencia: Lathi 1.8-1 p111. Oppenheim problema 2.61c p164, Ejemplo 9.24 p700 Siguiendo con el ejemplo de la referencia planteado en \"Sistema LTI CT \u2013 Modelo entrada-salida\" y las instrucciones del desarrollo anal\u00edtico para \"LTI CT - Respuesta entrada cero\", se tiene la expresi\u00f3n: Se [&hellip;]<\/p>\n","protected":false},"author":8043,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"wp-custom-template-entrada-ss-unidades","format":"standard","meta":{"footnotes":""},"categories":[171],"tags":[],"class_list":["post-3747","post","type-post","status-publish","format-standard","hentry","category-ss-u03"],"_links":{"self":[{"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/3747","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=3747"}],"version-history":[{"count":7,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/3747\/revisions"}],"predecessor-version":[{"id":24004,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/3747\/revisions\/24004"}],"wp:attachment":[{"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/media?parent=3747"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/categories?post=3747"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/tags?post=3747"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}