{"id":575,"date":"2017-04-06T09:50:18","date_gmt":"2017-04-06T14:50:18","guid":{"rendered":"http:\/\/blog.espol.edu.ec\/telg1001\/?p=575"},"modified":"2026-04-14T06:06:32","modified_gmt":"2026-04-14T11:06:32","slug":"lti-ct-respuesta-a-impulso-python","status":"publish","type":"post","link":"https:\/\/blog.espol.edu.ec\/algoritmos101\/ss-u03\/lti-ct-respuesta-a-impulso-python\/","title":{"rendered":"3.3.1 LTI CT - Respuesta a impulso unitario h(t) con Sympy-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>h(t): <\/p>\n\n\n\n<p><a href=\"#ejerciciorlc\">Ejercicio RLC<\/a><\/p>\n\n\n\n<p>dy\/dt <a href=\"#derivadasordennm\">Orden N y M<\/a><\/p>\n\n\n\n<p><a href=\"#algoritmo\">algoritmo<\/a><\/p>\n\n\n\n<p>orden:<\/p>\n\n\n\n<p><a href=\"#ecuacionordenigualnm\">N=M<\/a><\/p>\n\n\n\n<p><a href=\"#ecuacionordennmayorm\">N&gt;M<\/a><\/p>\n\n\n\n<p><a href=\"#funcion\">funci\u00f3n<\/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=\"ejerciciorlc\">1. Ejercicio. Respuesta a impulso h(t) de un sistema RLC<\/h2>\n\n\n\n<p>La respuesta al impulso reutiliza el algoritmo de para encontrar la soluci\u00f3n homog\u00e9nea de la ecuaci\u00f3n diferencial lineal. Se reutiliza la funci\u00f3n <code>respuesta_ZIR()<\/code> de la secci\u00f3n anterior.<\/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=\"Respuesta al impulso de un Sistema LTI con Sympy-Python. Se\u00f1ales y Sistemas\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/ZAQmQS9CQhs?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<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\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\/2017\/04\/FIEC05058_RLC_132.png\" alt=\"FIEC05058 circuito RLC 1H 3 Ohm 1\/2 F\" class=\"wp-image-19579\" \/><\/figure>\n\n\n\n<p><em><strong>Referencia<\/strong><\/em>: Lathi 1.8-1 p111. Ejercicio 2.1.a p 155. Oppenheim problema 2.61c p164, Ejemplo 9.24 p700.<\/p>\n\n\n\n<p>Encontrar la <a href=\"https:\/\/blog.espol.edu.ec\/algoritmos101\/ss-unidades\/ss-u03\/lti-ct-respuesta-a-impulso\/\" data-type=\"post\" data-id=\"190\">Respuesta al impulso h(t)<\/a>, del sistema en el<a href=\"https:\/\/blog.espol.edu.ec\/algoritmos101\/ss-unidades\/ss-u03\/sistema-modelo-entrada-salida\/\" data-type=\"post\" data-id=\"522\"> ejemplo 1 Modelo entrada-salida<\/a>,  representado por el circuito y la ecuaci\u00f3n diferencial lineal expresada desde el termino de mayor orden:<\/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>La expresi\u00f3n en operadores D es:<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> (D^2 + 3D +2)y(t) = Dx(t) <\/span>\n\n\n\n<p>Siguiendo el m\u00e9todo simplificado al emparejar impulsos, las condiciones iniciales, dado que el orden de las derivadas de la izquierda es 2, se establece como y'(0)=1, y(0)=0.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>N = 1<\/td><td>y<sub>n<\/sub>(0) = 1<\/td><\/tr><tr><td>N = 2<\/td><td>y<sub>n<\/sub>(0) = 0, y'<sub>n<\/sub>(0) = 1<\/td><\/tr><tr><td>N = 3<\/td><td>y<sub>n<\/sub>(0) = 0, y'<sub>n<\/sub>(0) = 0, y<code>\"<\/code><sub>n<\/sub>(0) = 1<\/td><\/tr><tr><td>N = 4<\/td><td>...<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Siendo N el grado mayor de las derivadas de y(t) o lado izquierdo LHS y M el grado de mayor orden de las derivadas para x(t) o lado derecho RHS.<\/p>\n\n\n\n<p>Si N&gt;M, se tiene que b<sub>0<\/sub>=0. Si N=M el valor de b<sub>0<\/sub> es el coeficiente de la derivada de mayor grado para x(t).<\/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>h(t): <\/p>\n\n\n\n<p><a href=\"#ejerciciorlc\">Ejercicio RLC<\/a><\/p>\n\n\n\n<p>dy\/dt <a href=\"#derivadasordennm\">Orden N y M<\/a><\/p>\n\n\n\n<p><a href=\"#algoritmo\">algoritmo<\/a><\/p>\n\n\n\n<p>orden:<\/p>\n\n\n\n<p><a href=\"#ecuacionordenigualnm\">N=M<\/a><\/p>\n\n\n\n<p><a href=\"#ecuacionordennmayorm\">N&gt;M<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-admin\/post.php?post=575&amp;action=edit#funcion\">funci\u00f3n<\/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=\"derivadasordennm\">2. Desarrollo de algoritmo - derivadas de orden N y M<\/h2>\n\n\n\n<p>Se empieza buscando el orden N, para y(t) de las derivadas de la ecuaci\u00f3n diferencial lineal. Con N se crea un vector ceros para condiciones de inicio y se escribe el valor de 1 a la primera casilla qu representa la posici\u00f3n de mayor orden de derivada .<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: python; first-line: 34; title: ; notranslate\" title=\"\">\n# M\u00e9todo simplificado al emparejar impulsos\nN = sym.ode_order(ecuacion.lhs,y)\nM = sym.ode_order(ecuacion.rhs,x)\n<\/pre><\/div>\n\n\n<p>Se debe buscar el coeficiente b0, que es el del t\u00e9rmino de mayor orden de la derivada para el lado derecho de la ecuaci\u00f3n.<\/p>\n\n\n\n<p>En la ecuaci\u00f3n parte derecha <code>eq_RHS<\/code>, se busca cada t\u00e9rmino hasta encontrar el de orden <strong>M<\/strong>. Se extrae el coeficiente del t\u00e9rmino encontrado, es decir todas las partes que no contienen el t\u00e9rmino de la derivada, ejemplo 3\u03c0.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code alignwide\"><pre class=\"brush: python; first-line: 38; title: ; notranslate\" title=\"\">\n# coeficiente de derivada de x(t) de mayor orden\nb0 = sym.nan\nif N&gt;M:  # orden de derivada diferente\n    b0 = 0\nif N==M: # busca coeficiente de orden mayor\n    eq_RHS = sym.expand(ecuacion.rhs)\n    term_suma = sym.Add.make_args(eq_RHS)\n    for term_k in term_suma:\n        # coeficiente derivada mayor\n        if (M == sym.ode_order(term_k,x)): \n            b0 = 1 # para separar coeficiente\n            factor_mul = sym.Mul.make_args(term_k)\n            for factor_k in factor_mul:\n                if not(factor_k.has(sym.Derivative)):\n                    b0 = b0*factor_k\n<\/pre><\/div>\n\n\n<p>Con el valor de <code>b0<\/code> y las <code>cond_inicio<\/code> se usa el algoritmo <code>respuesta_ZIR()<\/code> realizado para encontrar la <strong><em><a href=\"https:\/\/blog.espol.edu.ec\/algoritmos101\/ss-unidades\/ss-u03\/lti-ct-respuesta-entrada-cero\/\" data-type=\"post\" data-id=\"17798\">respuesta a entrada cero<\/a><\/em><\/strong> a partir de la ecuaci\u00f3n homog\u00e9nea.<\/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) = 0 <\/span>\n\n\n\n<p>Con la ecuaci\u00f3n homog\u00e9nea&nbsp; y con las condiciones iniciales, y'(0)=1, y(0)=0, de una entrada impulso, se obtiene como respuesta:<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> y(t) = C_1 e^{-t} + C_2 e^{-2t} <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> y(t) = 1 e^{-t} -1 e^{-2t} <\/span>\n\n\n\n<p>A partir de la soluci\u00f3n homog\u00e9nea, se crea la funci\u00f3n h(t) aplicando la expresi\u00f3n:<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> h(t)=b_0 \\delta (t)+ [P(D)y_n (t)] \\mu (t)<\/span>\n\n\n\n<p>y dado que para el ejercicio N&gt;M, el orden de las derivadas de la izquierda es mayor que el orden de las derivadas de la derecha, se tiene que b0=0<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> h(t)=0 \\delta (t) + [D y_n (t)] \\mu (t) <\/span>\n\n\n<div class=\"wp-block-syntaxhighlighter-code alignwide\"><pre class=\"brush: python; first-line: 54; title: ; notranslate\" title=\"\">\n# Condiciones iniciales para respuesta a impulso\ncond_inicio    = &#x5B;0]*N # lista de ceros tamano N\ncond_inicio&#x5B;0] = 1     # condicion de mayor orden\n\n# ecuacion homogenea x(t)=0, entrada cero y\n# condiciones de impulso unitario\nsol_ht  = fcnm.respuesta_ZIR(ecuacion,cond_inicio)\n\n# Respuesta a impulso h(t)\nP_y = ecuacion.rhs.subs(x(t),sol_ht&#x5B;'ZIR']).doit()\nh = P_y*u + b0*sym.DiracDelta(t)\n# h = sym.expand(h)\n<\/pre><\/div>\n\n\n<p>con lo que se llega a la respuesta de h(t),<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> h(t)= (-e^{-t} + 2e^{-2t})\\mu (t) <\/span>\n\n\n\n<p>La respuesta del algoritmo en Python es:<\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code>clasifica EDO:\n  factorable\n  nth_linear_constant_coeff_variation_of_parameters\n  nth_linear_constant_coeff_variation_of_parameters_Integral\nhomogenea :\n                        2          \n           d           d           \n2\u22c5y(t) + 3\u22c5\u2500\u2500(y(t)) + \u2500\u2500\u2500(y(t)) = 0\n           dt           2          \n                      dt           \ngeneral :\n           -t       -2\u22c5t\ny(t) = C\u2081\u22c5\u212f   + C\u2082\u22c5\u212f    \neq_condicion :\n0 = C\u2081 + C\u2082\n1 = -C\u2081 - 2\u22c5C\u2082\nconstante : {C1: 1, C2: -1}\nZIR :\n -t    -2\u22c5t\n\u212f   - \u212f    \nh :\n\u239b   -t      -2\u22c5t\u239e     \n\u239d- \u212f   + 2\u22c5\u212f    \u23a0\u22c5\u03b8(t)\n\n&gt;&gt;&gt;<\/code><\/pre>\n\n\n\n<p>y con gr\u00e1fica:<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"558\" height=\"440\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2017\/04\/respuestaimpulso01Sympy.png\" alt=\"respuesta impulso 01 Sympy\" class=\"wp-image-19609\" \/><\/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>h(t): <\/p>\n\n\n\n<p><a href=\"#ejerciciorlc\">Ejercicio RLC<\/a><\/p>\n\n\n\n<p>dy\/dt <a href=\"#derivadasordennm\">Orden N y M<\/a><\/p>\n\n\n\n<p><a href=\"#algoritmo\">algoritmo<\/a><\/p>\n\n\n\n<p>orden:<\/p>\n\n\n\n<p><a href=\"#ecuacionordenigualnm\">N=M<\/a><\/p>\n\n\n\n<p><a href=\"#ecuacionordennmayorm\">N&gt;M<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-admin\/post.php?post=575&amp;action=edit#funcion\">funci\u00f3n<\/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 en Python<\/h2>\n\n\n<div class=\"wp-block-syntaxhighlighter-code alignwide\"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\n# Respuesta a impulso h(t) con Sympy-Python\n# https:\/\/blog.espol.edu.ec\/algoritmos101\/senales\/ss-unidades\/#unidad3\n# M\u00e9todo simplificado al emparejar t\u00e9rminos\n# Lathi 2.1.a pdf 155, (D^2+ 3D + 2)y = Dx\nimport numpy as np\nimport sympy as sym\nimport matplotlib.pyplot as plt\nimport telg1001 as ss\nequivalentes = &#x5B;{'DiracDelta': lambda x: 1*(x==0)},\n                {'Heaviside': lambda x,y: np.heaviside(x, 1)},\n                'numpy',]\n\n# INGRESO\nt = sym.Symbol('t', real=True)\ny = sym.Function('y')\nx = sym.Function('x')\nh = sym.Function('h')\nu = sym.Heaviside(t)\nd = sym.DiracDelta(t)\n\n# ecuacion: lado izquierdo = lado derecho\n#           Left Hand Side = Right Hand Side\nLHS = sym.diff(y(t),t,2) + 3*sym.diff(y(t),t,1) + 2*y(t)\nRHS = sym.diff(x(t),t,1,evaluate=False)\necuacion = sym.Eq(LHS,RHS)\n\n# cond_inicial con M\u00e9todo simplificado\n# de emparejar impulsos\n\n# Grafica: intervalo tiempo &#x5B;t_a,t_b]\nt_a = 0\nt_b = 5 \nmuestras = 51\n\n# PROCEDIMIENTO\n# M\u00e9todo simplificado al emparejar t\u00e9rminos\nN = sym.ode_order(ecuacion,y)\nM = sym.ode_order(ecuacion,x)\n\n# coeficiente de derivada de x(t) de mayor orden\nb0 = sym.nan\nif N&gt;M:  # orden de derivada diferente\n    b0 = 0\nif N==M: # busca coeficiente de orden mayor\n    eq_RHS = sym.expand(ecuacion.rhs)\n    term_suma = sym.Add.make_args(eq_RHS)\n    for term_k in term_suma:\n        # coeficiente derivada mayor\n        if (M == sym.ode_order(term_k,x)): \n            b0 = 1 # para separar coeficiente\n            factor_mul = sym.Mul.make_args(term_k)\n            for factor_k in factor_mul:\n                if not(factor_k.has(sym.Derivative)):\n                    b0 = b0*factor_k\n\n# Condiciones iniciales para respuesta a impulso\ncond_inicio    = &#x5B;0]*N # lista de ceros tamano N\ncond_inicio&#x5B;0] = 1     # condicion de mayor orden\n\n# ecuacion homogenea x(t)=0, entrada cero y\n# condiciones de impulso unitario\nsol_yc = ss.respuesta_ZIR(ecuacion,cond_inicio)\nyc = sol_yc&#x5B;'ZIR']\n\n# Respuesta a impulso h(t)\nP_y = ecuacion.rhs.subs(x(t),yc).doit()\nh = P_y*u + b0*d\nsol_yc&#x5B;'h'] = h\n\nedo_tipo = sym.classify_ode(ecuacion, y(t))\n\n# SALIDA\nprint('clasifica EDO:')\nfor elemento in edo_tipo:\n    print(' ',elemento)\nss.print_resultado_dict(sol_yc)\n\n# GRAFICA ------------------\n# Para graficar la Salida\nfigura_h = ss.graficar_ft(h,t_a,t_b,muestras,'h')\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 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>h(t): <\/p>\n\n\n\n<p><a href=\"#ejerciciorlc\">Ejercicio RLC<\/a><\/p>\n\n\n\n<p>dy\/dt <a href=\"#derivadasordennm\">Orden N y M<\/a><\/p>\n\n\n\n<p><a href=\"#algoritmo\">algoritmo<\/a><\/p>\n\n\n\n<p>orden:<\/p>\n\n\n\n<p><a href=\"#ecuacionordenigualnm\">N=M<\/a><\/p>\n\n\n\n<p><a href=\"#ecuacionordennmayorm\">N&gt;M<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-admin\/post.php?post=575&amp;action=edit#funcion\">funci\u00f3n<\/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=\"ecuacionordenigualnm\">4. Ejercicio. Ecuaci\u00f3n diferencial lineal con Orden N=M<\/h2>\n\n\n\n<p><em><strong>Referencia<\/strong><\/em>: Lathi. Ejercicio 2.4.a p167<\/p>\n\n\n\n<p>Determine la respuesta al impulso de un sistema LTI C descrito por la siguiente ecuaci\u00f3n diferencial ordinaria:<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> (D+2)y(t) = (3D+5) x(t) <\/span>\n\n\n\n<p>El orden N=M=1, por lo que aplican las condiciones iniciales de t0=0, y(0)=1, y'(0)=0 para resolver usando el algoritmo de respuesta a entrada cero para obtener y(t) y aplicar luego la expresi\u00f3n:<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> h(t)=b_0 \\delta (t)+ [P(D)y_n (t)] \\mu (t)<\/span>\n\n\n\n<p>siendo b0=3, que es el coeficiente de la derivada de mayor grado para el lado derecho de la expresi\u00f3n.<\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code>clasifica EDO:\n  1st_linear\n  almost_linear\n  nth_linear_constant_coeff_variation_of_parameters\n  1st_linear_Integral\n  almost_linear_Integral\n  nth_linear_constant_coeff_variation_of_parameters_Integral\nhomogenea :\n         d           \n2\u22c5y(t) + \u2500\u2500(y(t)) = 0\n         dt          \ngeneral :\n           -2\u22c5t\ny(t) = C\u2081\u22c5\u212f    \neq_condicion :\n1 = C\u2081\nconstante : {C1: 1}\nZIR :\n -2\u22c5t\n\u212f    \nN : 1\nM : 1\ncond_inicio : &#091;1]\nb0 : 3\nh :\n          -2\u22c5t     \n3\u22c5\u03b4(t) - \u212f    \u22c5\u03b8(t)\n&gt;&gt;&gt;<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"565\" height=\"437\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2017\/04\/respuestaimpulso02Sympy.png\" alt=\"respuesta impulso 02 Sympy\" class=\"wp-image-19610\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Algoritmo en Python<\/h3>\n\n\n\n<p>El ejercicio se desarrolla creando la funci\u00f3n edo_resp_impulso() para ser incluida en <a href=\"https:\/\/blog.espol.edu.ec\/algoritmos101\/senales\/ss-algoritmos-telg1001-py\/\" data-type=\"page\" data-id=\"17852\">telg1001.py<\/a> y as\u00ed simplificar el algoritmo para el pr\u00f3ximo ejercicio.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code alignwide\"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\n# Respuesta a impulso h(t) con Sympy-Python\n# https:\/\/blog.espol.edu.ec\/algoritmos101\/senales\/ss-unidades\/#unidad3\n# Lathi 2.1.a pdf 155, (D+2)y = (3D+5)x\nimport numpy as np\nimport sympy as sym\nimport matplotlib.pyplot as plt\nimport telg1001 as ss\nequivalentes = &#x5B;{'DiracDelta': lambda x: 1*(x==0)},\n                {'Heaviside': lambda x,y: np.heaviside(x, 1)},\n                'numpy',]\n\n# INGRESO\nt = sym.Symbol('t', real=True)\ny = sym.Function('y')\nx = sym.Function('x')\nh = sym.Function('h')\nu = sym.Heaviside(t)\nd = sym.DiracDelta(t)\n\n# ecuacion: lado izquierdo = lado derecho\n#           Left Hand Side = Right Hand Side\nLHS = sym.diff(y(t),t,1) + 2*y(t)\nRHS = 3*sym.diff(x(t),t,1,evaluate=False)+5*x(t)\necuacion = sym.Eq(LHS,RHS)\n\n# cond_inicial con M\u00e9todo simplificado\n# de emparejar impulsos\n\n# Grafica: intervalo tiempo &#x5B;t_a,t_b]\nt_a = 0\nt_b = 5 \nmuestras = 51\n\n# PROCEDIMIENTO\ndef respuesta_impulso_h(ecuacion,t0=0,\n                        y = sym.Function('y'),\n                        x = sym.Function('x')):\n    ''' respuesta a impulso h(t) de un\n        sistema con Ecuacion Diferencial lineal\n    '''\n    # M\u00e9todo simplificado al emparejar t\u00e9rminos\n    N = sym.ode_order(ecuacion,y)\n    M = sym.ode_order(ecuacion,x)\n\n    # coeficiente de derivada de x(t) de mayor orden\n    b0 = sym.nan\n    if N&gt;M:  # orden de derivada diferente\n        b0 = 0\n    if N==M: # busca coeficiente de orden mayor\n        eq_RHS = sym.expand(ecuacion.rhs)\n        term_suma = sym.Add.make_args(eq_RHS)\n        for term_k in term_suma:\n            # coeficiente derivada mayor\n            if (M == sym.ode_order(term_k,x)): \n                b0 = 1 # para separar coeficiente\n                factor_mul = sym.Mul.make_args(term_k)\n                for factor_k in factor_mul:\n                    if not(factor_k.has(sym.Derivative)):\n                        b0 = b0*factor_k\n    \n    # Condiciones iniciales para respuesta a impulso\n    cond_inicio    = &#x5B;0]*N # lista de ceros tamano N\n    cond_inicio&#x5B;0] = 1     # condicion de mayor orden\n\n    # ecuacion homogenea x(t)=0, entrada cero y\n    # condiciones de impulso unitario\n    sol_yc = ss.respuesta_ZIR(ecuacion,cond_inicio)\n    yc = sol_yc&#x5B;'ZIR']\n\n    # Respuesta a impulso h(t)\n    P_y = ecuacion.rhs.subs(x(t),yc).doit()\n    h = P_y*u + b0*d\n\n    sol_yc&#x5B;'N'] = N\n    sol_yc&#x5B;'M'] = M\n    sol_yc&#x5B;'cond_inicio'] = cond_inicio\n    sol_yc&#x5B;'b0'] = b0\n    sol_yc&#x5B;'h'] = h\n    return(sol_yc)\n\nedo_tipo = sym.classify_ode(ecuacion, y(t))\n# Respuesta a impulso h(t)\nsol_h = respuesta_impulso_h(ecuacion)\nh = sol_h&#x5B;'h']\n\n# SALIDA\nprint('clasifica EDO:')\nfor elemento in edo_tipo:\n    if 'linear' in  elemento.split('_'):\n        print(' ',elemento)\nss.print_resultado_dict(sol_h)\n\n# GRAFICA ------------------\n# Para graficar la Salida\nfigura_h = ss.graficar_ft(h,t_a,t_b,muestras,'h')\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 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>h(t): <\/p>\n\n\n\n<p><a href=\"#ejerciciorlc\">Ejercicio RLC<\/a><\/p>\n\n\n\n<p>dy\/dt <a href=\"#derivadasordennm\">Orden N y M<\/a><\/p>\n\n\n\n<p><a href=\"#algoritmo\">algoritmo<\/a><\/p>\n\n\n\n<p>orden:<\/p>\n\n\n\n<p><a href=\"#ecuacionordenigualnm\">N=M<\/a><\/p>\n\n\n\n<p><a href=\"#ecuacionordennmayorm\">N&gt;M<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-admin\/post.php?post=575&amp;action=edit#funcion\">funci\u00f3n<\/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=\"ecuacionordennmayorm\">5. Ejercicio. Ecuaci\u00f3n diferencial lineal con Orden de N&gt;M<\/h2>\n\n\n\n<p><em><strong>Referencia<\/strong><\/em>: Lathi. Ejercicio 2.4.b p167<\/p>\n\n\n\n<p>Determine la respuesta al impulso de un sistema LTI C descrito por la siguiente ecuaci\u00f3n:<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> D(D+2)y(t) = (D+4) x(t) <\/span>\n\n\n\n<p>El orden N&gt;M, por lo que aplican las condiciones iniciales de t0=0, y(0)=0, y'(0)=1 para resolver usando el algoritmo de respuesta a entrada cero para obtener y(t) y aplicar luego la expresi\u00f3n:<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> h(t)=b_0 \\delta (t)+ [P(D)y_n (t)] \\mu (t)<\/span>\n\n\n\n<p>siendo b0=0, que es el coeficiente de la derivada de mayor grado para el lado derecho de la expresi\u00f3n.<\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code>clasifica EDO:\n  nth_linear_constant_coeff_variation_of_parameters\n  nth_linear_constant_coeff_variation_of_parameters_Integral\nhomogenea :\n               2          \n  d           d           \n2\u22c5\u2500\u2500(y(t)) + \u2500\u2500\u2500(y(t)) = 0\n  dt           2          \n             dt           \ngeneral :\n                -2\u22c5t\ny(t) = C\u2081 + C\u2082\u22c5\u212f    \neq_condicion :\n0 = C\u2081 + C\u2082\n1 = -2\u22c5C\u2082\nconstante : {C1: 1\/2, C2: -1\/2}\nZIR :\n     -2\u22c5t\n1   \u212f    \n\u2500 - \u2500\u2500\u2500\u2500\u2500\n2     2  \nN : 2\nM : 1\ncond_inicio : &#091;1, 0]\nb0 : 0\nh :\n\u239b     -2\u22c5t\u239e     \n\u239d2 - \u212f    \u23a0\u22c5\u03b8(t)\n&gt;&gt;&gt;<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"564\" height=\"440\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2017\/04\/respuestaimpulso03Sympy.png\" alt=\"respuesta impulso 03 Sympy\" class=\"wp-image-19611\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"funcion\">Algoritmo en Python como funci\u00f3n<\/h3>\n\n\n<div class=\"wp-block-syntaxhighlighter-code alignwide\"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\n# Respuesta a impulso h(t) con Sympy-Python\n# https:\/\/blog.espol.edu.ec\/algoritmos101\/senales\/ss-unidades\/#unidad3\n# Lathi. Ejercicio 2.4.b p167 D(D+2)y(t) = (D+4)x(t)\nimport numpy as np\nimport sympy as sym\nimport matplotlib.pyplot as plt\nimport telg1001 as ss\nequivalentes = &#x5B;{'DiracDelta': lambda x: 1*(x==0)},\n                {'Heaviside': lambda x,y: np.heaviside(x, 1)},\n                'numpy',]\n\n\n# INGRESO\nt = sym.Symbol('t', real=True)\ny = sym.Function('y')\nx = sym.Function('x')\nh = sym.Function('h')\nu = sym.Heaviside(t)\nd = sym.DiracDelta(t)\n\n# ecuacion: lado izquierdo = lado derecho\n#           Left Hand Side = Right Hand Side\nLHS = sym.diff(y(t),t,2) + 2*sym.diff(y(t),t,1)\nRHS = sym.diff(x(t),t,1,evaluate=False)+4*x(t)\necuacion = sym.Eq(LHS,RHS)\n\n# cond_inicial con M\u00e9todo simplificado de emparejar impulsos\n\n# Grafica: intervalo tiempo &#x5B;t_a,t_b]\nt_a = 0\nt_b = 5 \nmuestras = 51\n\n# PROCEDIMIENTO\nedo_tipo = sym.classify_ode(ecuacion, y(t))\n# Respuesta a impulso h(t)\nsol_h = ss.respuesta_impulso_h(ecuacion)\nh = sol_h&#x5B;'h']\n\n# SALIDA\nprint('clasifica EDO:')\nfor elemento in edo_tipo:\n    if 'linear' in  elemento.split('_'):\n        print(' ',elemento)\nss.print_resultado_dict(sol_h)\n\n# GRAFICA ------------------\nfigura_h = ss.graficar_ft(h,t_a,t_b,muestras,'h')\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 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>h(t): <\/p>\n\n\n\n<p><a href=\"#ejerciciorlc\">Ejercicio RLC<\/a><\/p>\n\n\n\n<p>dy\/dt <a href=\"#derivadasordennm\">Orden N y M<\/a><\/p>\n\n\n\n<p><a href=\"#algoritmo\">algoritmo<\/a><\/p>\n\n\n\n<p>orden:<\/p>\n\n\n\n<p><a href=\"#ecuacionordenigualnm\">N=M<\/a><\/p>\n\n\n\n<p><a href=\"#ecuacionordennmayorm\">N&gt;M<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-admin\/post.php?post=575&amp;action=edit#funcion\">funci\u00f3n<\/a><\/p>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n","protected":false},"excerpt":{"rendered":"<p>h(t): Ejercicio RLC dy\/dt Orden N y M algoritmo orden: N=M N&gt;M funci\u00f3n 1. Ejercicio. Respuesta a impulso h(t) de un sistema RLC La respuesta al impulso reutiliza el algoritmo de para encontrar la soluci\u00f3n homog\u00e9nea de la ecuaci\u00f3n diferencial lineal. Se reutiliza la funci\u00f3n respuesta_ZIR() de la secci\u00f3n anterior. Referencia: Lathi 1.8-1 p111. Ejercicio [&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-575","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\/575","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=575"}],"version-history":[{"count":11,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/575\/revisions"}],"predecessor-version":[{"id":24217,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/575\/revisions\/24217"}],"wp:attachment":[{"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/media?parent=575"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/categories?post=575"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/tags?post=575"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}