{"id":17802,"date":"2017-05-03T09:15:26","date_gmt":"2017-05-03T14:15:26","guid":{"rendered":"http:\/\/blog.espol.edu.ec\/telg1001\/?p=667"},"modified":"2026-04-05T23:16:25","modified_gmt":"2026-04-06T04:16:25","slug":"transformada-laplace-ft-libreria-sympy","status":"publish","type":"post","link":"https:\/\/blog.espol.edu.ec\/algoritmos101\/ss-u04\/transformada-laplace-ft-libreria-sympy\/","title":{"rendered":"4.2.1 Transformada de Laplace f(t) con Sympy"},"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=\"#laplacesympy\">Sympy Laplace<\/a><\/p>\n\n\n\n<p><a href=\"#e-at\">e<sup>(-at)<\/sup><\/a><\/p>\n\n\n\n<p><a href=\"#compuerta\">\u03bc(t)\u2212\u03bc(t\u22122)<\/a><\/p>\n\n\n\n<p><a href=\"#cost\">cos(t)<\/a><\/p>\n\n\n\n<p><a href=\"#impulso\">\u03b4(t)<\/a><\/p>\n\n\n\n<p><a href=\"#algoritmolibsympy\">algoritmo Sympy<\/a><\/p>\n\n\n\n<p><a href=\"#impulsodesplazado\">\u03b4(t-a)<\/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=\"laplacesympy\">1. Transformada de Laplace en Sympy<\/h2>\n\n\n\n<p>Sympy ofrece la instrucci\u00f3n <code>sym.<a href=\"https:\/\/docs.sympy.org\/latest\/modules\/integrals\/integrals.html#sympy.integrals.transforms.laplace_transform\">laplace_transform<\/a>(ft,t,s)<\/code> para expresiones de f(t) con t\u00e9rminos <strong>simples<\/strong>. La instrucci\u00f3n desarrolla el integral unilateral con t entre [0,\u221e], es decir con entradas tipo causal con t&gt;0 o con t\u00e9rminos \u03bc(t) y los desplazados hacia la derecha \u03bc(t-1).<\/p>\n\n\n\n<p>Partiendo de las variable '<strong>t<\/strong>' y '<strong>s<\/strong>' como s\u00edmbolos , se establece la expresi\u00f3n correspondiente en f(t) para determinar F(s). La transformada se obtiene al usar la instrucci\u00f3n:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Fs_L = sym.laplace_transform(ft,t,s)\nFs = Fs_L&#091;0] <span style=\"color: #ff0000\"># solo expresion<\/span><\/code><\/pre>\n\n\n\n<p>El resultado contiene la expresi\u00f3n, el valor de un polo del plano de convergencia y una condici\u00f3n de convergencia auxiliar. Para los objetivos de los ejercicios el enfoque es sobre el primer componente <code>Fs = Fs_L[0].<\/code><\/p>\n\n\n\n<p>Para simplificar el an\u00e1lisis y desarrollo de algoritmos, lo relacionado a polos y ceros se realiza en la secci\u00f3n de <a href=\"https:\/\/blog.espol.edu.ec\/algoritmos101\/ss-u04\/laplace-hs-polos-estabilidad\/\" data-type=\"post\" data-id=\"2050\">estabilidad del sistema con Python<\/a><\/p>\n\n\n\n<p>Los ejercicios son de complejidad progresiva, mostrando la necesidad de partes adicionales en el algoritmo  presentadas como funciones.<\/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=\"#laplacesympy\">Sympy Laplace<\/a><\/p>\n\n\n\n<p><a href=\"#e-at\">e<sup>(-at)<\/sup><\/a><\/p>\n\n\n\n<p><a href=\"#compuerta\">\u03bc(t)\u2212\u03bc(t\u22122)<\/a><\/p>\n\n\n\n<p><a href=\"#cost\">cos(t)<\/a><\/p>\n\n\n\n<p><a href=\"#impulso\">\u03b4(t)<\/a><\/p>\n\n\n\n<p><a href=\"#algoritmolibsympy\">algoritmo Sympy<\/a><\/p>\n\n\n\n<p><a href=\"#impulsodesplazado\">\u03b4(t-a)<\/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=\"e-at\">2. Transformada de Laplace de una exponencial decreciente, un solo termino<\/h2>\n\n\n\n<figure class=\"wp-block-image alignright size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"557\" height=\"443\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2017\/05\/TransformadaLaplace_ft_Ej01.png\" alt=\"Transformada Laplace ft Ej01\" class=\"wp-image-19890\" \/><\/figure>\n\n\n\n<p><em><strong>Referencia<\/strong><\/em>: Lathi ejemplo 4.1. p331, Oppenheim Ejemplo 9.2 p656, Hsu Ejemplo 3.1 p111<\/p>\n\n\n\n<p>Para una se\u00f1al f(t),<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> f(t) = e^{-at} \\mu (t)<\/span>\n\n\n\n<p>se tiene la transformada F(s),<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> F(s) = \\frac{1}{s+a} <\/span>\n\n\n\n<p>Realizar la transformada con la instrucci\u00f3n directa de Sympy:<\/p>\n\n\n\n<p>Siendo <strong>t<\/strong> una variable tipo s\u00edmbolo, <strong>u<\/strong> la funci\u00f3n escal\u00f3n o Heaviside, la funci\u00f3n f(t) para el algoritmo se expresa con las instrucciones:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>u = sym.Heaviside(t)\nft = sym.exp(-a*t)*u<\/code><\/pre>\n\n\n\n<p>el resultado de la operaci\u00f3n ser\u00e1:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code> f(t): \n -a\u22c5t     \n\u212f    \u22c5\u03b8(t)\n\n F(s): \n  1  \n\u2500\u2500\u2500\u2500\u2500\na + s<\/code><\/pre>\n\n\n\n<p>Se puede verificar el resultado en la <a href=\"https:\/\/blog.espol.edu.ec\/algoritmos101\/ss-u04\/transformada-laplace-tabla\/\" data-type=\"post\" data-id=\"1344\">Tabla para Transformada de Laplace<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">1.1 Algoritmo con Python de la Transformada de Laplace<\/h2>\n\n\n\n<p>La librer\u00eda Sympy simplifica el proceso de la transformada de Laplace  usado como en el integral descrito en la secci\u00f3n anterior.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code alignwide\"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\n# Transformadas de Laplace Unilateral con Sympy\n# supone f(t) causal, usa escal\u00f3n u(t)\nimport sympy as sym\n\n# INGRESO\nt = sym.Symbol('t', real=True)\na = sym.Symbol('a', real=True)\ns = sym.Symbol('s')\nu = sym.Heaviside(t)  # escalon unitario\nd = sym.DiracDelta(t) # impulso unitario\n\nft = sym.exp(-a*t)*u\n\n# PROCEDIMIENTO\nft = sym.expand(ft,t) # t\u00e9rminos de suma\nFs_L = sym.laplace_transform(ft,t,s)\nFs = Fs_L&#x5B;0] # solo expresion\nFs = sym.simplify(Fs)\n\n# SALIDA\nprint('\\n f(t): ')\nsym.pprint(ft)\nprint('\\n F(s): ')\nsym.pprint(Fs)\n<\/pre><\/div>\n\n\n<p>El algoritmo es el primer ejemplo con las instrucciones Sympy, que es el punto de partida y gu\u00eda para continuar con otros casos de ejercicios y las instrucciones que se a\u00f1aden para cuando se usan m\u00e1s t\u00e9rminos en f(t) y casos con desplazamiento en tiempo, etc.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Grafica de f(t) en Python<\/h3>\n\n\n\n<p>Las instrucciones para las gr\u00e1ficas se pueden simplificar para f(t), usando la instrucci\u00f3n de la funci\u00f3n ss.graficar_ft() desarrollada en la unidad 3 desde 3.2.1 LTI CT y disponible en telg1001.py.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code alignwide\"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\n# GRAFICA ------------------\nimport numpy as np\nimport matplotlib.pyplot as plt\nimport telg1001 as ss\n\na_k = 2 # valor de 'a' constante\n# Grafica, intervalo tiempo &#x5B;t_a,t_b]\nt_a = -1\nt_b = 10\nmuestras = 101  # resolucion grafica\n\n#grafica de f(t)\nfig_ft = ss.graficar_ft(ft,t_a,t_b,\n                        muestras = muestras,\n                        f_nombre='f')\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=\"#laplacesympy\">Sympy Laplace<\/a><\/p>\n\n\n\n<p><a href=\"#e-at\">e<sup>(-at)<\/sup><\/a><\/p>\n\n\n\n<p><a href=\"#compuerta\">\u03bc(t)\u2212\u03bc(t\u22122)<\/a><\/p>\n\n\n\n<p><a href=\"#cost\">cos(t)<\/a><\/p>\n\n\n\n<p><a href=\"#impulso\">\u03b4(t)<\/a><\/p>\n\n\n\n<p><a href=\"#algoritmolibsympy\">algoritmo Sympy<\/a><\/p>\n\n\n\n<p><a href=\"#impulsodesplazado\">\u03b4(t-a)<\/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=\"compuerta\">3. Transformada de Laplace para suma de t\u00e9rminos f(t) con desplazamiento, o funci\u00f3n \u00abgate\u00bb o compuerta<\/h2>\n\n\n\n<p><em><strong>Referencia<\/strong><\/em>: Lathi pr\u00e1ctica 4.1.a p337<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> x(t) = \\mu (t) - \\mu (t-2)<\/span>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"640\" height=\"480\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2017\/05\/TransformadaLaplace_ft_Ej03.png\" alt=\"Transformada Laplace ft Ej03 gate compuerta\" class=\"wp-image-19894\" \/><\/figure>\n\n\n\n<p>Como el pulso rectangular, compuerta o \"gate\" se puede formar como la suma de se\u00f1ales escal\u00f3n o \"Heaviside\", el bloque de ingreso se expresa como:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>u = sym.Heaviside(t)\nft = u - u.subs(t,t-2)<\/code><\/pre>\n\n\n\n<p>Al aplicar el algoritmo anterior, modificando la expresi\u00f3n ft, la Transformada de Laplace muestra que el t\u00e9rmino desplazamiento tiene un componente exponencial.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code> f(t): \n\u03b8(t) - \u03b8(t - 2)\n\n F(s): \n     -2\u22c5s\n1   \u212f    \n\u2500 - \u2500\u2500\u2500\u2500\u2500\ns     s   \n&gt;&gt;&gt; <\/code><\/pre>\n\n\n\n<p>Para considerar el t\u00e9rmino exponencial en el c\u00e1lculo de polos,\u00a0 se separa el ejercicio en partes con o sin\u00a0 <code>sym.exp(-a*s)<\/code> cuando se realice el <a href=\"https:\/\/blog.espol.edu.ec\/algoritmos101\/ss-u04\/laplace-hs-polos-estabilidad\/\" data-type=\"post\" data-id=\"2050\">an\u00e1lisis de estabilidad del sistema<\/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=\"#laplacesympy\">Sympy Laplace<\/a><\/p>\n\n\n\n<p><a href=\"#e-at\">e<sup>(-at)<\/sup><\/a><\/p>\n\n\n\n<p><a href=\"#compuerta\">\u03bc(t)\u2212\u03bc(t\u22122)<\/a><\/p>\n\n\n\n<p><a href=\"#cost\">cos(t)<\/a><\/p>\n\n\n\n<p><a href=\"#impulso\">\u03b4(t)<\/a><\/p>\n\n\n\n<p><a href=\"#algoritmolibsympy\">algoritmo Sympy<\/a><\/p>\n\n\n\n<p><a href=\"#impulsodesplazado\">\u03b4(t-a)<\/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=\"cost\">4. Transformada de Laplace con cos(t)<\/h2>\n\n\n\n<p><em><strong>Referencia<\/strong><\/em>: Oppenheim Ejemplo 9.4 p658<\/p>\n\n\n\n<p>Encontrar la transformada de Laplace para:<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> x(t) = e^{-2t}\\mu (t) + e^{-t} \\cos (3t) \\mu (t)<\/span>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"567\" height=\"439\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2017\/05\/TransformadaLaplace_ft_Ej05.png\" alt=\"Transformada Laplace ft j05 cos(t)\" class=\"wp-image-19900\" \/><\/figure>\n\n\n\n<p>Para el algoritmo, la expresi\u00f3n se escribe como<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ft = sym.exp(-2*t)*u + sym.exp(-t)*sym.cos(3*t)*u<\/code><\/pre>\n\n\n\n<p>Al usar el algoritmo b\u00e1sico, se obtiene una respuesta que incluye ra\u00edces complejas que se expresa de forma diferente a la del libro, <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code> f(t): \n -t                  -2\u22c5t     \n\u212f  \u22c5cos(3\u22c5t)\u22c5\u03b8(t) + \u212f    \u22c5\u03b8(t)\n\n F(s): \n       1                 1            1  \n\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 + \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 + \u2500\u2500\u2500\u2500\u2500\n 2\u22c5(s + 1 + 3\u22c5\u2148)    2\u22c5(s + 1 - 3\u22c5\u2148)   s + 2<\/code><\/pre>\n\n\n\n<p>Una forma de simplificar la expresi\u00f3n, de tal forma que sea semejante a la respuesta te\u00f3rica del libro es usar <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Fs = sym.simplify(Fs)<\/code><\/pre>\n\n\n\n<p>con lo que se obtiene como resultado:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code> f(t): \n -t                  -2\u22c5t     \n\u212f  \u22c5cos(3\u22c5t)\u22c5\u03b8(t) + \u212f    \u22c5\u03b8(t)\n\n F(s): \n      2              \n   2\u22c5s  + 5\u22c5s + 12   \n\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n 3      2            \ns  + 4\u22c5s  + 14\u22c5s + 20\n&gt;&gt;&gt; <\/code><\/pre>\n\n\n\n<p>Para disponer de expresiones mas simples de F(s) en fracciones parciales, se a\u00f1ade la instrucci\u00f3n<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Fs = sym.apart(Fs) <span style=\"color: #ff0000\"># separa en fracciones parciales<\/span><\/code><\/pre>\n\n\n\n<p>con lo que se obtiene el siguiente resultado para F(s),<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code> F(s): \n    s + 1         1  \n\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 + \u2500\u2500\u2500\u2500\u2500\n 2              s + 2\ns  + 2\u22c5s + 10      \n&gt;&gt;&gt; <\/code><\/pre>\n\n\n\n<p>El primer componente de la suma corresponde a la parte de <code>sym.exp(-t)*sym.cos(3*t)<\/code> y la segunda parte corresponde a <code>sym.exp(-2*t)<\/code><\/p>\n\n\n\n<p>Las instrucciones se a\u00f1aden al algoritmo general en la secci\u00f3n <a href=\"#algoritmolibsympy\">algoritmo Sympy<\/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=\"#laplacesympy\">Sympy Laplace<\/a><\/p>\n\n\n\n<p><a href=\"#e-at\">e<sup>(-at)<\/sup><\/a><\/p>\n\n\n\n<p><a href=\"#compuerta\">\u03bc(t)\u2212\u03bc(t\u22122)<\/a><\/p>\n\n\n\n<p><a href=\"#cost\">cos(t)<\/a><\/p>\n\n\n\n<p><a href=\"#impulso\">\u03b4(t)<\/a><\/p>\n\n\n\n<p><a href=\"#algoritmolibsympy\">algoritmo Sympy<\/a><\/p>\n\n\n\n<p><a href=\"#impulsodesplazado\">\u03b4(t-a)<\/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=\"impulso\">5. Transformada de Laplace con Impulso unitario \u03b4(t) y suma de exponenciales<\/h2>\n\n\n\n<p><strong>Referencia<\/strong>: Oppenheim ejemplo 9.5 p661<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> x(t) = \\delta(t) -\\frac{4}{3} e^{-t} \\mu (t) + \\frac{1}{3} e^{2t} \\mu (t) <\/span>\n\n\n\n<p>La expresi\u00f3n de f(t) podr\u00eda escribirse directamente como:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>d = sym.DiracDelta(t)\nu = sym.Heaviside(t)\nft = d - (4\/3)*sym.exp(-t)*u + (1\/3)*sym.exp(2*t)*u<\/code><\/pre>\n\n\n\n<p>Al usar la instrucci\u00f3n <code>sym.laplace_transform(ft,t,s)<\/code>&nbsp; convierte las fracciones a n\u00fameros reales o con decimales.<\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code> f(t): \n                2\u22c5t                                 -t     \n0.333333333333\u22c5\u212f   \u22c5\u03b8(t) + \u03b4(t) - 1.33333333333\u22c5\u212f  \u22c5\u03b8(t)\n\n F(s): \n-s + (s - 2)\u22c5(s + 1) + 3.0\n\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n     (s - 2)\u22c5(s + 1) <\/code><\/pre>\n\n\n\n<p>usando fracciones parciales se reescribe como:<\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code>sym.pprint(sym.apart(Fs))\n      1.33333333333333   0.166666666666667\n1.0 - \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 + \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n           s + 1            0.5\u22c5s - 1.0   <\/code><\/pre>\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=\"#laplacesympy\">Sympy Laplace<\/a><\/p>\n\n\n\n<p><a href=\"#e-at\">e<sup>(-at)<\/sup><\/a><\/p>\n\n\n\n<p><a href=\"#compuerta\">\u03bc(t)\u2212\u03bc(t\u22122)<\/a><\/p>\n\n\n\n<p><a href=\"#cost\">cos(t)<\/a><\/p>\n\n\n\n<p><a href=\"#impulso\">\u03b4(t)<\/a><\/p>\n\n\n\n<p><a href=\"#algoritmolibsympy\">algoritmo Sympy<\/a><\/p>\n\n\n\n<p><a href=\"#impulsodesplazado\">\u03b4(t-a)<\/a><\/p>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<p><em><strong>Nota<\/strong><\/em>: Sympy hasta la versi\u00f3n 1.12.1, las operaciones en el dominio 's' para la Transformadas Inversas de Laplace se encuentran implementadas para manejar principalmente n\u00fameros enteros y fracciones. Los resultados de expresiones combinadas con coeficientes enteros y coeficientes reales no necesariamente se simplifican entre si, pues se manejan diferentes dominios 'ZZ' o 'QQ'. (Revisi\u00f3n 2023-Nov)<\/p>\n\n\n\n<p>Para optimizar la simplificaci\u00f3n de expresiones con coeficientes entre enteros y reales, los n\u00fameros reales se convierten a su aproximaci\u00f3n racional con la instrucci\u00f3n <code>sym.Rational(0.333333).limit_denominator(100)<\/code>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>u = sym.Heaviside(t)\nd = sym.DiracDelta(t)\n\n<span style=\"color: #ff0000\"># coeficientes como racional en dominio 'ZZ' enteros<\/span>\nk1 = sym.Rational(1\/3).limit_denominator(100)\nk2 = sym.Rational(4\/3).limit_denominator(100)\n\nft = d - k2*sym.exp(-t)*u + k1*sym.exp(2*t)*u<\/code><\/pre>\n\n\n\n<p>Convirtiendo los coeficientes a racionales, se define ft como:<\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code> f(t): \n 2\u22c5t                  -t     \n\u212f   \u22c5\u03b8(t)          4\u22c5\u212f  \u22c5\u03b8(t)\n\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 + \u03b4(t) - \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n    3                  3     \n\n F(s): \n 2          \ns  - 2\u22c5s + 1\n\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  2         \n s  - s - 2 \n\n&gt;&gt;&gt; sym.pprint(sym.apart(Fs))\n\nF(s):\n        4           1    \n1 - \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 + \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n    3\u22c5(s + 1)   3\u22c5(s - 2)\n&gt;&gt;&gt;<\/code><\/pre>\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=\"#laplacesympy\">Sympy Laplace<\/a><\/p>\n\n\n\n<p><a href=\"#e-at\">e<sup>(-at)<\/sup><\/a><\/p>\n\n\n\n<p><a href=\"#compuerta\">\u03bc(t)\u2212\u03bc(t\u22122)<\/a><\/p>\n\n\n\n<p><a href=\"#cost\">cos(t)<\/a><\/p>\n\n\n\n<p><a href=\"#impulso\">\u03b4(t)<\/a><\/p>\n\n\n\n<p><a href=\"#algoritmolibsympy\">algoritmo Sympy<\/a><\/p>\n\n\n\n<p><a href=\"#impulsodesplazado\">\u03b4(t-a)<\/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=\"impulsodesplazado\">6. f(t) con Impulsos unitarios desplazados<\/h2>\n\n\n\n<p><em><strong>Referencia<\/strong><\/em>:&nbsp; Lathi Ej 4.9c p355<\/p>\n\n\n\n<p>Considera la entrada x(t) como una suma de impulsos desplazados en tiempo y de diferente magnitud.<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> x(t) = \\delta (t) - 3 \\delta (t-2) + 2 \\delta (t-3)<\/span>\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\/05\/TransformadaLaplace_Ej07.png\" alt=\"Transformada Laplace Ej07 suma de impulsos unitarios\" class=\"wp-image-22736\" \/><\/figure>\n\n\n\n<p>para el algoritmo del ejercicio 4, se modifica la l\u00ednea de ingreso a:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ft = d - 3*d.subs(t,t-2) + 2*d.subs(t,t-3)<\/code><\/pre>\n\n\n\n<p>obteniendo como resultado del algoritmo anterior:<\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code> f(t): \n\u03b4(t) + 2\u22c5\u03b4(t - 3) - 3\u22c5\u03b4(t - 2)\n\n F(s): \n       -2\u22c5s      -3\u22c5s\n1 - 3\u22c5\u212f     + 2\u22c5\u212f   \n&gt;&gt;&gt; <\/code><\/pre>\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=\"#laplacesympy\">Sympy Laplace<\/a><\/p>\n\n\n\n<p><a href=\"#e-at\">e<sup>(-at)<\/sup><\/a><\/p>\n\n\n\n<p><a href=\"#compuerta\">\u03bc(t)\u2212\u03bc(t\u22122)<\/a><\/p>\n\n\n\n<p><a href=\"#cost\">cos(t)<\/a><\/p>\n\n\n\n<p><a href=\"#impulso\">\u03b4(t)<\/a><\/p>\n\n\n\n<p><a href=\"#algoritmolibsympy\">algoritmo Sympy<\/a><\/p>\n\n\n\n<p><a href=\"#impulsodesplazado\">\u03b4(t-a)<\/a><\/p>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\">Algoritmo para versiones previas a 1.12.1 de Sympy <\/h2>\n\n\n\n<p>Para los siguientes ejercicios, se describen las ventajas y restricciones al usar las instrucciones de la librer\u00eda Sympy, versi\u00f3n 1.12.1.  En la que se pueden presentar partes en desarrollo con algunos inconveniente como los resuelto en la versi\u00f3n 1.12 22\/11\/2022 <a href=\"https:\/\/github.com\/sympy\/sympy\/issues\/24294\">https:\/\/github.com\/sympy\/sympy\/issues\/24294<\/a><\/p>\n\n\n\n<p>Para revisar la versi\u00f3n de Sympy se dispone de la instrucci\u00f3n:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sym.__version__                        \n'1.12.1'\n&gt;&gt;&gt;<\/code><\/pre>\n\n\n\n<p>Se encuentra que en la versi\u00f3n 1.11.1, la instrucci\u00f3n sym<code>.laplace_transform(ft,t,s)<\/code> no ha procesado la constante cuando f(t) tiene mas de dos t\u00e9rminos suma. El algoritmo presenta una funci\u00f3n separa constante para solucionar ese inconveniente. La versi\u00f3n 1.12.1 ya implementa esa correcci\u00f3n, seg\u00fan lo revisado hasta 2025-Nov, seg\u00fan lo publicado en el enlace:<\/p>\n\n\n\n<p><a href=\"https:\/\/github.com\/sympy\/sympy\/issues\/23360\">https:\/\/github.com\/sympy\/sympy\/issues\/23360<\/a><\/p>\n\n\n\n<p>Para la versi\u00f3n 1.11.1, para obtener resultados e identificado el asunto, se cre\u00f3 una funci\u00f3n <code>separa_constante()<\/code> para un t\u00e9rmino, donde se separa la constante como el t\u00e9rmino multiplicador de las partes (args) que no contienen la variable 't'.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code alignwide\"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\n    def separa_constante(termino):\n        ''' separa constante antes de usar\n            sym.laplace_transform(term_suma,t,s)\n            para incorporarla luego de la transformada\n            inconveniente revisado en version 1.11.1\n        '''\n        constante = 1\n        if termino.is_Mul:\n            factor_mul = sym.Mul.make_args(termino)\n            for factor_k in factor_mul:\n                if not(factor_k.has(t)):\n                    constante = constante*factor_k\n            termino = termino\/constante\n        return(&#x5B;termino,constante])\n<\/pre><\/div>\n\n\n<p>usando el resultado previo del algoritmo, se prueba la funci\u00f3n con el \u00faltimo termino de la suma. Luego de separar la constante, se aplica la transformada de Laplace de Sympy y se incorpora la constante al resultado.<\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code><span style=\"color: #ff00ff\">&gt;&gt;&gt;<\/span> k1 = sym.Rational(1\/3).limit_denominator(100)\n<span style=\"color: #ff00ff\">&gt;&gt;&gt;<\/span> ft = k1*sym.exp(2*t)*u\n<span style=\"color: #ff00ff\">&gt;&gt;&gt;<\/span> sym.laplace_transform(ft,t,s)\n<span style=\"color: #0000ff\">(1\/(s - 2), 2, True)<\/span>\n<span style=\"color: #ff00ff\">&gt;&gt;&gt;<\/span> &#091;termino,constante] = separa_constante(ft)\n<span style=\"color: #ff00ff\">&gt;&gt;&gt;<\/span> termino\n<span style=\"color: #0000ff\">exp(2*t)*Heaviside(t)<\/span>\n<span style=\"color: #ff00ff\">&gt;&gt;&gt;<\/span> constante\n<span style=\"color: #0000ff\">1\/3<\/span>\n<span style=\"color: #ff00ff\">&gt;&gt;&gt;<\/span> sym.laplace_transform(termino,t,s)&#091;0]*constante\n<span style=\"color: #0000ff\">1\/(3*(s - 2))<\/span><\/code><\/pre>\n\n\n\n<p>En el ejemplo se muestra que es necesario separar la constante en al menos dos t\u00e9rminos de suma, por lo que&nbsp; se debe considerar el caso de que f(t) sea de uno o varios t\u00e9rminos suma. Para simplificar el proceso en los pr\u00f3ximos ejercicios se crea la funci\u00f3n <code>laplace_term_suma(ft)<\/code> que se encargar\u00e1 de realizar el proceso t\u00e9rmino a t\u00e9rmino.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code alignwide\"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\n    ft = sym.expand(ft)  # expresion de sumas\n    ft = sym.powsimp(ft) # simplifica exponentes\n\n    term_suma = sym.Add.make_args(ft)\n    Fs = 0\n    for term_k in term_suma:\n        &#x5B;term_k,constante] = separa_constante(term_k)\n        Fsk = sym.laplace_transform(term_k,t,s)\n        Fs  = Fs + Fsk&#x5B;0]*constante\n<\/pre><\/div>\n\n\n<p>Al incorporar las funciones al algoritmo, se puede verificar que se obtienen los resultados obtenidos en la forma anal\u00edtica.<\/p>\n\n\n\n<p>Algoritmo para versiones previas de Sympy 1.12.1<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code alignwide\"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\n# Transformadas de Laplace Unilateral con Sympy\n# Algoritmo para versiones previas de Sympy 1.12.1\n# supone f(t) causal, usa escal\u00f3n u(t)\nimport sympy as sym\n\n# INGRESO\nt = sym.Symbol('t', real=True)\ns = sym.Symbol('s')\nu = sym.Heaviside(t)\nd = sym.DiracDelta(t)\n\n# coeficientes como racional en dominio 'ZZ' enteros\nk1 = sym.Rational(1\/3).limit_denominator(100)\nk2 = sym.Rational(4\/3).limit_denominator(100)\n\nft = d - k2*sym.exp(-t)*u + k1*sym.exp(2*t)*u\n\n#ft = d - 3*d.subs(t,t-2) + 2*d.subs(t,t-3)\n#ft = k2*sym.exp(-2*t)*u - k1*sym.exp(-2*t)*u.subs(t,t-5)\n#ft = k2*sym.exp(-2*t)*u.subs(t,t-5)\n#ft = d.subs(t,t-2)\n#ft = d\n#ft = 3*sym.exp(-2*t)*u + sym.exp(-t)*sym.cos(3*t)*u\n#ft = u\n#ft = u - u.subs(t,t-2)\n#ft = u.subs(t,t-2)\n\n# PROCEDIMIENTO\ndef laplace_transform_suma(ft):\n    '''transformada de Laplace de suma de terminos\n       separa constantes para conservar en resultado\n    '''\n    def separa_constante(termino):\n        ''' separa constante antes de usar\n            sym.laplace_transform(term_suma,t,s)\n            para incorporarla luego de la transformada\n            inconveniente revisado en version 1.11.1\n        '''\n        constante = 1\n        if termino.is_Mul:\n            factor_mul = sym.Mul.make_args(termino)\n            for factor_k in factor_mul:\n                if not(factor_k.has(t)):\n                    constante = constante*factor_k\n            termino = termino\/constante\n        return(&#x5B;termino,constante])\n    \n    # transformadas de Laplace por t\u00e9rminos suma\n    ft = sym.expand(ft)  # expresion de sumas\n    ft = sym.powsimp(ft) # simplifica exponentes\n\n    term_suma = sym.Add.make_args(ft)\n    Fs = 0\n    for term_k in term_suma:\n        &#x5B;term_k,constante] = separa_constante(term_k)\n        Fsk = sym.laplace_transform(term_k,t,s)\n        Fs  = Fs + Fsk&#x5B;0]*constante\n    \n    # separa exponenciales constantes\n    Fs = sym.expand_power_exp(Fs)\n    return(Fs)\n\nFs = laplace_transform_suma(ft)\n\n# SALIDA\nprint('\\n f(t): ')\nsym.pprint(ft)\nprint('\\n F(s): ')\nsym.pprint(Fs)\n<\/pre><\/div>","protected":false},"excerpt":{"rendered":"<p>Sympy Laplace e(-at) \u03bc(t)\u2212\u03bc(t\u22122) cos(t) \u03b4(t) algoritmo Sympy \u03b4(t-a) 1. Transformada de Laplace en Sympy Sympy ofrece la instrucci\u00f3n sym.laplace_transform(ft,t,s) para expresiones de f(t) con t\u00e9rminos simples. La instrucci\u00f3n desarrolla el integral unilateral con t entre [0,\u221e], es decir con entradas tipo causal con t&gt;0 o con t\u00e9rminos \u03bc(t) y los desplazados hacia la derecha [&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":[174],"tags":[],"class_list":["post-17802","post","type-post","status-publish","format-standard","hentry","category-ss-u04"],"_links":{"self":[{"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/17802","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=17802"}],"version-history":[{"count":15,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/17802\/revisions"}],"predecessor-version":[{"id":24010,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/17802\/revisions\/24010"}],"wp:attachment":[{"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/media?parent=17802"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/categories?post=17802"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/tags?post=17802"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}