matlab - 理解matlab中的循环

标签 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    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);

但还有一条评论。 while(1) break; 不是一个很好的结构。你可以只在上面加上 while(Dij(i, sel)~= 0) 和 Dij(i, sel) = 0 ,根本不需要调用break 。

最后,我的理解是,如果所有列都为 0,那么您就陷入了无限循环。也许这永远不会发生,但只是需要考虑一下。

关于matlab - 理解matlab中的循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14640838/

相关文章:

javascript - 如何在特定时间间隔内停止 javascript 循环?

python - Pandas 迭代 DataFrame 行对

python - R 和 Python 中的广义线性模型给出与 MATLAB 中不同的结果

matlab - 制作子矩阵时遇到问题

MYSQL 为什么 While 循环返回第一条记录两次?

c - 如何使用指针交换数组

python - 区分循环中的多个导出点

matlab - 在 imagesc 上使用透明度值

matlab - Matlab如何标准化广义特征向量?

c++ - 生成从 1 到 n 的 k 个数字的 nCk 组合的程序