给定的for loop
计算新的转换矩阵。我正在尝试
我想巧妙地重复给定的循环,但是它一次又一次地复制/粘贴循环是可疑的。请帮忙。
%% generate some weights vector i.e. the probability matrix
Transition =
[
0.06 0.47 0 0.47 0 0 0;
0.47 0.06 0.47 0 0 0 0;
0 0.47 0.06 0.47 0 0 0;
0.47 0 0.47 0.037 0.023 0 0;
0 0 0 0.023 0.037 0.47 0.47;
0 0 0 0 0.47 0.06 0.47;
0 0 0 0 0.47 0.47 0.06
];
tolerance= 0.01
Dij= Transition;
len=length(Transition);
enter code here
%% copying the status
for i=1:7
while(1)
sel=randi(7);
if((Dij(i,sel) ~= 0))
show(i)=sel;
break;
end
end
Dij(i,sel)=Dij(i,sel)-tolerance*(i ~= sel);
for i=1:7
while(1)
sel=randi(7);
if((NewDij(i,sel) ~= 0))
show(i)=sel;
break;
end
end
NewDij(i,sel)=NewDij(i,sel)-tolerance*(i ~= sel);
newnew=NewDij;
end
for i=1:7
while(1)
sel=randi(7);
if((newnew(i,sel) ~= 0))
show(i)=sel;
break;
end
end
newnew(i,sel)=NewDij(i,sel)-tolerance*(i ~= sel);
end
感谢任何帮助。
答案 0 :(得分:1)
我看到你的代码片段中出现了两次代码片段。 假设这是重复的意思,您可以定义包含此代码的函数或脚本,然后调用它两次而不是复制代码。这样,也不存在在一个位置更新代码而在第二个位置更新代码的风险。
如果输入和输出参数有限,通常首选函数,请检查help function
作为旁注,我不知道while 1 ... break
是否真的是不好的做法,但我认为这至少是不寻常的。
答案 1 :(得分:0)
首先,您是否有任何终止条件:何时停止更新Dij。
您可以通过在if
条件下定义Dij更新,在循环内添加Dij更新。
所以而不是
if((Dij(i,sel) ~= 0))
show(i)=sel;
break;
你可以写
if((Dij(i,sel) ~= 0))
show(i)=sel;
Dij(i,sel)=Dij(i,sel)-tolerance*(i ~= sel);