如何从与 Matlab 中的函数 exprnd() 相同的分布中获取 C# 中的数字?
问问题
635 次
3 回答
3
尝试类似:
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;
}
注意:System.Random
该类不是线程安全的。如果ExpRnd
上面调用的线程不止一个,那就要多加小心了。
于 2013-04-14T13:32:14.827 回答
2
这篇博文可能会对您有所帮助:
http://ericlippert.com/2012/02/21/generating-random-non-uniform-data/
如果您知道 - 或可以计算出 - 您想要的分布的分位数函数,那么您可以将您已经拥有的(大致)均匀分布转换为给定分布。
正如我在博客文章中所描述的,分位数函数是累积分布的倒数,而累积分布是分布下的面积。由于您想要的分布是 e -x,因此应该很容易计算出积分和倒数。
于 2013-04-14T13:36:19.910 回答
1
您可以使用一些外部信号处理库,例如meta.numerics
在Meta.Numerics.Statistics.Distributions
命名空间下,查看ExponentialDistribution
类和相应的GetRandomValue(Random)
方法。
于 2013-04-14T11:51:11.857 回答