用于循环运行不同的变量

时间:2013-05-31 19:21:36

标签: matlab

美好的一天,

我想在Matlab中执行以下操作:

var1 = 10;
var2 = 15;
var3 = 20;

j = 1;

for i = [var1,var2,var3]
    a(j) = i + 10;
    j = j + 1;
end
clear j;

结果:

a(1) = var1 + 10 = 20
a(2) = var1 + 10 = 25 
a(3) = var1 + 10 = 30

有什么想法吗?

3 个答案:

答案 0 :(得分:2)

大量使用水晶球。您似乎想要动态生成名称var1,var2等。不要。以这种方式命名变量几乎没有优势。改为使用单元格数组:

var{1} = 10;
var{2} = 15;
var{3} = 20;

这样你就可以使用:

for i = 1:length(var)
    a(j) = var{i} + 10;
...

注意大括号。

如果您的变量大小相同,那么使用数组切片会更好。 var(:, i)var(:,:,:,i),例如

答案 1 :(得分:0)

@FloHin和@Peter都提到了使用单元格,这是一个很好的方法,可以帮助你获得有限数量的非标量变量。如果您处理的是包含特定格式的未知数量的此类变量,您可以使用eval函数按需获取当前变量的值:

var1 = 10;
var2 = 15;
var3 = 20;
var4 = 30;
# ...
# more variables following the varN = x pattern

all_variables = who('var*');
num = numel(all_variables);
a = zeros(num, 1);
for i = 1:num
    a(i) = eval(all_variables{i}) + 10;
end

答案 2 :(得分:-1)

有一个类似的问题,答案是成功的:foreach loop with strings in Matlab

可能使用{}:

的单元格数组语法
for i = {var1,var2,var3}
a(j) = i + 10;
j = j + 1;
end