尽管没有要求,Octave仍会提供功能结果

时间:2019-06-13 19:22:08

标签: function output octave

我在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。

它以以下格式返回:

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

   0.026867   0.157753   0.026867   0.133573   0.315385 

在我看来,pi不是由其变量给出,而只是作为ans给出。

有什么建议吗?

1 个答案:

答案 0 :(得分:3)

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

通话

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

返回一个输出参数,它等效于

ans = PageRank(pi0,H,v,length(H),0.9,epsilon)
如果未明确给出

ans,则它始终是隐含的输出参数。 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表示您要忽略该输出参数。