我有一个矩阵数组(M)。我对第i个位置上的矩阵执行一个操作,并在第(3i-1),(3i)和(3i + 1)个位置向我的数组添加三个矩阵。我想继续这个过程直到我到达数组中的第j个位置,其中j使得第(j + 1)个位置和之后的所有矩阵已经出现在位置1和j(包含)之间的某处。如何检查矩阵是否不在数组中(Matlab)
编辑:我被要求澄清我的意思。如上所述,我无法编写使我的算法终止的代码。如果我知道通过矩阵阵列搜索的正确方法来检查给定的矩阵是否包含,那么我可以做到这一点。我试过如下:
done = 0;
ii = 1
while done ~= 1
%operation on matrix in ith position omitted, but this is where it goes
for jj = ii+1:numel(M)
for kk = 1:ii
if M{jj} == M{kk};
done = done + 1/(numel(M) - ii);
break
end
end
end
if done ~= 1
done = 0;
end
ii = ii + 1
end
我有这个(我敢肯定,你可以看到)的问题是,如果处理进行太久,舍入误差停止过做允许= 1,和算法不会终止。我试图让这一轮通过引入阈值,像
while abs(done - 1) > thresh
和
if abs(done - 1) > thresh
done = 0;
end
这使得该算法的工作更多的时候,但我没有“一刀切”的阈值,我可以使用(该过程可以继续任意多个步骤),所以它仍然最终打破。
我能做些什么来解决这个问题?
感谢
我不太明白问题的内容与问题标题的关系。请问你在问什么?另外,你能提供'M'来让你的代码可以正确重现。最后,如果你在MATLAB中有这样的嵌套循环,通常意味着你做错了什么。我建议你澄清你的真实目标,这样我们就可以找到更好的编写代码的方法。 – 2012-01-10 22:00:57
感谢您的回复。我现在编辑我的帖子,使我的问题更清晰;我想你会发现它与标题有关。我不明白你的意思是“错误”。我的目标是编写一个算法,使我能够在可接受的时间内获得所需的输出。我是编程新手,但我写的其他大多数算法都使用嵌套循环,并且工作得很好。 – 2012-01-10 22:08:23
我也不明白标题与你的要求有什么关系。如果将其更改为更相关的内容,例如“循环未正确终止”或其他内容会更好。它也会帮助你,因为感兴趣的人会根据标题真正阅读你的真实问题。 – Jorge 2012-01-11 01:03:19