プログラムのパラメー​タをforで変更し実​行した後値を格納した​い

お疲れ様です.
表題の件ですが,現在シミュレーションプログラムを書いていて,パラメータを変更し繰り返し実行し値を格納するという作業を行いたいのですが,以下のコードでは行列の形式が合わないというエラーを吐きます.
vo_vector = zeros(3,10);
for i = 1:10
w = [0 0 i]';
Spin_Top_Sim_1
vo_vector(:,i) = vo;
end
Spin_Top_Sim_1というのが件のシミュレーションのプログラムです.w=[0 0 i]とし,ループを進めるごとに別のパラメータをSpin_Top_Sim_1に与えプログラムを実行すると毎回異なるvoを出力します.そのvoをvo_vector(3×10行列)に繰り返し回数の10回分格納したいのですが,どのようにループを書き換えればよいでしょうか.ご教授お願いします.

5 Comments

Atsushi Ueno
Atsushi Ueno on 24 Dec 2021
Edited: Atsushi Ueno on 24 Dec 2021
voが列ベクトル(n×1行列)であれば、vo_vector(n×10行列)に追加していく事が出来ます。
size(vo)と入力すると何×何行列と表示されますか?
vo = [1;2;3]; % これは正しいデータの例。本来はSpin_Top_Sim_1の出力
size(vo)
ans = 1×2
3 1
Shumpei Hosokawa
Shumpei Hosokawa on 25 Dec 2021
voに関しては,3x1の列ベクトルになっています.わたくしのコードでは,位置 2 のインデックスが無効です。配列インデックスは正の整数または logical 値でなければなりません。とのエラーを吐いています.
データ例で埋めてもエラーは出ないので、Spin_Top_Sim_1がiの値を変更していると断定できます。
vo_vector = zeros(3,10);
for i = 1:10
w = [0 0 i]';
vo = [1 2 3]'; % これは正しいデータの例。本来はSpin_Top_Sim_1の出力
vo_vector(:,i) = vo;
end
vo_vector
vo_vector = 3×10
1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3
ありがとうございます.iではなくkでループを作ってみたところSpin_Top_Sim_1にwの値をkで変化させSpin_Top_Sim_1からwの値ごとに異なるvoを出力するようにはなりました.
vo_vector = zeros(3,10);
for k = 1 : 10
w = [0 0 k]';
Spin_Top_Sim_1
vo_vector(:,k) = vo
end
しかし,出力した結果をvo_vector(:,k)で3x10行列にまとめたいのですが,
vo_vector =
0 0 4.1435
0 0 -2.5313
0 0 23.7175
上のように,3列目にのみ値が入りループの度に3列目の値だけ更新されてしまいます.k=1の時には1列目,k=2の時には2列目...と値が入るようにしたいのですがどのようにすればよいでしょうか.
Atsushi Ueno
Atsushi Ueno on 25 Dec 2021
それもSpin_Top_Sim_1の処理がなければ有り得ない動作なので、Spin_Top_Sim_1がkの値を変更していると断定できます。

Sign in to comment.

 Accepted Answer

Shumpei Hosokawa
Shumpei Hosokawa on 29 Dec 2021

0 votes

Spin_Top_Sim_1でkが値を変更していることが確認できました.またforループを書き直して実行したのですが,値を格納したところループは回るのですが,次のような結果になりました.毎回の値は記録されるのですがそれ以外の列が0列になっています.
count_w = 30; % 1 ~ 30
uLINK_1(1).w = [0 0 count_w]'; % 条件をSpin_Top_Sim_1に与える,本来は当該プログラムの初期条件
vo_measure1 = zeros(3,5); % 空行列
for l= 1:5
psi = pi/180 * l;
theta = pi/180 * l;
phi = pi/180 * l;
Spin_Top_Sim_1
vo_measure1(:,l) = uLINK_1(1).vo
end
上の通りのプログラムを書きましたところ,結果が以下の通りになりました.
vo_measure1 =
1.0e+03 *
0 0 0 0 2.4086
0 0 0 0 1.0186
0 0 0 0 0.2107
上の結果はl = 5のときで5列目にのみデータが入ってしまいました.l = 4の時には4列目にのみデータが入ってしまいます.forループでこのように値が入る場合どこを修正すればよいでしょうか.これもSpin_Top_Sim_1の処理によるものだと考えられますでしょうか.例えばSpin_Top_Sim_1内の記述でuLINK_1(1).voを初期条件として用いているなどによりますでしょうか.

1 Comment

Atsushi Ueno
Atsushi Ueno on 29 Dec 2021
それもSpin_Top_Sim_1の処理がなければ有り得ない動作なので、Spin_Top_Sim_1がvo_measure1の値を変更(初期化)していると断定できます。

Sign in to comment.

More Answers (0)

Categories

Products

Release

R2021a

Community Treasure Hunt

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

Start Hunting!