Package de.uka.ipd.sdq.probfunction.math
Interface IProbabilityMassFunction
- All Superinterfaces:
IProbabilityFunction
- All Known Implementing Classes:
ProbabilityMassFunctionImpl
A probability mass function (abbreviated pmf) gives the probability that a discrete random
variable is exactly equal to some value. A probability mass function differs from a probability
density function in that the values of the latter, defined only for continuous random variables,
are not probabilities; rather, its integral over a set of possible values of the random variable
is a probability.
Note that the operations defined here are not suitable to add and multiply random numbers in
general (e.g. in the DependencySolver). They are defined per-value and are required for internal
computations (e.g. Fourier Transformation).
-
Method Summary
Modifier and TypeMethodDescriptionAdds the probabilities of two probability mass functions (pmf) on a 'per value' basis.
h(x) = f(x) + g(x) (f = this, g = parameter pmf)
For the addition, the domains of both pmfs have to be equal.Divides the probabilities of two probability mass functions (pmf) on a 'per value' basis.
h(x) = f(x) / g(x) (f = this, g = parameter pmf)
For the division, the domains of both pmfs have to be equal.Generates a random number of the probability function's domain, whose distribution is defined by the probability function.returns the cumulative probability function associated with this probability function.Computes the Fourier transform of the probability mass function.Computes the inverse Fourier transform of the probability mass function.List of samples describing the pmf.boolean
Check whether the two PMFs have compatible domains.Multiplies the probabilities of two probability mass functions (pmf) on a 'per value' basis.
h(x) = f(x) * g(x) (f = this, g = parameter pmf)
For the multiplication, the domains of both pmfs have to be equal.scale
(double scalar) Scales the probabilities of a probability mass functions (pmf) on a 'per value' basis.
h(x) = a * f(x) (f = this, a = parameter scalar)void
setSamples
(List<ISample> samples) List of samples describing the pmf.shiftDomain
(double scalar) Shifts each value of the PMF by the given scalar (i.e., adds the given scalar to each value).stretchDomain
(double scalar) Stretches the domain of the PMF by the given scalar (i.e, multiplies each value with the given scalar).Substracts the probabilities of two probability mass functions (pmf) on a 'per value' basis.
h(x) = f(x) - g(x) (f = this, g = parameter pmf)
For the substraction, the domains of both pmfs have to be equal.Methods inherited from interface de.uka.ipd.sdq.probfunction.math.IProbabilityFunction
checkConstrains, getArithmeticMeanValue, getMedian, getPercentile, getProbabilitySum, getUnit, hasOrderedDomain, isInFrequencyDomain, isInTimeDomain
-
Method Details
-
drawSample
Object drawSample()Generates a random number of the probability function's domain, whose distribution is defined by the probability function.- Returns:
- A sample of the PMF's domain.
-
add
Adds the probabilities of two probability mass functions (pmf) on a 'per value' basis.
h(x) = f(x) + g(x) (f = this, g = parameter pmf)
For the addition, the domains of both pmfs have to be equal. This means that- * the value objects of the pmf's samples have to be of the same class and
- * for each value object of the samples in function f (this) there is exactly one equal value object in the samples of function g (pmf) and vice versa. Here, equal means that Object.equal(...) returns true for both objects.
If the domain of both functions are not equal, a DifferentDomainsException is thrown.- Parameters:
pmf
- Function to add.- Returns:
- A new pmf that contains the sum of both.
- Throws:
DifferentDomainsException
- if the domains of both function differ.
-
sub
Substracts the probabilities of two probability mass functions (pmf) on a 'per value' basis.
h(x) = f(x) - g(x) (f = this, g = parameter pmf)
For the substraction, the domains of both pmfs have to be equal. This means that- * the value objects of the pmf's samples have to be of the same class and
- * for each value object of the samples in function f (this) there is exactly one equal value object in the samples of function g (pmf) and vice versa. Here, equal means that Object.equal(...) returns true for both objects.
If the domain of both functions are not equal, a DifferentDomainsException is thrown.- Parameters:
pmf
- Function to substract.- Returns:
- A new pmf that contains the difference of both.
- Throws:
DifferentDomainsException
- if the domains of both function differ.
-
mult
Multiplies the probabilities of two probability mass functions (pmf) on a 'per value' basis.
h(x) = f(x) * g(x) (f = this, g = parameter pmf)
For the multiplication, the domains of both pmfs have to be equal. This means that- * the value objects of the pmf's samples have to be of the same class and
- * for each value object of the samples in function f (this) there is exactly one equal value object in the samples of function g (pmf) and vice versa. Here, equal means that Object.equal(...) returns true for both objects.
If the domain of both functions are not equal, a DifferentDomainsException is thrown.- Parameters:
pmf
- Function to multiply with.- Returns:
- A new pmf that contains the product of both.
- Throws:
DifferentDomainsException
- if the domains of both function differ.
-
div
Divides the probabilities of two probability mass functions (pmf) on a 'per value' basis.
h(x) = f(x) / g(x) (f = this, g = parameter pmf)
For the division, the domains of both pmfs have to be equal. This means that- * the value objects of the pmf's samples have to be of the same class and
- * for each value object of the samples in function f (this) there is exactly one equal value object in the samples of function g (pmf) and vice versa. Here, equal means that Object.equal(...) returns true for both objects.
If the domain of both functions are not equal, a DifferentDomainsException is thrown.- Parameters:
pmf
- Function to divide by.- Returns:
- A new pmf that contains the fraction of both.
- Throws:
DifferentDomainsException
- if the domains of both function differ.
-
scale
Scales the probabilities of a probability mass functions (pmf) on a 'per value' basis.
h(x) = a * f(x) (f = this, a = parameter scalar)- Parameters:
scalar
- the value to scale the probabilities.- Returns:
- A new pmf that contains the scaled probabilities.
-
shiftDomain
Shifts each value of the PMF by the given scalar (i.e., adds the given scalar to each value). If the scalar is larger than zero, the PMF gets shifted to the right, otherwise it gets shifted to the left.- Parameters:
scalar
-- Returns:
- Throws:
DomainNotNumbersException
-
stretchDomain
Stretches the domain of the PMF by the given scalar (i.e, multiplies each value with the given scalar). If the scalar is larger than 1, the PMF gets stretched. If the scalar is between zero and 1, the PMF gets compressed.- Parameters:
scalar
-- Returns:
- Throws:
DomainNotNumbersException
-
getFourierTramsform
Computes the Fourier transform of the probability mass function. Note, that you should only use this function if you really know what you are doing, as this doesn't make sense in many cases for pmfs!
Can only be applied if 'isInTimeDomain()' is true, otherwise a FunctionNotInTimeDomainException is thrown.- Returns:
- Fourier transform of pmf (in time domain).
- Throws:
FunctionNotInTimeDomainException
-
getInverseFourierTransform
Computes the inverse Fourier transform of the probability mass function. Note, that you should only use this function if you really know what you are doing, as this doesn't make sense in many cases for pmfs!
Can only be applied if 'isInFrequencyDomain()' is true, otherwise a FunctionNotInFrequencyDomainException is thrown.- Returns:
- Fourier transform of pmf (in time domain).
- Throws:
FunctionNotInFrequencyDomainException
-
getSamples
List of samples describing the pmf. They associate a value (x axis) with a probability (y axis). In case 'hasOrderedDomain' is true, they are sorted. Note: The function returns only a copy of the sample list.- Returns:
- A Copy of the list of (ordered) samples describing the pmf.
-
setSamples
List of samples describing the pmf. They associate a value (x axis) with a probability (y axis). In case the values can be ordered, they will be sorted. Note: The sum of all probabilities has to be one!- Parameters:
samples
- New list of samples describing the pmf.- Throws:
ProbabilitySumNotOneException
- Thrown if the sum of the samples probabilities is not one.
-
haveSameDomain
Check whether the two PMFs have compatible domains. Integers are casted to doubles if one of the PMFs is a DoublePMF. TODO: check whether this behaviour is fine for the rest of the tools, because other classes may expect exactly the same type.- Parameters:
pmf
-- Returns:
-
getCumulativeFunction
IProbabilityMassFunction getCumulativeFunction()returns the cumulative probability function associated with this probability function.- Returns:
- the computed cumulative probability function.
-