Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
matlab中循环的理解_Matlab_Loops - Fatal编程技术网

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语言来表达。