c#的Matlab表达式(a、b、c)模拟?
如何从与Matlab中函数exprnd()相同的分布中获得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
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:是的,但是如果你只是查找一下,你就错过了所有有趣的演算。:-)