Октава продолжает давать результаты от функции, хотя и не просили - PullRequest
0 голосов
/ 13 июня 2019

Я создал функцию в 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; или нет.

Возвращает его в следующем формате:

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

   0.026867   0.157753   0.026867   0.133573   0.315385 

Мне кажется странным, что число Пи дано не с его переменной, а просто как ans.

Есть предложения?

1 Ответ

3 голосов
/ 13 июня 2019

Я знаю, что Octave документация для этого не очень обширна, но, возможно, она дает достаточно подсказок, чтобы понять, что вы думаете о выходных переменных неправильно.

Вызов

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)

~ указывает Октаве, что вы хотите игнорировать этот выходной аргумент.

...