多元连续分布函数代码实现

public abstract class MultivariateContinuousDistribution
    {
        private int order;

        public int Order => this.order;

        protected MultivariateContinuousDistribution(int order)
        {
            this.order = order;
        }

        public GeneralVector GetRandomVariate(System.Random random)
        {
            if (random == null)
            {
                ThrowException.ArgumentNull("random");
            }
            GeneralVector generalVector;
            generalVector = Vector.Create(this.order);
            this.FillRandomVariate(random, generalVector);
            return generalVector;
        }

        public void FillRandomVariate(System.Random random, Vector sample)
        {
            if (random == null)
            {
                ThrowException.ArgumentNull("random");
            }
            if (sample == null)
            {
                ThrowException.ArgumentNull("sample");
            }
            if (sample.Length != this.order)
            {
                throw new DimensionMismatchException(DimensionType.Length, "sample", DimensionType.Unknown, "Order");
            }
            this.FillRandomVariateCore(random, sample);
        }

        protected abstract void FillRandomVariateCore(System.Random random, Vector sample);

        public void FillRandomVariate(System.Random random, double[] sample)
        {
            if (sample == null)
            {
                ThrowException.ArgumentNull("sample");
            }
            if (random == null)
            {
                ThrowException.ArgumentNull("random");
            }
            this.FillRandomVariate(random, new GeneralVector(sample, reuseComponentArray: true));
        }

        public virtual GeneralMatrix GetRandomVariates(System.Random random, int count)
        {
            if (random == null)
            {
                ThrowException.ArgumentNull("random");
            }
            if (count < 0)
            {
                ThrowException.ArgumentOutOfRange("count");
            }
            GeneralMatrix generalMatrix;
            generalMatrix = Matrix.Create(count, this.order);
            this.FillRandomVariates(random, generalMatrix);
            return generalMatrix;
        }

        public virtual void FillRandomVariates(System.Random random, Matrix samples)
        {
            if (random == null)
            {
                ThrowException.ArgumentNull("random");
            }
            if (samples == null)
            {
                ThrowException.ArgumentNull("samples");
            }
            if (samples.ColumnCount != this.order)
            {
                throw new DimensionMismatchException(DimensionType.Row, "samples", DimensionType.Unknown, "Order");
            }
            foreach (Vector row in samples.Rows)
            {
                this.FillRandomVariateCore(random, row);
            }
        }

        public double ProbabilityDensityFunction(Vector x)
        {
            return Math.Exp(this.LogProbabilityDensityFunction(x));
        }

        public abstract double LogProbabilityDensityFunction(Vector x);

        public abstract Vector GetMeans();

        public abstract SymmetricMatrix GetVarianceCovarianceMatrix();
    }

 如果对您有帮忙,非常感谢您支持一下创造者的付出!

 感谢支持技术分享,请扫码点赞支持:

技术合作交流qq:2401315930

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

合抱阴阳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值