c# - 使用 mathdotnet 的 Matlab 等效函数

标签 c# matlab math.net mathnet-numerics

我们如何使用 math.net 库在 C# 中实现以下 matlab 函数。

多元正态随机分布- http://in.mathworks.com/help/stats/mvnrnd.html

r = mvnrnd(MU,SIGMA,cases)

同样低于 math.net 函数不返回任何结果。我已经尝试过其他方法,例如 Selectpermutations/SelectVariations 有/没有重复。但是没有任何方法返回任何结果。

IEnumerable<double> input=new double[] { 1, 2, 3, 4, 5 };
var re = input.SelectCombinationWithRepetition(3);

enter image description here

我错过了什么吗??

最佳答案

据我所知,在 Math.net 中没有现成的函数可以为您提供多元随机正态数。但是,您可以轻松地为此目的编写一个特定的函数,它使用协方差矩阵的 Cholesky 分解。实际上,当 p 变量向量 Z 的每个元素根据标准正态分布 N(0,1) 独立分布时,向量 X = M + L * Z 根据 p 变量正态分布分布,其总体均值向量为 M 和其协方差矩阵为 S(其中 S = L*L')。

因为我是一个vb人,我将在这里展示编写这样一个函数的vb代码:

Public Function MvNRnd(Mu As Vector, Covariance As Matrix, Cases As Double) As Matrix

        Dim standardNormalDistribution As New Normal(0, 1)
        Dim randomValues(Cases - 1) As Vector
        Dim cholesky As Factorization.Cholesky(Of Double) = Covariance.Cholesky


        For i As Integer = 0 To Cases - 1

            'generate independent standard normal random numbers
            randomValues(i) = DenseVector.CreateRandom(Mu.Count, standardNormalDistribution)

            'generate multivariate normal random numbers
            cholesky.Factor.Multiply(randomValues(i), randomValues(i))
            randomValues(i) += Mu

        Next


        Return DenseMatrix.OfRowVectors(randomValues)

    End Function

等效的 C# 代码应如下所示(通过 http://converter.telerik.com 翻译):

public Matrix MvNRnd(Vector Mu, Matrix Covariance, double Cases)
{

    Normal standardNormalDistribution = new Normal(0, 1);
    Vector[] randomValues = new Vector[Cases];
    Factorization.Cholesky<double> cholesky = Covariance.Cholesky;



    for (int i = 0; i <= Cases - 1; i++) {
        //generate independent standard normal random numbers
        randomValues(i) = DenseVector.CreateRandom(Mu.Count, standardNormalDistribution);

        //generate multivariate normal random numbers
        cholesky.Factor.Multiply(randomValues(i), randomValues(i));
        randomValues(i) += Mu;

    }


    return DenseMatrix.OfRowVectors(randomValues);

}

关于c# - 使用 mathdotnet 的 Matlab 等效函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32382184/

相关文章:

c# - unity 名称 ' unzip ' 在当前上下文中不存在

c# - 我可以强制更新绑定(bind)到 ComboBox.SelectedItem 的 Textbox DataContext 吗?

c# - Windows Phone 8.1 slider - 检测用户交互

arrays - 需要在Matlab中重置计数器变量

matlab - MATLAB/Simulink 中的传递函数

c# - numpy array[0, :] *= 1. 23 的 MathNet 等价物是什么

c# - 无效的匿名类型成员声明符 c# linq?

matlab - 在 Matlab 中定义全局常量

c# - 在 mathdotnet 中解析具有双系数值的表达式

c# - 内置函数 diff() 可用于 MathNet 中的矢量?