convpow
determines the distribution of the sum of N univariate
i.i.d r.v's by means of DFTconvpow(D1,...) "convpow"(D1,N) "convpow"(D1,N, ep = getdistrOption("TruncQuantile")) "convpow"(D1,N) "convpow"(D1,N, ep = getdistrOption("TruncQuantile"))
"AbscontDistribution"
or
"LatticeDistribution"
or of "UnivarLebDecDistribution"
"LatticeDistribution"
: support points will be
cancelled if their probability is less than ep
;
for "UnivarLebDecDistribution"
: if (acWeight(object)
we work with the discrete parts only, and, similarly, if
(discreteWeight(object) we with the absolutely continuous
parts only.
"AbscontDistribution"
, "DiscreteDistribution"
,
"LatticeDistribution"
resp. "AcDcLcDistribution"
signature(D1="Norm")
"Norm"
signature(D1="Nbinom")
"Nbinom"
signature(D1="Binom")
"Binom"
signature(D1="Cauchy")
"Cauchy"
signature(D1="ExpOrGammaOrChisq")
"Gammad"
---if D1
may be coerced to Gammad
signature(D1="Pois")
"Pois"
signature(D1="Dirac")
"Dirac"
N
is obligatory;
the general methods use a general purpose convolution algorithm for
distributions by means of D/FFT. In case of an argument of class
"UnivarLebDecDistribution"
, the result will in generally be
again of class "UnivarLebDecDistribution"
. However, if acWeight(D1)
is positive, discreteWeight(convpow(D1,N))
will decay exponentially
in N
, hence from some (small) $N_0$ on, the result will be of
class "AbscontDistribution"
. This is used algorithmically, too, as
then only the a.c. part needs to be convolved.
In case of an argument D1
of class "DiscreteDistribution"
,
for N
equal to 0,1 we return the obvious solutions, and for N==2
the return value is D1+D1
. For N>2
, we split up N
into
N=N1+N2
, N1=floor(N/2)
and recursively return
convpow(D1,N1)+convpow(D1,N2)
.
operators
, distrARITH()
convpow(Exp()+Pois(),4)
Run the code above in your browser using DataCamp Workspace