次のような10個の変数を作成すると仮定します。
_x1 = 1;
x2 = 2;
x3 = 3;
x4 = 4;
.
.
xi = i;
_
これは、私がやろうとしていることの簡易版です。基本的には、これらの変数を自動化された方法で作成して、コード行を節約したいだけです。 Matlabで変数名を構築する可能性はありますか?私の例のパターンは["x", num2str(i)]
です。しかし、その名前の変数を作成する方法を見つけることはできません。
eval でできますが、実際にはnotする必要があります
eval(['x', num2str(i), ' = ', num2str(i)]); %//Not recommended
むしろセル配列を使用します。
x{i} = i
また、このような場合にはセル配列または構造体を使用することを強くお勧めします。パフォーマンスがさらに向上すると思います。
本当にそうする必要がある場合、ダンはその方法を教えました。しかし、genvarname
関数もポイントしたいと思います。文字列が有効な変数名であることを確認します。
編集:genvarnameはコアmatlabの一部であり、統計ツールボックスの一部ではありません
for k=1:10
assignin('base', ['x' num2str(k)], k)
end
それは長い間遅れているが、私はちょうど別の答えを追加したかった。
関数genvarnameはこれらの場合にぴったりです
tmp構造体配列で使用する場合、eval cmdは必要ありません
このリンクの例4は、その方法です http://www.mathworks.co.uk/help/matlab/ref/genvarname.html
for k = 1:5
t = clock;
pause(uint8(Rand * 10));
v = genvarname('time_elapsed', who);
eval([v ' = etime(clock,t)'])
end
ではごきげんよう
エイアル
他の誰かが興味を持っている場合、ダンの答えからの正しい構文は次のようになります。
eval(['x', num2str(i), ' = ', num2str(i)]);
私の質問にはすでに間違った構文が含まれていたので、それは私のせいです。
シミュレーション中に構造体(または私が推測するセル配列)をワークスペースから参照できない場合、Simulinkブロックの構造体を参照できないため、このようなものが必要でした。
とにかく、私にとってはこれが最もうまくいった
assignin('base',['string' 'parts'],values);