LaplaceTransform.frink

Download or view LaplaceTransform.frink in plain text format


/** Symbolic Laplace transforms.

    See:
    https://byjus.com/maths/laplace-transform/

    https://tutorial.math.lamar.edu/Classes/DE/Laplace_Table.aspx

    https://en.wikipedia.org/wiki/Laplace_transform
*/

transformations Laplace
{
   // While this whole library allows you to use different variables than "t"
   // and "s", those are very commonly used.  This rule is a magical helper
   // that turns any single rule LaplaceTransform[_a] where _a contains "t" and
   // is free of "s" into the expanded more versatile LaplaceTransform[x, t, s]
   // that all of these transformation rules expect.
   LaplaceTransform[_a] :: expressionContains[_a, t] and freeOf[_a, s] <-> LaplaceTransform[_a, t, s]
   
   // Transform of an expression independent of t
   LaplaceTransform[_a, _t, _s] :: freeOf[_a,_t] and freeOf[_a,_s]  <-> _a / _s
   InverseLaplaceTransform[_a/_s, _s, _t] :: freeOf[_a,_t] and freeOf[_a,_s]<->_a

   // Linearity properties
   LaplaceTransform[_a _b, _t, _s] :: freeOf[_a, _t] and freeOf[_a, _s] <-> _a LaplaceTransform[_b, _t, _s]
   LaplaceTransform[_a + _b, _t, _s] <-> LaplaceTransform[_a, _t, _s] + LaplaceTransform[_b, _t, _s]

   // Derivative of function
   LaplaceTransform[D[_f[_t], _t], _t, _s] <-> _s * LaplaceTransform[_f[_t], _t, _s] - _f[0]
   // TODO: How to apply the following to an arbitrary expression, especially
   // the _f[0] part?
   //  LaplaceTransform[D[_a, _t], _t, _s] :: expressionContains[_a, _t] <-> _s * LaplaceTransform[_a, _t, _s] - _f[0]
   
   // Integral of function
   // Note that the usual convention in Laplace transform literature is that the
   // integration is performed from t=0!
   LaplaceTransform[Integrate[_f[_t], _t], _t, _s] <-> (LaplaceTransform[_f[_t], _t, _s] - _f[0]) / s
   // TODO:  Integral of ordinary expression and not arbitrary function?
   // TODO: How to apply it to an arbitrary expression, especially
   // the _f[0] part?
   // See implementation of Shift property below

   // Shift property e^(a t) f[t]  <->  F[s-a]
   LaplaceTransform[e^((_a:1) _t) _b, _t, _s] :: freeOf[_a, _t] and expressionContains[_b, _t] <-> LaplaceTransform[_b, _t, _s-_a]
//   LaplaceTransform[e^((_a:1) _t) _f[_t], _t, _s] :: freeOf[_a, _t] <-> LaplaceTransform[_f[_t], _t, _s-_a]
   
   // Trigonometric functions
   // sin[a t + b]
   LaplaceTransform[sin[(_a:1) _t + (_b:0)], _t, _s] :: freeOf[_a, _t] and freeOf[_b, _t] <-> (_s sin[_b] + _a cos[_b]) / (_s^2 + _a^2)
   
   // cos[a t + b]
   LaplaceTransform[cos[(_a:1) _t + (_b:0)], _t, _s] :: freeOf[_a, _t] and freeOf[_b, _t] <-> (_s cos[_b] - _a sin[_b]) / (_s^2 + _a^2)

   // Hyperbolic functions
   // sinh[a t]
   LaplaceTransform[sinh[(_a:1) _t], _t, _s] :: freeOf[_a, _t] <-> _a / (_s^2 - _a^2)

   // cosh[a t]
   LaplaceTransform[cosh[(_a:1) _t], _t, _s] :: freeOf[_a, _t] <-> _s / (_s^2 - _a^2)
   
   // e^(a t)
   LaplaceTransform[e^((_a:1) _t), _t, _s] :: freeOf[_a, _t] <-> 1/(_s - _a)

   // e^(a t) sin[b t]
   LaplaceTransform[e^((_a:1) _t) sin[(_b:1) _t], _t , _s] :: freeOf[_a, _t] <-> _b / ((_s - _a)^2 + _b^2)
   
   // e^(a t) cos[b t]
   LaplaceTransform[e^((_a:1) _t) cos[(_b:1) _t], _t , _s] :: freeOf[_a, _t] <-> (_s - _a) / ((_s - _a)^2 + _b^2)

   // t^n expr    where n is a positive integer
   LaplaceTransform[_t^(_n:1) (_a:1), _t, _s] :: freeOf[_n, _t] and (_n >= 1) and isInteger[_n] <-> (-1)^_n D[LaplaceTransform[_a, _t, _s], _s, _n]
}

//println[transformExpression[noEval[LaplaceTransform[D[g[t], t], t, s]]]]
//println[transformExpression[noEval[LaplaceTransform[Integrate[g[t], t], t, s]]]]


Download or view LaplaceTransform.frink in plain text format


This is a program written in the programming language Frink.
For more information, view the Frink Documentation or see More Sample Frink Programs.

Alan Eliasen was born 20312 days, 12 hours, 43 minutes ago.