/// <summary>
        /// Samples an inverse Wishart distributed random variable by sampling
        /// a Wishart random variable and inverting the matrix.
        /// </summary>
        /// <param name="rnd">The random number generator to use.</param>
        /// <param name="nu">The degrees of freedom.</param>
        /// <param name="s">The scale matrix.</param>
        /// <returns>a sample from the distribution.</returns>
        public static Matrix<double> Sample(Random rnd, double nu, Matrix<double> s)
        {
            if (Control.CheckDistributionParameters && !IsValidParameterSet(nu, s))
            {
                throw new ArgumentOutOfRangeException(Resources.InvalidDistributionParameters);
            }

            var r = Wishart.Sample(rnd, nu, s.Inverse());
            return r.Inverse();
        }
Esempio n. 2
0
        /// <summary>
        /// Samples an inverse Wishart distributed random variable by sampling
        /// a Wishart random variable and inverting the matrix.
        /// </summary>
        /// <param name="rnd">The random number generator to use.</param>
        /// <param name="degreesOfFreedom">The degree of freedom (ν) for the inverse Wishart distribution.</param>
        /// <param name="scale">The scale matrix (Ψ) for the inverse Wishart distribution.</param>
        /// <returns>a sample from the distribution.</returns>
        public static Matrix <double> Sample(System.Random rnd, double degreesOfFreedom, Matrix <double> scale)
        {
            if (Control.CheckDistributionParameters && !IsValidParameterSet(degreesOfFreedom, scale))
            {
                throw new ArgumentException(Resource.InvalidDistributionParameters);
            }

            var r = Wishart.Sample(rnd, degreesOfFreedom, scale.Inverse());

            return(r.Inverse());
        }
Esempio n. 3
0
 public void CanSample()
 {
     var d = new Wishart(1.0, Matrix<double>.Build.RandomPositiveDefinite(2, 1));
     d.Sample();
 }