Boost logo

Boost Users :

Subject: Re: [Boost-users] Declare statistical distribution array:boost/math/distributions
From: Marco Guazzone (marco.guazzone_at_[hidden])
Date: 2009-05-21 06:53:25


On Thu, May 21, 2009 at 12:01 PM, John Maddock <john_at_[hidden]> wrote:
>> I am trying to write a MCMC algorithm by using boost's math distribution
>> library, what I want to do is to first declare an array of length 10 of
>> gamma distribution, and then run a for loop to declare each gamma
>> distribution's parameters. However, boost does not allow me to declare the
>> gamma distribution array without having defining the parameter in advance:
>>
>> gamma_distribution<double> mydist10[10];
>>
>> error: no appropriate default constructor available.
>>
>> because the library requires to know the parameter of the gamma
>> distribution
>> in advance.
>>
>> Do you guys have any idea to overcome this ?
>>
>> Thanks a lot for any comment or suggestion.
>
> There is an ugly workaround:
>
> boost::math::gamma_distribution<> a[2] = {
> boost::math::gamma_distribution<>(0), boost::math::gamma_distribution<>(0),
> };
>
> and then assignment works via:
>
> a[0] = boost::math::gamma_distribution<>(par1, par2);
>

Yes but I think there 2 disadvantages:
1. If you declare an array of N elements you have to explicity create
N Gamma(0,1) distirbutions:
gamma_distribution a[N] = {
  gamma_distribution(0), /* #1 *./
  ...
  gamma_distribution(0) /* #N *./
};

2. The program "wastes time" to create N Gamma(0,1) elements that are
eventually replaced (by copy-assignement) by other Gamma distribution
objects.

I prefer the pointer solution, but this is only my modest opinion :)

-- Marco

> etc.
>
> HTH, John.
> _______________________________________________
> Boost-users mailing list
> Boost-users_at_[hidden]
> http://lists.boost.org/mailman/listinfo.cgi/boost-users
>


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net