Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 这一行代码应该会产生指数级的服务时间,但我无法得到它背后的逻辑_Matlab_Random_Distribution_Exponential - Fatal编程技术网

Matlab 这一行代码应该会产生指数级的服务时间,但我无法得到它背后的逻辑

Matlab 这一行代码应该会产生指数级的服务时间,但我无法得到它背后的逻辑,matlab,random,distribution,exponential,Matlab,Random,Distribution,Exponential,这一行代码应该会产生指数级的服务时间,但我无法得到它背后的逻辑 % Exponential service time with rate 1 mean = 1; dt = -mean * log(1 - rand()); 这是一个简单的例子,但是需要MATLAB来打开这个例子 我还在想,如果exprnd(1)将给出从平均值为1的指数分布生成数字的相同结果,你是对的 首先,请注意,MATLAB通过平均值而不是速率来参数化指数分布,因此exprnd(5)将具有速率lambda=1/5 这行代

这一行代码应该会产生指数级的服务时间,但我无法得到它背后的逻辑

% Exponential service time with rate 1
mean = 1;
dt   = -mean * log(1 - rand());
这是一个简单的例子,但是需要MATLAB来打开这个例子

我还在想,如果exprnd(1)将给出从平均值为1的指数分布生成数字的相同结果,你是对的

首先,请注意,MATLAB通过平均值而不是速率来参数化指数分布,因此
exprnd(5)
将具有速率
lambda=1/5


这行代码是执行相同操作的另一种方法:
-mean*log(1-rand())

这是最适合的

如果X服从指数分布,则

重写并使U~一致(0,1),我们可以得到逆变换

注:最后一个相等是因为1-U和U在分布上相等。换句话说,1-U~均匀(0,1)和U~均匀(0,1)


您可以使用此示例代码使用多种方法对其进行测试

% MATLAB R2018b
rate = 1;                % mean = 1       % mean = 1/rate
NumSamples = 1000;

% Approach 1
X1 = (-1/rate)*log(1-rand(NumSamples,1));  % inverse transform

% Approach 2
X2 = exprnd(1/rate,NumSamples,1);      

% Approach 3
pd = makedist('Exponential',1/rate)    % create probability distribution object
X3 = random(pd,NumSamples,1);


编辑:询问的OP是有理由从CDF而不是从CDF生成的。这是我试图回答的问题

逆变换方法使用CDF来利用CDF本身是一种概率,因此必须在区间[0,1]上这一事实。然后很容易生成非常好的(伪)随机数,这些随机数将在该间隔上。CDF足以唯一地定义分布,反转CDF意味着其唯一的“形状”将[0,1]上均匀分布的数字正确地映射到域中遵循概率密度函数(PDF)的非均匀形状

您可以看到CDF执行这种非线性映射

PDF的一个用途是方法,它对包括自定义PDF在内的一些发行版非常有用(感谢@for jogging my memory)。

你说得对

首先,请注意,MATLAB通过平均值而不是速率来参数化指数分布,因此
exprnd(5)
将具有速率
lambda=1/5


这行代码是执行相同操作的另一种方法:
-mean*log(1-rand())

这是最适合的

如果X服从指数分布,则

重写并使U~一致(0,1),我们可以得到逆变换

注:最后一个相等是因为1-U和U在分布上相等。换句话说,1-U~均匀(0,1)和U~均匀(0,1)


您可以使用此示例代码使用多种方法对其进行测试

% MATLAB R2018b
rate = 1;                % mean = 1       % mean = 1/rate
NumSamples = 1000;

% Approach 1
X1 = (-1/rate)*log(1-rand(NumSamples,1));  % inverse transform

% Approach 2
X2 = exprnd(1/rate,NumSamples,1);      

% Approach 3
pd = makedist('Exponential',1/rate)    % create probability distribution object
X3 = random(pd,NumSamples,1);


编辑:询问的OP是有理由从CDF而不是从CDF生成的。这是我试图回答的问题

逆变换方法使用CDF来利用CDF本身是一种概率,因此必须在区间[0,1]上这一事实。然后很容易生成非常好的(伪)随机数,这些随机数将在该间隔上。CDF足以唯一地定义分布,反转CDF意味着其唯一的“形状”将[0,1]上均匀分布的数字正确地映射到域中遵循概率密度函数(PDF)的非均匀形状

您可以看到CDF执行这种非线性映射


PDF的一个用途是方法,它对包括自定义PDF在内的一些发行版非常有用(感谢@for jogging my memory)。

这是一个非常好的答案,消除了我所有的疑虑。我们选择从CDF而不是从PDF生成发行版的样本有什么原因吗?@user3656142,我编辑了我的答案以回应您的评论——这是一个很好的问题。我希望有帮助。基本上,这只是一种计算成本较低的方法。基于PDF的解决方案可以使用接受/拒绝技术完成,但需要能够从有限面积的缩放边界函数生成。对于具有无限范围的分布,找到合适的边界函数可能具有挑战性,并且往往不如使用逆变换方法直观。具有讽刺意味的是,在这种情况下,指数通常被用作边界函数,因为它们很容易通过反转生成。@pjs是的,接受-拒绝在某些情况下对我很有用。不知道我怎么没想到。答案已更新。谢谢。这是一个非常好的回答,消除了我所有的疑虑。我们选择从CDF而不是从PDF生成发行版的样本有什么原因吗?@user3656142,我编辑了我的答案以回应您的评论——这是一个很好的问题。我希望有帮助。基本上,这只是一种计算成本较低的方法。基于PDF的解决方案可以使用接受/拒绝技术完成,但需要能够从有限面积的缩放边界函数生成。对于具有无限范围的分布,找到合适的边界函数可能具有挑战性,并且往往不如使用逆变换方法直观。具有讽刺意味的是,在这种情况下,指数通常被用作边界函数,因为它们很容易通过反转生成。@pjs是的,接受-拒绝在某些情况下对我很有用。不知道我怎么没想到。答案已更新。谢谢