作者popo14777 (草草)
看板MATLAB
标题[问题] 如何优先执行if条件後,再跳出回圈
时间Sat May 7 13:17:59 2016
我想要在我的回圈内,第一个优先条件挑出2,第二个优先条件挑出3,挑出最佳的sigma
P.S.但是这两个条件必须满足最小sigma
以下是的A矩阵(矩阵内是SV值,顺序是sigma=1:10)
A(:,1)=[27 10 6 5 4 2 2 2 2 2]'
A(:,2)=[28 10 8 5 5 3 2 2 2 2]'
A(:,3)=[30 9 8 5 4 4 3 3 3 3]'
A(:,4)=[24 8 7 5 3 2 2 2 2 2]'
A(:,5)=[23 7 7 5 4 3 3 3 3 3]'
我最後想要得到结果如下
A(:,1)→sigma=6、SV=2
A(:,2)→sigma=7、SV=2
A(:,3)→sigma=7、SV=3
A(:,4)→sigma=6、SV=2
A(:,5)→sigma=6、SV=3
以下是我的程式码
for k=1:5
for sigma=1:10
A=运算式
if min(abs(A(:,k)-2))==0 % 第一个优先条件挑出2
[~, imin]=min(abs(A(:,k)-2));
opt_sigma=imin; % 挑出来的位置就是最佳sigma
break
else if min(abs(A(:,k)-2))==1 % 第二个优先条件挑出3
[~, imin]=min(abs(A(:,k)-2));
opt_sigma=imin; % 挑出来的位置就是最佳sigma
break
end
end
end
W(运算式) % 把挑出最佳sigma丢入这个运算是
end
以上我想表达的意思是当我的sigma回圈从1到10,执行运算式(A),
当满足我上述说的条件後,跳出sigma这个回圈,把我想要得到的sigma丢到我的运算式
(W)
但现在跑出来的结果为
A(:,1)→sigma=6
A(:,2)→sigma=6
A(:,3)→sigma=7
A(:,4)→sigma=5
A(:,5)→sigma=6
不知哪里出问题,请大大帮忙,谢谢
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 140.138.143.57
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/MATLAB/M.1462598282.A.880.html
※ 编辑: popo14777 (140.138.143.57), 05/07/2016 13:25:21
1F:→ at01076172: 其实我不是看得很懂你的中文意思。但若已知A这个矩阵 05/07 16:00
2F:→ at01076172: 的话,[SV, sigma] = min(A);就是你要的东西了 05/07 16:00
因为我运算式A每跑1次sigma,运行时间很久,想说若能找到我要的值=2(优先条件),
跟值=3(次优先条件),就终止sigma回圈,再把sigma值丢到运算式W,
这样一来就减少许多时间,就不用多跑
谢谢
※ 编辑: popo14777 (140.138.143.57), 05/07/2016 16:45:52
3F:→ at01076172: 了解,所以你的SV值是必然存在2或3,你只是想找到第 05/07 18:15
4F:→ at01076172: 一次发生是2或3,以及发生的时候sigma为多少吗? 05/07 18:15
5F:→ at01076172: 啊...话说我上面会这样讲是因为後来看了你的code。你 05/08 16:31
6F:→ at01076172: 想做的事情跟你打的code似乎不太一样 05/08 16:31
7F:推 sunev: 你是要全跑完sigma,确定没有2後,再去找有没有3 ? 05/09 08:04
8F:→ popo14777: 问题解决了 谢谢大大 05/11 16:37