[已解决] 我写的代码是为了对图片程序进行重现,但运行到while循环不知为何没有执行,请各位指教

[复制链接]
whqyyds 发表于 2022-11-15 10:54:41
本帖最后由 whqyyds 于 2022-11-15 14:59 编辑

clear
clc
H1=rand(15,10);
L1=eye(15,10);
L1(3:7,8:10)=1;
L1(6:11,2:5)=1;
[X,Y]=size(H1);
A1=zeros(X);A2=zeros(Y);
A3=zeros(X);A4=zeros(Y);
%A2=zeros(X);A4=zeros(Y);
A1(1,1)=1;A2(1,1)=1;
A3(X,X)=1;A4(Y,Y)=1;
q=1;
c=1;
while q+1<=X
    A1(q+1,q)=1; %得到矩阵A1和A3
    A3(q,q+1)=1;
    q=q+1;
end  
while c+1<=Y
    A2(c,c+1)=1; %得到矩阵A2和A4
    A4(c+1,c)=1;
    c=c+1;
end  
i=1;
D=cell(4*i,1);
LL=cell(4*i,1);
    LL{4*i-3,1}=A1*L1.*L1;%对LL进行赋值
    LL{4*i-2,1}=LL{4*i-3,1}*A2.*LL{4*i-3,1};
    LL{4*i-1,1}=A3*LL{4*i-2,1}.*LL{4*i-2,1};
    LL{4*i,1}=LL{4*i-1,1}*A4.*LL{4*i-1,1};%这之前都能正常运行,但while循环没有执行
while LL{4*i,1}~=0
    i=i+1;
    D{4*i-3,1}=H1.*(1-L1)+A1*H1.*L1;
    LL{4*i-3,1}=A1*L1.*L1;
    D{4*i-2,1}=D{4*i-3,1}.*(1-LL{4*i-3,1})+D{4*i-3,1}*A2.*LL{4*i-3,1};
    LL{4*i-2,1}=LL{4*i-3,1}*A2.*LL{4*i-3,1};
    D{4*i-1,1}=D{4*i-2,1}.*(1-LL{4*i-2,1})+A3*D{4*i-2,1}.*LL{4*i-2,1};
    LL{4*i-1,1}=A3*LL{4*i-2,1}.*LL{4*i-2,1};
    D{4*i,1}=D{4*i-1,1}.*(1-LL{4*i-1,1})+D{4*i-1,1}*A4.*LL{4*i-1,1};
    LL{4*i,1}=LL{4*i-1,1}*A4.*LL{4*i-1,1};
    H= D{4*i,1};
end




QQ图片20221115110429.png

最佳答案


1119093102 发表于 2022-11-15 15:58:04
whqyyds 发表于 2022-11-15 15:51
LL{4*I,1}是一个矩阵,判断LL里的元素是不是都为零,如果有不等于零的就继续循环直到满足条件,~any是什 ...

any是一个矩阵有1个非0就返回1,如果help是英文,可以上官网看帮助

12 条回复


TouAkira 发表于 2022-11-15 11:13:39
先去读读《 数组索引(超链接,自己点进去看) 》等帮助文档,MATLAB的索引是从1开始的,没有索引值为0对应的元素,LL{4*i,1}~=0 这个判断没法做。

whqyyds 发表于 2022-11-15 11:22:00
TouAkira 发表于 2022-11-15 11:13
先去读读《 数组索引(超链接,自己点进去看) 》等帮助文档,MATLAB的索引是从1开始的,没有索引值为0对应 ...

不好意思,是我刚才没有问清楚,LL{4*I,1}有值,但是while循环不执行

whqyyds 发表于 2022-11-15 11:23:36
TouAkira 发表于 2022-11-15 11:13
先去读读《 数组索引(超链接,自己点进去看) 》等帮助文档,MATLAB的索引是从1开始的,没有索引值为0对应 ...

不好意思,我没有问清楚,LL{4i,1}有值,但循环并没有执行

TouAkira 发表于 2022-11-15 12:10:23
whqyyds 发表于 2022-11-14 23:22
不好意思,是我刚才没有问清楚,LL{4*I,1}有值,但是while循环不执行

你代码现在也不清楚。发代码时请提供以clear开头的代码(或者说,你自己换一台电脑也能直接运行并复现同样的问题)。现在一堆变量别人电脑上又没有,没法直接复制运行。

1119093102 发表于 2022-11-15 13:55:27
10个有9个不放能跑的代码。。。

开水窝瓜 发表于 2022-11-15 15:17:33
你可以点开while的帮助界面找到
“如果条件表达式的计算结果是一个矩阵,则仅当该矩阵中的所有元素都为 true(非零)时,MATLAB 才会计算这些语句。要在任何元素为 true 时执行语句,请在 any 函数中对表达式换行。”

whqyyds 发表于 2022-11-15 15:27:51
开水窝瓜 发表于 2022-11-15 15:17
你可以点开while的帮助界面找到
“如果条件表达式的计算结果是一个矩阵,则仅当该矩阵中的所有元素都为 tru ...

也就是说只有当LL里面每个元素都不等于0的时候,while循环才会执行,一旦有一个元素等于0,循环就不会执行了是吗?

whqyyds 发表于 2022-11-15 15:29:13
whqyyds 发表于 2022-11-15 15:27
也就是说只有当LL里面每个元素都不等于0的时候,while循环才会执行,一旦有一个元素等于0,循环就不会执 ...

那我应该用那种循环呢,我主要是为了实现图片中的程序

1119093102 发表于 2022-11-15 15:37:13
whqyyds 发表于 2022-11-15 15:29
那我应该用那种循环呢,我主要是为了实现图片中的程序

LL{4*i,1}是个矩阵,你得问问图片的值到底什么意思,但一个值还是一个矩阵,如果是一个矩阵那就用~any跳出

开水窝瓜 发表于 2022-11-15 15:40:23
whqyyds 发表于 2022-11-15 15:29
那我应该用那种循环呢,我主要是为了实现图片中的程序

这有很多方法啊,你把条件判断式放到循环体里做判断赋值,或者在for循环插判断语句,用break跳出循环。

whqyyds 发表于 2022-11-15 15:51:21
1119093102 发表于 2022-11-15 15:37
LL{4*i,1}是个矩阵,你得问问图片的值到底什么意思,但一个值还是一个矩阵,如果是一个矩阵那就用~any跳 ...

LL{4*I,1}是一个矩阵,判断LL里的元素是不是都为零,如果有不等于零的就继续循环直到满足条件,~any是什么意思,能举个例子吗

1119093102 发表于 2022-11-15 15:58:04
whqyyds 发表于 2022-11-15 15:51
LL{4*I,1}是一个矩阵,判断LL里的元素是不是都为零,如果有不等于零的就继续循环直到满足条件,~any是什 ...

any是一个矩阵有1个非0就返回1,如果help是英文,可以上官网看帮助
回复此楼
您需要登录后才可以回帖 登录 | 注册

本版积分规则

相关帖子
相关文章
热门教程
站长推荐
快速回复 返回顶部 返回列表