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

16 次查看(过去 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 中查找有关 Operating on Diagonal Matrices 的更多信息

产品


版本

R2022b

Community Treasure Hunt

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

Start Hunting!