{"id":4027,"date":"2017-04-11T10:40:35","date_gmt":"2017-04-11T15:40:35","guid":{"rendered":"http:\/\/blog.espol.edu.ec\/telg1001\/?p=4027"},"modified":"2026-04-14T06:07:04","modified_gmt":"2026-04-14T11:07:04","slug":"lti-ct-respuesta-estadocero-sympy","status":"publish","type":"post","link":"https:\/\/blog.espol.edu.ec\/algoritmos101\/ss-u03\/lti-ct-respuesta-estadocero-sympy\/","title":{"rendered":"3.4.3 LTI CT - Respuesta a estado cero ZSR - convoluci\u00f3n con Sympy-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>ZSR Convoluci\u00f3n :<\/p>\n\n\n\n<p><a href=\"#causalcausal\">h(t) y x(t)causal<\/a><\/p>\n\n\n\n<p><a href=\"#algoritmo\">algoritmo<\/a><\/p>\n\n\n\n<p><a href=\"#htcausal\">h(t) causal<\/a><\/p>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<p>Se desarrolla el integral de convoluci\u00f3n con Sympy con los criterios indicados en el desarrollo anal\u00edtico. Para determinar los l\u00edmites del integral se requiere revisar la <a href=\"https:\/\/blog.espol.edu.ec\/algoritmos101\/ss-u03\/lti-ct-causalidad-ht-integral-convolucion\/\" data-type=\"post\" data-id=\"4579\">Causalidad de h(t)<\/a> descrita con la funci\u00f3n <code>es_causal(ft)<\/code>. Los pasos para los resultados se completan con la funci\u00f3n desarrollada en la secci\u00f3n anterior para <a href=\"https:\/\/blog.espol.edu.ec\/algoritmos101\/ss-u03\/integral-convolucion-xt-ht-causal\/\" data-type=\"post\" data-id=\"4594\">Integral de convoluci\u00f3n<\/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>ZSR Convoluci\u00f3n :<\/p>\n\n\n\n<p><a href=\"#causalcausal\">h(t) y x(t)causal<\/a><\/p>\n\n\n\n<p><a href=\"#algoritmo\">algoritmo<\/a><\/p>\n\n\n\n<p><a href=\"#htcausal\">h(t) causal<\/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=\"causalcausal\">1. Ejemplo: Convoluci\u00f3n con x(t) causal y h(t) causal<\/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\/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><strong><em>Referencia<\/em>:&nbsp;<\/strong> Lathi ejemplo 2.9 p175, Lathi ejemplo 2.6 p166<\/p>\n\n\n\n<p>En la entrada de sistema se aplica:<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> x(t) = 10 e^{-3t} \\mu (t) <\/span>\n\n\n\n<p>El sistema tiene respuesta a impulso:<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> h(t) = \\big( 2e^{-2t} -e^{-t}\\big)\\mu (t) <\/span>\n\n\n\n<p>El ejemplo es la continuaci\u00f3n de lo realizado en <a href=\"https:\/\/blog.espol.edu.ec\/algoritmos101\/ss-u03\/lti-ct-respuesta-entrada-cero\/\" data-type=\"post\" data-id=\"17798\">respuesta a entrada cero<\/a>, que tiene la ecuaci\u00f3n:<\/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<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=\"Integral de convoluci\u00f3n en Respuesta a Estado Cero con Sympy-Python. Se\u00f1ales y Sistemas\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/XBTVGdUe5oc?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>La respuesta del sistema y(t) para un LTIC se determina como:<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> y(t) = x(t) \\circledast h(t) = \\int_{-\\infty}^{+\\infty} x(\\tau)h(t-\\tau) \\delta \\tau <\/span>\n\n\n\n<p>Si la entrada x(t) y el sistema h(t) son causales, la respuesta tambi\u00e9n ser\u00e1 causal. Teniendo como l\u00edmites del integral \u03c4<sub>a<\/sub> = 0 y \u03c4<sub>b<\/sub> = t<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> y(t)=\\begin{cases}\\int_{0^{-}}^{t} x(\\tau)h(t-\\tau) \\delta \\tau , &amp; t\\ge 0\\\\ 0, &amp; t&lt;0 \\end{cases}<\/span>\n\n\n\n<p>El l\u00edmite inferior del integral se usa como 0<sup><strong>-<\/strong><\/sup>, implica aunque se escriba solo 0 se pretende evitar la dificultad cuando x(t) tiene un impulso en el origen.<\/p>\n\n\n\n<p>Para iniciar el algoritmo se definen las variables <code>t<\/code> y <code>tau<\/code>, simplificando la expresi\u00f3n del escal\u00f3n unitario o Heaviside con <code>u<\/code>.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\n# INGRESO\nt = sym.Symbol('t',real=True)\ntau = sym.Symbol('tau',real=True)\nu = sym.Heaviside(t)\n<\/pre><\/div>\n\n\n<p>Se definen las se\u00f1ales de entrada x(t) y respuesta al impulso h(t) usando las expresiones en Sympy. Para seleccionar los l\u00edmites del integral de convoluci\u00f3n se indica si x(t) y h(t) son causales.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\n# entrada x(t), respuesta impulso h(t)\nx = 10*sym.exp(-3*t)*u\nh = (2*sym.exp(-2*t)-sym.exp(-t))*u\n<\/pre><\/div>\n\n\n<p>Se realiza la <a href=\"https:\/\/blog.espol.edu.ec\/algoritmos101\/ss-u03\/lti-ct-causalidad-ht-integral-convolucion\/\" data-type=\"post\" data-id=\"4579\">comprobaci\u00f3n de causalidad<\/a> revisando cada t\u00e9rmino de la funci\u00f3n, que contenga un escal\u00f3n o un impulso, tomando como referencia la forma en que se construye h(t) con el impulso y los modos caracter\u00edsticos.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>xcausal = ss.es_causal(x)\nhcausal = ss.es_causal(h)<\/code><\/pre>\n\n\n\n<p>En el procedimiento se definen los l\u00edmites del integral de convoluci\u00f3n, la expresi\u00f3n dentro del integral xh(t) y con el resultado se aplica la instrucci\u00f3n <code>expand()<\/code> para obtener t\u00e9rminos suma mas sencillos.<\/p>\n\n\n\n<p>En el caso que la respuesta al impulso h(t) no sea causal y la entrada x(t) es causal, se intercambian las funciones para mantener la simplicidad del integral con l\u00edmite superior t en lugar de infinito. Se aplica la <a href=\"https:\/\/blog.espol.edu.ec\/algoritmos101\/ss-u03\/convolucion-tabla-de-propiedades\/\" data-type=\"post\" data-id=\"2043\">propiedad conmutativa de la convoluci\u00f3n<\/a>.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\n    # intercambia si h(t) no es_causal\n    # con x(t) es_causal por propiedad conmutativa\n    intercambia = False\n    if hcausal==False and xcausal==True:\n        temporal = h\n        h = x\n        x = temporal\n        xcausal = False\n        hcausal = True\n        intercambia = True\n\n    # limites de integral de convoluci\u00f3n\n    tau_a = -sym.oo ; tau_b = sym.oo\n    if hcausal==True:\n        tau_b = t\n    if (xcausal and hcausal)==True:\n        tau_a = 0\n<\/pre><\/div>\n\n\n<p>Se a\u00f1aden las instrucciones al algoritmo del ejercicio para la convoluci\u00f3n de la secci\u00f3n anterior y convierte a una funci\u00f3n <code>respuesta_ZSR(x,h)<\/code> .<\/p>\n\n\n\n<p>Con los resultados del algoritmo, queda a\u00f1adir las instrucciones para mostrar las ecuaciones y las gr\u00e1ficas como los siguientes:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Resultados con Python<\/h3>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code>xh :\n      -t  -2\u22c5\u03c4                     -2\u22c5t  -\u03c4              \n- 10\u22c5\u212f  \u22c5\u212f    \u22c5\u03b8(\u03c4)\u22c5\u03b8(t - \u03c4) + 20\u22c5\u212f    \u22c5\u212f  \u22c5\u03b8(\u03c4)\u22c5\u03b8(t - \u03c4)\nxcausal : True\nhcausal : True\n&#091;tau_a,tau_b] : &#091;0, t]\nintercambia : False\ncond_graf : True\nZSR :\n\u239b     -t       -2\u22c5t       -3\u22c5t\u239e     \n\u239d- 5\u22c5\u212f   + 20\u22c5\u212f     - 15\u22c5\u212f    \u23a0\u22c5\u03b8(t)<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"535\" height=\"440\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2017\/04\/respuestaEstadoCero01Sympy.png\" alt=\"respuesta Estado Cero01 Sympy\" class=\"wp-image-19629\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Gr\u00e1fica animada de la convoluci\u00f3n<\/h3>\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\/04\/LTIC_ZSR_Ej01_animado.gif\" alt=\"LTIC ZSR Ej01 gr\u00e1fico animado\" class=\"wp-image-19631\" \/><\/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>ZSR Convoluci\u00f3n :<\/p>\n\n\n\n<p><a href=\"#causalcausal\">h(t) y x(t)causal<\/a><\/p>\n\n\n\n<p><a href=\"#algoritmo\">algoritmo<\/a><\/p>\n\n\n\n<p><a href=\"#htcausal\">h(t) causal<\/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\">2. Algoritmo en Python<\/h2>\n\n\n<div class=\"wp-block-syntaxhighlighter-code alignwide\"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\n# Respuesta estado cero ZSR con x(t) y h(t)\n# Integral de convolucion con Sympy\n# https:\/\/blog.espol.edu.ec\/algoritmos101\/senales\/ss-unidades\/#unidad3\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)\ntau = sym.Symbol('tau',real=True)\nu = sym.Heaviside(t)\nd = sym.DiracDelta(t)\n\n# entrada x(t), respuesta impulso h(t)\nx = 10*sym.exp(-3*t)*u\nh = (2*sym.exp(-2*t)-sym.exp(-t))*u\n\n# grafica intervalo &#x5B;t_a,t_b] plano sim\u00e9trico\nt_b = 5 ; t_a = -t_b\nmuestras = 101\n\n# PROCEDIMIENTO\ndef respuesta_ZSR(x,h):\n    '''Respuesta a estado cero x(t) y h(t)\n    '''\n    # revisa causalidad de se\u00f1ales\n    xcausal = ss.es_causal(x)\n    hcausal = ss.es_causal(h)\n\n    # intercambia si h(t) no es_causal\n    # con x(t) es_causal por propiedad conmutativa\n    intercambia = False\n    if hcausal==False and xcausal==True:\n        temporal = h\n        h = x\n        x = temporal\n        xcausal = False\n        hcausal = True\n        intercambia = True\n\n    # limites de integral de convoluci\u00f3n\n    tau_a = -sym.oo ; tau_b = sym.oo\n    if hcausal==True:\n        tau_b = t\n    if (xcausal and hcausal)==True:\n        tau_a = 0\n\n    # integral de convoluci\u00f3n x(t)*h(t)\n    xh = x.subs(t,tau)*h.subs(t,t-tau)\n    xh = sym.expand(xh,t)\n    ZSR = sym.integrate(xh,(tau,tau_a,tau_b))\n    ZSR = sym.expand(ZSR,t)\n    if not(ZSR.has(sym.Integral)):\n        ZSR = ss.simplifica_escalon(ZSR)\n\n    lista_escalon = ZSR.atoms(sym.Heaviside)\n    ZSR = sym.expand(ZSR,t) # terminos suma\n    ZSR = sym.collect(ZSR,lista_escalon)\n\n    if intercambia == True:\n        xcausal = True\n        hcausal = False\n\n    # graficar si no tiene Integral o error\n    cond_graf = ZSR.has(sym.Integral)\n    cond_graf = cond_graf or ZSR.has(sym.oo)\n    cond_graf = cond_graf or ZSR.has(sym.nan)\n    cond_graf = not(cond_graf)\n    \n    sol_ZSR = {'xh'      : xh,\n               'xcausal' : xcausal,\n               'hcausal' : hcausal,\n               '&#x5B;tau_a,tau_b]': &#x5B;tau_a,tau_b],\n               'intercambia'  : intercambia,\n               'cond_graf'    : cond_graf,\n               'ZSR' : ZSR,}\n    return(sol_ZSR)\n\nsol_ZSR = respuesta_ZSR(x,h)\nZSR = sol_ZSR&#x5B;'ZSR']\n\n# SALIDA\nss.print_resultado_dict(sol_ZSR)\nif sol_ZSR&#x5B;'hcausal']==False:\n    print('revisar causalidad de h(t)')\nif sol_ZSR&#x5B;'xcausal']==False:\n    print('revisar causalidad de x(t)')\nif sol_ZSR&#x5B;'intercambia']:\n    print('considere intercambiar h(t)con x(t)')\nif not(sol_ZSR&#x5B;'cond_graf']):\n    print('revisar acortar x(t) o h(t) para BIBO')\n\n# GRAFICA\nif sol_ZSR&#x5B;'cond_graf']:\n    fig_xh_y = ss.graficar_xh_y(x,h,ZSR,t_a,t_b,\n                            muestras,y_nombre='ZSR')\n#plt.show()\n\n# grafica animada de convoluci\u00f3n\nn_archivo = '' # sin crear archivo gif animado \n# n_archivo = 'LTIC_ZSR_Ej01' # requiere 'Pillow'\nif sol_ZSR&#x5B;'cond_graf']:\n    figura_animada = ss.graf_animada_xh_y(x,h,ZSR,t_a,t_b,\n                      muestras, reprod_x = 4,y_nombre='ZSR',\n                      archivo_nombre = n_archivo)\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>ZSR Convoluci\u00f3n :<\/p>\n\n\n\n<p><a href=\"#causalcausal\">h(t) y x(t)causal<\/a><\/p>\n\n\n\n<p><a href=\"#algoritmo\">algoritmo<\/a><\/p>\n\n\n\n<p><a href=\"#htcausal\">h(t) causal<\/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=\"htcausal\">3. Ejemplo: Respuesta entrada cero ZSR entre exponencial y escal\u00f3n unitario<\/h2>\n\n\n\n<p><em><strong>Referencia<\/strong><\/em>: Oppenheim Ej 2.6 p98<\/p>\n\n\n\n<p>Sea la y(t) la respuesta a entrada cero entre las siguientes se\u00f1ales:<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> x(t) = e^{-2t} \\mu (t) <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> h(t) = \\mu (t) <\/span>\n\n\n\n<p>Para interpretar el integral de convoluci\u00f3n en el ejercicio a desarrollar se adjunta la animaci\u00f3n siguiente:<\/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\/04\/LTIC_ZSR_Ej02_animado.gif\" alt=\"LTIC ZSR Ej02 gr\u00e1fico animado\" class=\"wp-image-19635\" \/><\/figure>\n\n\n\n<p>Las funciones para el algoritmo se describen como:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><span style=\"color: #ff0000\"># entrada x(t), respuesta impulso h(t)<\/span>\nx = sym.exp(-2*t)*u\nh = u<\/code><\/pre>\n\n\n\n<p>Teniendo como resultado:<\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code>xh :\n -2*tau                                  \ne      *\u03b8(tau)*\u03b8(t - tau)\nxcausal : True\nhcausal : True\n&#091;tau_a,tau_b] : &#091;0, t]\nintercambia : False\ncond_graf : True\nZSR :\n\/     -2*t\\             \n|1   e    |             \n|- - -----|*\u03b8(t)\n\\2     2  \/                \n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Gr\u00e1fica de algoritmo<\/h3>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"542\" height=\"446\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2017\/04\/LTIC_ZSR_Ej02Sympy.png\" alt=\"LTIC ZSR Ej02 Sympy\" class=\"wp-image-19634\" \/><\/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>ZSR Convoluci\u00f3n :<\/p>\n\n\n\n<p><a href=\"#causalcausal\">h(t) y x(t)causal<\/a><\/p>\n\n\n\n<p><a href=\"#algoritmo\">algoritmo<\/a><\/p>\n\n\n\n<p><a href=\"#htcausal\">h(t) causal<\/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=\"ejercicios\">3. Ejemplo: Ejercicio con Filtros<\/h2>\n\n\n\n<p><em><strong>Tarea<\/strong><\/em>:&nbsp; Lathi 2.6-4 filtros p207<\/p>\n\n\n\n<p>Para pruebas de algoritmo<\/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>ZSR Convoluci\u00f3n :<\/p>\n\n\n\n<p><a href=\"#causalcausal\">h(t) y x(t)causal<\/a><\/p>\n\n\n\n<p><a href=\"#algoritmo\">algoritmo<\/a><\/p>\n\n\n\n<p><a href=\"#htcausal\">h(t) causal<\/a><\/p>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n","protected":false},"excerpt":{"rendered":"<p>ZSR Convoluci\u00f3n : h(t) y x(t)causal algoritmo h(t) causal Se desarrolla el integral de convoluci\u00f3n con Sympy con los criterios indicados en el desarrollo anal\u00edtico. Para determinar los l\u00edmites del integral se requiere revisar la Causalidad de h(t) descrita con la funci\u00f3n es_causal(ft). Los pasos para los resultados se completan con la funci\u00f3n desarrollada en [&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-4027","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\/4027","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=4027"}],"version-history":[{"count":8,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/4027\/revisions"}],"predecessor-version":[{"id":24000,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/4027\/revisions\/24000"}],"wp:attachment":[{"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/media?parent=4027"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/categories?post=4027"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/tags?post=4027"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}