matlab中循环的理解
以下代码从每行中选择一个随机数后减去公差。我在这里犯了一个小错误。我不想从过渡中减去对角线元素的公差。我该如何解决这个问题? 感谢您的帮助matlab中循环的理解,matlab,loops,Matlab,Loops,以下代码从每行中选择一个随机数后减去公差。我在这里犯了一个小错误。我不想从过渡中减去对角线元素的公差。我该如何解决这个问题? 感谢您的帮助 clear all; close all; clc; tolerance= 0.01; Transition = [0.06 0.47 0 0.47 0 0 0; 0.47 0.06 0.47 0 0 0 0; 0 0.47 0.06
clear all;
close all;
clc;
tolerance= 0.01;
Transition = [0.06 0.47 0 0.47 0 0 0;
0.47 0.06 0.47 0 0 0 0;
0 0.47 0.06 0.47 0 0 0;
0.47 0 0.47 0.037 0.023 0 0;
0 0 0 0.023 0.037 0.47 0.47;
0 0 0 0 0.47 0.06 0.47;
0 0 0 0 0.47 0.47 0.06];
len=length(Transition);
Dij=Transition;
% Assigned status of all the sites at given time k
S_k= [0 1 1 1 1 0 0];
for i=1:7
while(1)
sel=randi(7);
if(Dij(i,sel)~=0)
show(i)=sel;
break;
end
end
Dij(i,sel)=Dij(i,sel)-tolerance;
end
我想循环直到其中一个非对角元素为零。如果我理解正确,那么您只需要更改这一行
if(Dij(i,sel)~=0)
包括不在对角线上的条件
if((Dij(i,sel) ~= 0) && (i ~= sel))
除非你仍然想在对角线上调用show(),而不做子部分,在这种情况下,只需将逻辑向下移动即可
Dij(i,sel)=Dij(i,sel)-tolerance*(i ~= sel);
但还有一条评论<代码>当(1)中断时代码>不是一个很好的构造。您可以只在上面使用while(Dij(i,sel)~=0)
和Dij(i,sel)=0
,而完全不需要调用break
最后,我的理解是,如果所有列都是0,那么您已经打开了一个无限循环。也许这永远不可能发生,但只是一些需要思考的事情。如果我理解正确,那么您只需要更改这行代码
if(Dij(i,sel)~=0)
包括不在对角线上的条件
if((Dij(i,sel) ~= 0) && (i ~= sel))
除非你仍然想在对角线上调用show(),而不做子部分,在这种情况下,只需将逻辑向下移动即可
Dij(i,sel)=Dij(i,sel)-tolerance*(i ~= sel);
但还有一条评论<代码>当(1)中断时代码>不是一个很好的构造。您可以只在上面使用while(Dij(i,sel)~=0)
和Dij(i,sel)=0
,而完全不需要调用break
最后,我的理解是,如果所有列都是0,那么您已经打开了一个无限循环。也许这永远都不会发生,只是需要思考一下。如果我循环说如果Dij(I,j)Dij(I,sel)=Dij(I,sel)-公差;else Dij(i,sel)=Dij(i,sel);如果我做一个循环说如果Dij(i,j)Dij(i,sel)=Dij(i,sel)-公差;else Dij(i,sel)=Dij(i,sel);我真的不擅长循环,我只是想让矩阵的一个非对角元素趋向于零,我知道我必须用一个带条件的while循环找到一个趋向于零的非对角元素Dij,然后对它进行划分。但我不知道如何用matlab语言来表达,我在循环方面非常糟糕,我只是想让矩阵中的非对角元素趋于零,我知道我必须在条件下放置一个while循环,找到一个趋于零的非对角元素Dij,然后对它进行划分。但是我不知道如何用matlab语言来表达。