random_walk.m
来自「自己编的一个用随机行走法实现电路计算的例子」· M 代码 · 共 100 行
M
100 行
clear all;
r(001,002)=1;
r(002,003)=1;
r(3,5)=4;
r(5,7)=1;
r(3,4)=1;
r(4,6)=2;
r=0-r
g=1./r
%g_temp=g<Inf;
%g=g.*g_temp+1;
%g=sparse(g)
m(1)=1;
m(7)=1;
m(6)=1;
flag = (m~=0);
ii=[0,0.1,0.05, 0.3, 0.05, 0,0]
[size_r, size_c]=size(r)
for k=1:max(size_r,size_c)
sum_g(k) = 0;
for pp=1:size_r
for q=1:size_c
if(((pp==k) || (q==k)) &&( g(pp,q) ~= Inf))
sum_g(k) = sum_g(k) + g(pp,q);
end
end
end
m(k)=ii(k)/sum_g(k);
end
m(1)=1;
m(7)=1;
m(6)=1;
for k=1:max(size_r,size_c)
for pp=1:size_r
for q=1:size_c
if(((pp==k) || (q==k)) &&( g(pp,q) ~= Inf))
if(pp==k) kk=q;
else kk=pp;
end
p(k,kk) = g(pp,q)/sum_g(k);
end
end
end
end
p=sparse(p)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
node = 4;
WALK_TIME = 100;
COUNT_TIME = 100;
ff = 0;
f(node)=m(node);
for count = 1:COUNT_TIME
next_node = node;
ff = f(node)+ff;
f(node)=m(node);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% walk till the end or
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% time up
for w_time = 1:WALK_TIME
%%%%%%%%%%%%%%%%%%%%
p_rand = rand;
p_temp = 0;
for pp=1:max(size_c,size_r)
if( p(next_node,pp) > 0 )
p_temp = p_temp + p(next_node,pp);
if(( p_rand < p_temp ) || ( p_temp==1))
next_node = pp %%%%%%%%%% search every node, find next node
break;
end
end
end
%%%%%%%%%%%%%%%%%%%
f(node)= f(node) + m(next_node)
if(flag(next_node)==1)
break;
end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% walk ends
end
fff(node) = ff/count
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?