for文でループ変数​を名前に含む変数を用​いて計算したい

16 views (last 30 days)
sato
sato on 7 Aug 2024
Commented: sato on 9 Aug 2024
現在for文を用いて連番のついた変数で計算を行い、結果を配列に格納しようと考えています。
具体的には
%繰り返し処理
for i=1:6
%連番のついた変数で計算を行う処理 以下(i)はループ変数の中身
dataA(i)=(data(i)alpha+data(i)beta)/2
dataB(i)=(data(i)gamma+data(i)delta)/2
%行列の1列i行目、2列i行目にdataAi,dataBiを格納する処理
end
上記のようなイメージで、ループ変数をそのまま用いて"data1alpha"~"data6alpha"のように連番のついた変数で計算を行い、
結果を"dataA1"~"dataA6","dataB1"~"dataB6"として2x6行の行列にそれぞれ格納、というような繰り返し処理を行いたいのですが、このような処理は可能でしょうか?
ご教授頂ければ幸いです。

Accepted Answer

Atsushi Ueno
Atsushi Ueno on 7 Aug 2024
eval 関数で望みの処理を実装可能ですが、これは推奨されない方法です。
clear
for i = 1:6
eval("data" + i + "alpha = 0;"); % サンプルデータの準備
eval("data" + i + "beta = 0;"); % サンプルデータの準備
eval("data" + i + "delta = 0;"); % サンプルデータの準備
eval("data" + i + "gamma = 0;"); % サンプルデータの準備
%連番のついた変数で計算を行う処理 以下(i)はループ変数の中身
eval("dataA" + i + " = (data" + i + "alpha + data" + i + "beta) / 2;");
eval("dataB" + i + " = (data" + i + "gamma + data" + i + "delta) / 2;");
%行列の1列i行目、2列i行目にdataAi,dataBiを格納する処理
eval("out(i,:) = [dataA" + i + ", dataB" + i + "];");
end
who
Your variables are: data1alpha data1gamma data2delta data3beta data4alpha data4gamma data5delta data6beta dataA1 dataA4 dataB1 dataB4 i data1beta data2alpha data2gamma data3delta data4beta data5alpha data5gamma data6delta dataA2 dataA5 dataB2 dataB5 out data1delta data2beta data3alpha data3gamma data4delta data5beta data6alpha data6gamma dataA3 dataA6 dataB3 dataB6
  2 Comments
Atsushi Ueno
Atsushi Ueno on 7 Aug 2024
配列を扱うべきですね。
clear
abdg = zeros(6,4); % サンプルデータの準備
for i = 1:6
out(i,:) = [(abdg(i,1) + abdg(i,2)) / 2, (abdg(i,3) + abdg(i,4)) / 2];
end
whos
Name Size Bytes Class Attributes abdg 6x4 192 double i 1x1 8 double out 6x2 96 double
sato
sato on 9 Aug 2024
ご回答ありがとうございます。参考にさせていただきます。

Sign in to comment.

More Answers (0)

Categories

Find more on Operating on Diagonal Matrices in Help Center and File Exchange

Products


Release

R2022b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!