我在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
给出。
有什么建议吗?
答案 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表示您要忽略该输出参数。