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

16 visualizaciones (últimos 30 días)
sato
sato el 7 de Ag. de 2024
Comentada: sato el 9 de Ag. de 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行の行列にそれぞれ格納、というような繰り返し処理を行いたいのですが、このような処理は可能でしょうか?
ご教授頂ければ幸いです。

Respuesta aceptada

Atsushi Ueno
Atsushi Ueno el 7 de Ag. de 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 comentarios
Atsushi Ueno
Atsushi Ueno el 7 de Ag. de 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 el 9 de Ag. de 2024
ご回答ありがとうございます。参考にさせていただきます。

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Operating on Diagonal Matrices en Help Center y File Exchange.

Etiquetas

Productos


Versión

R2022b

Community Treasure Hunt

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

Start Hunting!