示例#1
0
        public void RandNormalP()
        {
            double[] m_init = { 1, 2, 3 };
            Vector   mt     = Vector.FromArray(m_init);

            double[,] v_init = { { 2, 1, 1 }, { 1, 2, 1 }, { 1, 1, 2 } };
            PositiveDefiniteMatrix vt = new PositiveDefiniteMatrix(v_init);
            PositiveDefiniteMatrix pt = ((PositiveDefiniteMatrix)vt.Clone()).SetToInverse(vt);

            int    d = mt.Count;
            Vector x = Vector.Zero(d);
            VectorMeanVarianceAccumulator mva = new VectorMeanVarianceAccumulator(d);

            for (int i = 0; i < nsamples; i++)
            {
                Rand.NormalP(mt, pt, x);
                mva.Add(x);
            }
            Vector m = mva.Mean;
            PositiveDefiniteMatrix v = mva.Variance;

            Console.WriteLine("");
            Console.WriteLine("Multivariate NormalP");
            Console.WriteLine("--------------------");

            Console.WriteLine("m = {0}", m);
            double dError = m.MaxDiff(mt);

            if (dError > TOLERANCE)
            {
                Assert.True(false, String.Format("m: error = {0}", dError));
            }

            Console.WriteLine("v = \n{0}", v);
            dError = v.MaxDiff(vt);
            if (dError > TOLERANCE)
            {
                Assert.True(false, String.Format("v: error = {0}", dError));
            }
        }