对循环中的邻接组求平均值

时间:2017-03-12 11:18:55

标签: matlab function average

我有以下代码,最终会输出一个图表和一组'值。结果取决于随机函数,因此每次都可以提供不同的结果。

function [t seqBeliefs] = extendedHK(n, tol, adj)
%extendedHK Summary of function goes here
%Detailed explanation goes here

beliefs = rand(n,1);
seqBeliefs = beliefs; %NxT matrix
converge = 0;
step = 0
t = step


while converge ~= 1
step = step+1;
t = [t step];
A = zeros (n,n);

for i=1:1:n
    for j=i:1:n
        if abs(beliefs(i) - beliefs(j)) < tol && adj(i,j)==1
            A(j,i)=1;
            A(i,j)=1;
        end
    end
end

beliefs = A*beliefs./ sum(A,2);
seqBeliefs = [seqBeliefs beliefs];
 if sum(abs(beliefs - seqBeliefs(:,step)))<1e-12
    converge = 1;
end
end
groups = length(uniquetol(seqBeliefs(:,step), 1e-10))
plot(t,seqBeliefs)
end

在命令窗口中输入

adj=random_graph(n)

我通常使用n作为100,然后使用相同的extendedHK调用n函数,然后调整tol值(我通常选择介于0.1和0.4之间)和&#39; adj&#39; < / p>

  

e.g。 adj = random_graph(100)

     

extendedHK(100,0.2,adj)

我现在需要帮助的是运行此功能100次,并取平均数量的&#39;组&#39;成立了。

2 个答案:

答案 0 :(得分:0)

  1. 首先,在函数输出中包含参数“groups”。为此,请尝试使用此代码而不是代码的第一行:

    function [t seqBeliefs groups] = extendedHK(n, tol, adj)
    
  2. 然后将此函数保存在extendedHK.m文件中。

    1. 打开另一个.m文件,说是console.m并写下:

      results = zeros(1,100);
      
      for i = 1:100
          % set n, tol and adj inputs here <=
          [~,~,out] = extendedHK(n, tol, adj);
          results(1,i) = out;
      end
      avg = mean(results)
      
    2. 不要忘记在循环中定义“结果”。因为每个循环改变大小的参数会使你的代码变慢 (通过〜在此回复后添加〜来抑制不必要的输出)

答案 1 :(得分:0)

目前尚不清楚您是否需要extendedHK的当前输出:[t seqBeliefs] 无论如何,你可以在输出中添加“组”,然后从控制台添加

N=100;
groups_vec = zeros(1,N);
for i=1:N
  adj = random_graph(100);
  [~,~,groups_vec(i)] = extendedHK(100, 0.2, adj);
end
groups_avr = mean(groups_vec);

请注意,如果您使用此代码,您将无法“看到”图形,因为它们将在每次循环迭代时被清除。您可以执行以下操作之一(1)添加“数字”;在绘图命令之前,你将有100个数字。 (2)在每个图形之间添加“暂停”等待按键。 (3)添加“hold on”以打印同一图上的所有图形。