0

我正在使用对数正态分布,现在我在 MATLAB 中遇到了 marcumq 函数的问题。这是我的代码:

N = 10^5;        %//sample
x1 = randn(N,1); %//creat random variable x1
mean = 1;        %//mean of x1
sigma = 0.4;     %//variance of x1

x = mean + sqrt(sigma).*x1; %//random variable x
y = exp(x);                 %//log-normal random variable
z = 0:0.1:150;
[n,xout] = hist(y,z); %//frequency counts and the bin locations

m = 5; 
Base = 0.01:0.02:1;
Pf = Base.^2;       
lamda = gaminv(1-Pf,m)*2; %//value of decision threshold

  for i = 1:1:1501
    Q = marcumq(sqrt(2*m*xout(i)),sqrt(lamda),m);
  end

我的问题是:我无法在“Q = marcumq(sqrt(2*m*xout(i)),sqrt(lamda),m);”中确定 Q 的值。当我运行我的程序时,它在所有元素中的 Q 的返回值为 1。我需要你的帮助来帮助我解决这个错误。太感谢了!

4

1 回答 1

0

编辑:好的,所以我最初误解了这个功能。

运行脚本后获得的 Q 值仅基于 xout 中的最后一个值,因此这可能不是您想要的。

你能描述一下你想要做什么吗?

您对 lambda 的值不是标量,而是向量。那是你要的吗?这意味着每次调用 marcumq 时,都会得到一个值向量。

当您的第一个输入大于您的第二个输入时,Q = 1 似乎会发生 - 这些是您的积分限制,因此如果下限大于上限,则不会发生积分。

通过对代码的简短测试,您的 xout 值高于您的 lambda 值。另外,您确定要使用 xout 吗?这些只是等于 z 的 bin 值。

于 2013-06-21T09:04:35.190 回答