-2

良い一日、

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

何か案は?

4

3 に答える 3

2

水晶玉を多用する。var1、var2 などの名前を動的に生成したいようです。そうしないでください。このように変数に名前を付ける利点はほとんどありません。代わりに cell 配列を使用します。

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

あなただけを使用できるように:

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

中括弧に注意してください。

変数がすべて同じサイズである場合は、配列スライスを使用することをお勧めします。 var(:, i)またはvar(:,:,:,i)、たとえば

于 2013-05-31T20:27:39.557 に答える
0

成功した答えを持つ同様の質問がありました: Matlab の文字列を使用した foreach ループ

おそらく、{} でセル配列構文を使用します。

for i = {var1,var2,var3}
a(j) = i + 10;
j = j + 1;
end
于 2013-05-31T19:29:45.173 に答える
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
于 2013-05-31T21:01:36.847 に答える