在MATLAB中动态更改for循环

art*_*eam 8 matlab for-loop dynamic

设置for循环时,我希望能够遍历未知数量的参数.

通过输入文件,用户可以根据需要设置尽可能多的循环参数,并且我希望能够循环遍历它们,而不管它们设置的参数数量.循环输入示例:(请注意,我的输入也可以是字符串和数字组合的列表)

情况1:

  • 重量45000:5000:75000
  • 海拔10000
  • 速度0.2:0.1:0.9

案例2:

  • 重量30000
  • 海拔高度1000:1000:10000
  • 襟翼10,20
  • 温度-10:1:10

列表的长度可以不同,并且可以包括0-15个变量中的任何位置.我知道解决方法,但是使用一堆嵌套的for循环来执行此操作非常麻烦.我正在寻找一种方法来设置一个方法,可能使用递归,其中代码将建立一个适当的for循环系统,无论涉及多少参数,并仍然跟踪这些变量.

Joh*_*ohn 1

递归。

您还没有对此提出任何速度要求。这个答案很慢,内存使用率很低,但却是这个想法的最简单的实现。存在许多更好的实现,它们更复杂,使用更少的内存,并且速度更快。取决于你需要内环有多紧......

parms.weight = [45000:5000:75000];
parms.alt    = 10000;
parms.Speed  = 0.2:0.1:0.9;
Run Code Online (Sandbox Code Playgroud)

然后,定义你的模拟器,如下所示:

function result = simulation(parms)
    fieldNames = fieldnames(parms)
    result = [];
    for ix = 1 : numel(fieldNames)
       if 1 < numel(parms.(fieldNames{ix})) 
           list = parms.(fieldNames{ix});
           for jx = 1 : numel(list)
                tmpParms = parms;
                tmpParms.(fieldNames{ix}) = list(jx);
                tmpResult = simulation(tmpParms);
                result = [result; tmpResult];
           end
           return;
        end
     end

     if 0 == numel(result)
         % Do the real simulation here.
     end
Run Code Online (Sandbox Code Playgroud)

  • 我经常遇到这个问题,但出于某种原因,你的问题激发了我一种全新的思考方式。很好的问题。 (2认同)
  • 您的代码有问题,到目前为止我得到了很多组合。只需尝试“struct('a',[1 2],'b',[3],'c',[4,5],'e',[6,7])`。预计会有 6 个模拟调用,但它会生成更多调用。 (2认同)