matlab - while 循环内有 for 循环

标签 matlab for-loop while-loop

让我描述一个任务:我有 3 个矩阵 (M1,M2,M3) ,它们每个都有 lenght(Mi) 行和 2 列。我们有一个函数g(x,s)哪里s是一个二维参数并且 xeta给出。我想检查第一个矩阵 M1 是否存在诸如 g(x,M1(i,:)>eta 之类的 s我想结束算法并设置 s_new=M1(i,:) 。如果里面有这样的M1不存在我想去矩阵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

我的第二次尝试涉及一些中断选项,但它也不起作用。问题是:当 alghoritm 在 M1 中找到 s(如我们的条件成立)时,它不会停止,它会转到 M2,如果它找到这样的 s,它会更改 s_new。另外,为了节省一些时间,如果 M1 中存在这样的矩阵,我不希望算法遍历矩阵 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 时没有从开始时的条件识别它一样

最佳答案

我想我发现了问题

您打算在 bool1=1; 的情况下中断 while 循环

您可以在每个部分后添加 if bool1, break;end:

%function[s_new]= checking(M1,M2,M3,x)
M1=[0,-1;0,-1]; 
M2=[0,-2;0,-2];
M3=[0,0;0,0];
x=0;

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
    if bool1, break;end

    for i=1:length(M2)
         if g(x,M2(i,:))>eta
            s_new=M2(i,:);
            bool1=1;
         end
    end
    if bool1, break;end

    for i=1:length(M3)
         if g(x,M3(i,:))>eta
            s_new=M3(i,:);
            bool1=1;
         end
    end
    bool1=1;
end

display(s_new)

没有 while 循环更优雅:

%function[s_new]= checking(M1,M2,M3,x)
M1=[0,-1;0,-1]; 
M2=[0,-2;0,-2];
M3=[0,0;0,0];
x=0;

bool1=0;
eta = 10^-8;
g = @(x,s) x-s(1)-s(2);

for i=1:length(M1)
    if g(x,M1(i,:))>eta
        s_new=M1(i,:);
        bool1=1;
    end
end

if ~bool1
    for i=1:length(M2)
         if g(x,M2(i,:))>eta
            s_new=M2(i,:);
            bool1=1;
         end
    end
end

if ~bool1
    for i=1:length(M3)
         if g(x,M3(i,:))>eta
            s_new=M3(i,:);
            bool1=1;
         end
    end
end

display(s_new)

关于matlab - while 循环内有 for 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56815939/

相关文章:

Python 绘制 for 循环内的 for 循环生成的数据

image - 使用 MATLAB 中的查找表增加图像对比度

javascript - 如何找到两组对象的差异?

python - 确保每个字母在密码中只出现一次

arrays - 提取按另一个向量中的索引分组的向量中元素频率的快速方法?

serialization - 是否有可能拦截 matlab save() 字节流

javascript - 通过 For 循环选择和添加函数到 Div

PYTHON:访问字典中列表列表的元素

java - 使用 While 循环从字符串末尾删除逗号

c - 为什么“while(!feof(file))”总是错误的?