Matlab图不会返回正确的结果

时间:2013-07-23 19:57:21

标签: matlab

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

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,20]

因此,这个函数的目的是计算t的t元素大于任何给定t的元素数。

当我编写

时,此代码可以正常工作
PoisProc2(3,tao,20);

我得到的答案是预期的19,但是如果我写的话

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

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

2 个答案:

答案 0 :(得分: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))

干杯

答案 1 :(得分: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(非零(vec> thresholds(k)))”所取代,这更像是MATLAB风格。
  • 我认为这可以用hist()函数完成。但这可能更容易理解。