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

5 次查看(过去 30 天)
sato
sato 2024-8-7
评论: sato 2024-8-9
現在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行の行列にそれぞれ格納、というような繰り返し処理を行いたいのですが、このような処理は可能でしょうか?
ご教授頂ければ幸いです。

采纳的回答

Atsushi Ueno
Atsushi Ueno 2024-8-7
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 个评论
Atsushi Ueno
Atsushi Ueno 2024-8-7
配列を扱うべきですね。
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 2024-8-9
ご回答ありがとうございます。参考にさせていただきます。

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 ループと条件付きステートメント 的更多信息

产品


版本

R2022b

Community Treasure Hunt

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

Start Hunting!