给定均值向量和协方差矩阵的多元正态分布

时间:2012-02-22 15:59:57

标签: c# .net probability gaussian

我承认我在这里很懒,但有人知道一个免费的数学.net库,它给出了平均向量和协方差矩阵的正态分布输出吗?感谢。

2 个答案:

答案 0 :(得分:2)

Math.NET可能适合您。

http://www.mathdotnet.com/

http://numerics.mathdotnet.com/probability-distributions/

  

多变量分布

Dirichlet
Inverse Wishart
Matrix Normal
Multinomial
NormalGamma
Wishart

功能参考:

http://api.mathdotnet.com/Numerics/MathNet.Numerics.Distributions/MatrixNormal.htm

编辑:请注意,您必须从此处下载

http://mathnetnumerics.codeplex.com/releases/view/56448

mathdotnet.com上的其他链接已过期。

答案 1 :(得分:2)

在双变量情况下,您可以将协方差矩阵表示为单个参数 rho 。这是一个直接实现此方法的方法:

[Pure]
public static double GetBivariateGuassian(double muX, double sigmaX, double muY, double sigmaY, double x, double y, double rho = 0)
{
    var sigmaXSquared = Math.Pow(sigmaX, 2);
    var sigmaYSquared = Math.Pow(sigmaY, 2);

    var dX = x - muX;
    var dY = y - muY;

    var exponent = -0.5;
    var normaliser = 2 * Math.PI * sigmaX * sigmaY;
    if (rho != 0)
    {
        normaliser *= Math.Sqrt(1 - Math.Pow(rho, 2));
        exponent /= 1 - Math.Pow(rho, 2);
    }

    var sum = Math.Pow(dX, 2)/sigmaXSquared;
    sum += Math.Pow(dY, 2)/sigmaYSquared;
    sum -= 2*rho*dX*dY/(sigmaX*sigmaY);

    exponent *= sum;

    return Math.Exp(exponent) / normaliser;
}

请参阅维基百科上的Bivariate Normal Distributions以供参考。