【发布时间】:2019-11-10 22:41:37
【问题描述】:
让我描述一个任务:我有 3 个矩阵 (M1,M2,M3),它们每个都有 lenght(Mi) 行和 2 列。我们得到一个函数g(x,s),其中s 是一个二维参数,x 和eta 被给出。我想检查第一个矩阵 M1,如果存在诸如 g(x,M1(i,:)>eta 之类的 s,我想结束算法并设置 s_new=M1(i,:)。如果M1 中不存在这样的s,我想去矩阵M2 并在其中搜索。下一个矩阵 M3。如果所有矩阵中都不存在这样的 s_new,我想打破。
我的第一次尝试:
function[s_new]= checking(M1,M2,M3,x)
bool1=0;
eta = 10^-8;
g = @(x,s) x-s(1)-s(2);
while bool1==0
for i=1:length(M1)
if g(x,M1(i,:))>eta
s_new=M1(i,:);
bool1=1;
end
end
for i=1:length(M2)
if g(x,M2(i,:))>eta
s_new=M2(i,:);
bool1=1;
end
end
for i=1:length(M3)
if g(x,M3(i,:))>eta
s_new=M3(i,:);
bool1=1;
end
end
bool1=1;
end
我的第二次尝试涉及一些中断选项,但它也不起作用。问题是:当算法在 M1 中找到 s(例如我们的条件成立)时不会停止,它会转到 M2,如果找到这样的 s,它会更改 s_new。另外为了节省一些时间,如果 M1 中存在这样的 s,我不希望算法通过矩阵 M2。
为什么效果不好的例子:
M1=[0,-1;0,-1], M2=[0,-2;0,-2], M3=[0,0;0,0], x=0
它应该返回向量[0,-1] 并返回[0,-2]。任何帮助表示赞赏。
编辑:for 循环内的 bool1=1 带有红色下划线,表示 bool1 可能未使用,就好像它在 bool1=0 时没有从开始时的条件识别它一样
【问题讨论】:
标签: matlab for-loop while-loop