Matlab绘图赢得';不能返回正确的结果

Matlab绘图赢得';不能返回正确的结果,matlab,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 道只是一个长度大小的随机双倍数组。为了简单起见,我们会说[1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,20] 所以这个函数的目的是计算道的多少元素,t大于任何给定的t 当我简单地编写代码时

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

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
道只是一个长度大小的随机双倍数组。为了简单起见,我们会说[1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,20]

所以这个函数的目的是计算道的多少元素,t大于任何给定的t

当我简单地编写代码时,这段代码工作得很好

PoisProc2(3,tao,20);
我得到的答案和预期的一样是19,但是如果我写

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

y在工作区中显示为0(我希望数组的长度为1901),我的绘图也显示为0。我对Matlab很陌生,但这似乎是我试图做的一件很简单的事情,我肯定错过了一些明显的东西。请帮忙

您的代码在给定向量时不起作用。因此,如果您的条件没有像您预期的那样工作

首先使用向量初始化n\u 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))

干杯

因为在上一个示例中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()函数实现。但这可能更容易理解

如果
t
是向量(在第二个示例中是向量),则函数可能无法处理比较
t>toa(1,n)
。一个快速解决方法是包装
y=PoisProc2(x,tao,20)编码到循环中并执行如下操作:
y(I)=PoisProc2(x(I),tao,20)
谢谢你,作为Matlab新手,我仍然习惯于它处理向量的方式