0

我写了一个函数,它是泊松过程的开始

function n_t = PoisProc2(t,tao,SIZE)

n_t=0;

for n=1:SIZE

    if t>tao(1,n)
        n_t=n_t+1;
    end

end


end

tao 只是一个长度为 SIZE 的随机双精度数组。为简单起见,我们会说 [1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,20]

所以这个函数的目的是计算 tao 中有多少元素 t 大于任何给定的 t。

当我简单地编写时,此代码工作正常

PoisProc2(3,tao,20);

我得到的答案是 19 正如预期的那样,但如果我写

x=1:.01:20;
y=PoisProc2(x,tao,20);
plot(x,y,'-')

y 在工作区中显示为 0(我希望数组长度为 1901),并且我的绘图也显示为 0。我对 Matlab 很陌生,但这似乎是我想做的一件非常简单的事情,我必须遗漏一些明显的东西。请帮忙!

4

2 回答 2

1

当您提供向量时,您的代码不起作用。所以你的 if 条件没有像你预期的那样工作。

首先用一个向量初始化 n_t :

n_t=zeros(1,length(t))

代替

if t>tao(1,n)
    n_t=n_t+1;
end

向量化你的表达:

n_t = n_t + (t>tao(1,n))

干杯

于 2013-07-23T20:06:08.120 回答
0

因为 x 在您的上一个示例中是一个向量,所以您的函数中的“if t>tao(1,n)”语句的行为与您的想法完全不同。

下面的这个函数应该会给你正确的结果。

function ret = PoisProc2(thresholds, vec)
ret = zeros(size(thresholds));
for k = 1:numel(thresholds)
    ret(k) = numel(nonzeros(vec > thresholds(k)));
end

旁注:

  • 您的原始函数非常具有 C/Java 风格。您可以在我的函数中看到,它已被单行“numel(nonzeros(vec > thresholds(k)))”取代,这更像是 MATLAB 风格。
  • 我认为这可以通过 hist() 函数来完成。但这可能更容易理解。
于 2013-07-23T22:06:04.383 回答