Octave 不断给出函数的结果,尽管没有被询问

Octave keeps giving results from function although not asked

我在 Octave 中创建了一个函数,此时我只想显示其中一个可能的输出。代码:

function [pi, time, numiter] = PageRank(pi0,H,v,n,alpha,epsilon);
  rowsumvector=ones(1,n)*H';
  nonzerorows=find(rowsumvector);
  zerorows=setdiff(1:n,nonzerorows); l=length(zerorows);
  a=sparse(zerorows,ones(l,1),ones(l,1),n,1);

  k=0;
  residual=1;
  pi=pi0;
  tic;

  while (residual >= epsilon)
      prevpi=pi;
      k=k+1;
      pi=alpha*pi*H + (alpha*(pi*a)+1-alpha)*v;
      residual = norm(pi-prevpi,1);
  end

  pi;  
  numiter=k
  time=toc;

endfunction

现在我只想返回 numiter,但它也一直给我返回 pi,无论我是否删除 pi;

它returns它的格式如下:

>> PageRank(pi0,H,v,length(H),0.9,epsilon)
numiter =  32
ans =

   0.026867   0.157753   0.026867   0.133573   0.315385 

对我来说,pi 没有随变量一起给出,而只是作为 ans,这似乎很奇怪。

有什么建议吗?

我知道 Octave documentation for this 不是很广泛,但也许它提供了足够的提示来理解您对输出变量的看法是错误的。

来电

PageRank(pi0,H,v,length(H),0.9,epsilon)

returns单个输出参数,等价于

ans = PageRank(pi0,H,v,length(H),0.9,epsilon)

ans 如果明确给出 none 则始终是隐含的输出参数。 ans 将被分配 pi 的值,您的函数的第一个输出参数。您的工作区中的变量 pi(也不是 time,numiter)将被修改或分配给。这些是您的函数中局部变量的名称。

要获取其他输出变量,请执行以下操作:

[out1,out2,out3] = PageRank(pi0,H,v,length(H),0.9,epsilon)

现在,变量 out1 将被赋予 pi 在您的函数中的值。 out2 将包含 time 的值,而 out3 将包含 numiter

的值

如果您不想要前两个输出参数而只想要第三个,请执行此操作:

[~,~,out3] = PageRank(pi0,H,v,length(H),0.9,epsilon)

~ 向 Octave 表明您想忽略该输出参数。