【问题标题】:Matlab: Updating max count in a loop doesn't workMatlab:在循环中更新最大计数不起作用
【发布时间】:2016-05-23 12:01:14
【问题描述】:

我已经在 MATLAB 中执行了这个简单的循环脚本

clc;clear; close all;
m = 100;
for i = 1:m
    if(i == 2)
        m = 1000;
    end
end 

发现,'i' 只循环到 '100' 而不是 '1000'。为什么……??

【问题讨论】:

  • 阅读for,尤其是最后一节。 避免在循环语句中为索引变量赋值。 for 语句覆盖循环内对索引所做的任何更改。
  • 这真的是你想要的吗?还是你真的想做点别的?
  • @Bernhard:是的,这就是我想要的。 :)
  • @GautamKrishna 不,在这种情况下,只需输入 m=1000 并删除 if
  • @Jonas 这就是问题所在 :) 除了结果错误之外,人们永远不会发现问题所在。假设呼叫double x = 0; double y = SQUARE(x+1);。这将等同于double y = x+1*x+1 == 2*x+1 != (x+1)^2。假设结果表达式是二阶方程?呵呵,真是太邪恶了:)。无论如何,正确的定义是#define SQUARE(a) ((a)*(a))

标签: matlab loops


【解决方案1】:

语句for i=1:m 将数组1:m 分配给运算符在循环期间将采用的值列表。当循环开始执行时会发生这种情况(注意:您可以使用任何数组,它将逐列处理;for letter='abcde';fprintf('%s\n',letter);end 工作正常)。

如果您想调整循环的迭代频率,我建议使用while 循环:

ct = 1;
maxIterations = 100;
success = false;
while ~success
   fprintf('iteration %i/%i\n',ct,maxIterations);
   ct = ct + 1;
   if ct == 2
      maxIterations == 1000;
   end

   if ct > maxIterations
       success = true;
   end
end

【讨论】:

  • 好吧,我试过这个(类似于你的想法)m = 100; i = 0; while(i < m) if (i == 2) m = 1000; end i = i+1; end,它成功了..!!谢谢。
【解决方案2】:

我不是专家,但 for 循环在第一次运行时将 m var 替换为 100,然后它执行从 1 到 100(不是 1 到 m)的循环,并且它不会检查每次运行它是什么 m知道 m 是 100 并且它会一直运行直到达到 100,例如,如果您的脚本是这样的:

<code>
m=100;
for i=1:m (m is 100)
 if(i==2)
  m=1000;
  for i=1:m (m is 1000)
    a=xyz;
   end
  end
end
</code>

【讨论】:

  • 我会说while循环是这里的解决方案。如果 i==2...,您可能不想重复
猜你喜欢
  • 1970-01-01
  • 2017-12-31
  • 1970-01-01
  • 1970-01-01
  • 2020-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多