gpt4 book ai didi

matlab - 在 MATLAB 中动态更改 for 循环

转载 作者:太空宇宙 更新时间:2023-11-03 19:24:49 27 4
gpt4 key购买 nike

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

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

Case 1:

  • Weight 45000:5000:75000
  • Altitude 10000
  • Speed 0.2:0.1:0.9

Case 2:

  • Weight 30000
  • Altitude 1000:1000:10000
  • Flaps 10, 20
  • Temperature -10:1:10

列表的长度可以不同,可以包含 0-15 个变量。我知道解决方法,但是使用一堆嵌套的 for 循环来执行此操作真的很麻烦。我正在寻找一种方法来设置一个方法,可能使用递归,其中代码将设置一个适当的 for 循环系统,而不管涉及的参数数量如何,并且仍然跟踪这些变量。

最佳答案

代码生成解决方案

好吧,您已经有了很多不错的解决方案。我只会在那里扔一个涉及代码生成的。 MATLAB 并没有真正使用这些工具,但您可以使用一些循环和 fprintf 来模拟它。这是我的代码生成脚本:

s = struct() ;
s.weight = 45000:5000:75000 ;
s.altitude = 10000 ;
s.engine = {'ge','rolsroyce'} ;

h = fopen('thisrun.m','w+') ;

mydisp = @(varargin)disp(transpose(varargin(:))) ; % dummy function body

vars = fields(s) ;
nv = numel(vars) ;

for ii = 1:nv
if isnumeric(s.(vars{ii}))
lb = '(' ;
rb = ')' ;
else
lb = '{' ;
rb = '}' ;
end
fprintf(h,'for i%g = 1:numel(s.(vars{%g})) \n',ii,ii) ;
fprintf(h,'i%gval = s.(vars{%g})%si%g%s ; \n',ii,ii,lb,ii,rb) ;
end

fprintf(h,'mydisp(') ;
for ii = 1:numel(vars)
fprintf(h,'i%gval',ii) ;
if ii<nv
fprintf(h,',') ;
end
end
fprintf(h,') ; \n') ;

for ii = 1:nv
fprintf(h,'end \n') ;
end

fclose(h) ;
run thisrun.m

生成的代码(thisrun.m):

for i1 = 1:numel(s.(vars{1}))
i1val = s.(vars{1})(i1) ;
for i2 = 1:numel(s.(vars{2}))
i2val = s.(vars{2})(i2) ;
for i3 = 1:numel(s.(vars{3}))
i3val = s.(vars{3}){i3} ;
mydisp(i1val,i2val,i3val) ;
end
end
end

运行生成代码的结果:

>>
[45000] [10000] 'ge'

[45000] [10000] 'rolsroyce'

[50000] [10000] 'ge'

[50000] [10000] 'rolsroyce'

[55000] [10000] 'ge'

[55000] [10000] 'rolsroyce'

[60000] [10000] 'ge'

[60000] [10000] 'rolsroyce'

[65000] [10000] 'ge'

[65000] [10000] 'rolsroyce'

[70000] [10000] 'ge'

[70000] [10000] 'rolsroyce'

[75000] [10000] 'ge'

[75000] [10000] 'rolsroyce'

代码生成需要时间,但如果您需要多次运行该文件,它可能仍然是一个有效的解决方案。

关于matlab - 在 MATLAB 中动态更改 for 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35140023/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com