我有以下代码,最终会输出一个图表和一组'值。结果取决于随机函数,因此每次都可以提供不同的结果。
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;成立了。
答案 0 :(得分:0)
首先,在函数输出中包含参数“groups”。为此,请尝试使用此代码而不是代码的第一行:
function [t seqBeliefs groups] = extendedHK(n, tol, adj)
然后将此函数保存在extendedHK.m文件中。
打开另一个.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)
不要忘记在循环中定义“结果”。因为每个循环改变大小的参数会使你的代码变慢 (通过〜在此回复后添加〜来抑制不必要的输出)
答案 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”以打印同一图上的所有图形。