c#的Matlab表达式(a、b、c)模拟?

c#的Matlab表达式(a、b、c)模拟?,c#,matlab,C#,Matlab,如何从与Matlab中函数exprnd()相同的分布中获得C中的数字?您可以使用一些外部信号处理库,如 在Meta.Numerics.Statistics.Distributions命名空间下,查看指数分布类和相应的GetRandomValue(Random)方法。尝试以下操作: static readonly Random randomNumberGenerator = new Random(); public static double ExpRnd(double mu) { re

如何从与Matlab中函数exprnd()相同的分布中获得C中的数字?

您可以使用一些外部信号处理库,如

Meta.Numerics.Statistics.Distributions
命名空间下,查看
指数分布
类和相应的
GetRandomValue(Random)
方法。

尝试以下操作:

static readonly Random randomNumberGenerator = new Random();

public static double ExpRnd(double mu)
{
    return -Math.Log(randomNumberGenerator.NextDouble()) * mu;
}
如果需要
m
×
n
矩阵,请使用

public static double[,] ExpRnd(double mu, int m, int n)
{
    var arr = new double[m, n];
    for (int i = 0; i < m; ++i)
    {
        for (int j = 0; j < n; ++j)
            arr[i, j] = ExpRnd(mu);
    }
    return arr;
}
publicstaticdouble[,]ExpRnd(双mu,int m,int n)
{
var arr=新的双精度[m,n];
对于(int i=0;i

注意:
System.Random
类不是线程安全的。如果您有多个线程调用上面的
ExpRnd
,您必须更加小心。

这篇博文可能会帮助您:

如果你知道——或者可以算出——你想要的分布的分位数函数,那么你可以将你已经得到的(大致)均匀分布转换成给定的分布


正如我在博客中所描述的,分位数函数是累积分布的倒数,而累积分布是分布下的面积。因为你想要的分布是e-x,所以计算积分和逆应该很容易。

你可以从c调用matlab函数35;阅读这里或这里这也是我的答案的工作原理。将分位数函数设为$F^{-1}(p)=-\ln(1-p)\mu$,并注意到“一减”部分可以省略。@JeppeStigNielsen:是的,但是如果你只是查找一下,你就错过了所有有趣的演算。:-)