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, eliasen@mindspring.com