dirac -- the Dirac delta
distribution
Introductiondirac(x) represents the Dirac delta
distribution.
dirac(x, n) represents the n-th
derivative of the delta distribution.
Call(s)dirac(x)
dirac(x, n)
Parametersx |
- | an arithmetical expression |
n |
- | an arithmetical expression representing a nonnegative integer |
Returnsan arithmetical expression.
x
Side
Effectsdirac reacts to properties of identifiers.
Related
Functions
Detailsdirac(x, 0) and dirac(x) are
equivalent.x represents a non-zero real number,
then 0 is returned. If x is a non-real number
of domain type DOM_COMPLEX, then undefined is returned. For all
other arguments, a symbolic function call is returned.dirac does not have a pre-defined value at the origin.
Use
unprotect(dirac): dirac(0) := myValue:
and
dirac(float(0)) := myFloatValue: protect(dirac):
to assign a value (e.g., infinity).
dirac(a*x - b, n) = sign(a)/a^(n+1)*dirac(x - b/a, n)is implemented for real numerical values
a.int treats dirac as the
usual delta distribution. Cf. example 3.
Example
1dirac returns 0 for arguments
representing non-zero real numbers:
>> dirac(-3), dirac(3/2), dirac(2.1, 1), dirac(3*PI), dirac(sqrt(3), 3)
0, 0, 0, 0, 0
Arguments of domain type DOM_COMPLEX yield undefined:
>> dirac(1 + I), dirac(2/3 + 7*I), dirac(0.1*I, 1)
undefined, undefined, undefined
A symbolic call is returned for other arguments:
>> dirac(0), dirac(x), dirac(ln(-5)), dirac(x + I, 2), dirac(x, n)
dirac(0), dirac(x), dirac(I PI + ln(5)), dirac(x + I, 2),
dirac(x, n)
>> dirac(2*x - 1, n)
dirac(x - 1/2, n)
-----------------
n + 1
2
A natural value for dirac(0) is infinity:
>> unprotect(dirac): dirac(0) := infinity: dirac(0)
infinity
>> delete dirac(0): protect(dirac): dirac(0)
dirac(0)
Example
2dirac reacts to assumptions set by assume:
>> assume(x < 0): dirac(x)
0
>> assume(x, Type::Real): assume(x <> 0, _and): dirac(x)
0
>> unassume(x):
Example
3The symbolic integration function int treats dirac as the
delta distribution:
>> int(f(x)*dirac(x - y^2), x = -infinity..infinity)
2
f(y )
>> int(int(f(x, y)*dirac(x - y^2), x = -infinity..infinity),
y = -1..1)
2
int(f(y , y), y = -1..1)
The indefinite integral of dirac involves
the step function heaviside:
>> int(f(x)*dirac(x), x), int(f(x)*dirac(x, 1), x)
heaviside(x) f(0), dirac(x) f(0) - heaviside(x) D(f)(0)
If the delta peak is on the boundary of the integration
region, then the result involves a symbolic call of heaviside(0):
>> int(f(x)*dirac(x - 3), x = -1..3)
f(3) heaviside(0)
Note that int can handle the distribution only if
the argument of dirac is linear in the integration
variable:
>> int(f(x)*dirac(2*x - 3), x = -10..10), int(f(x)*dirac(x^2), x = -10..10)
f(3/2) 2
------, int(f(x) dirac(x ), x = -10..10)
2
Also note that dirac should not be used for
numerical integration, since the numerical algorithm will typically
fail to detect the delta peak:
>> numeric::int(dirac(x - 3), x = -10..10)
0.0
assume are now taken into account.
The handling of dirac by int was improved.