【问题标题】:Octave keeps giving results from function although not askedOctave 不断给出函数的结果,尽管没有被问到
【发布时间】:2019-06-13 19:22:08
【问题描述】:

我在 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,这似乎很奇怪。

有什么建议吗?

【问题讨论】:

    标签: function output octave


    【解决方案1】:

    我知道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 表明您要忽略该输出参数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-19
      • 1970-01-01
      • 2012-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多