forループで1ルー​プごとの最大値をプロ​ットするにはどうすれ​ばよいですか?

4 Ansichten (letzte 30 Tage)
峻 佐藤
峻 佐藤 am 24 Jan. 2022
Kommentiert: 峻 佐藤 am 26 Jan. 2022
値が変化するときの計算値の変化を調べようと思い、forループを使ってコードを組んでいます。
以下のようなコードの場合、
①A=0のときのEの最大値、A=1のときのEの最大値……というように1回ループするごとに得られるEの値の中から、最大値だけを取り出し、AとE最大値だけの2次元グラフを作りたいのですが、どうすればよいでしょうか?
②A=0,A=1......のそれぞれでEが最大になる時のBとCの値も取得したいのですがどうすればよいですか?
px=[];
py=[];
pz=[];
pa=[];
for A=0:1:30
for B=1:5:45
for C=-45:5:45
D=B/C;
E=sind(A)+sind(D);
px=[px,A];
py=[py,B];
pz=[pz,C];
pa=[pa,E];
end
end
end
scatter(px,pa);
よろしくお願いします。

Akzeptierte Antwort

Hernia Baby
Hernia Baby am 24 Jan. 2022
Aについてはmaxで示し、maxAに格納していきます
Dが共通なので先に計算しています
maxAの時のインデックスを格納し、BとCにidx1,idx2として返しています
clear,clc,close all;
A = 0:1:30;
B = 1:5:45;
C = -45:5:45;
for jj = 1:length(B)
for kk = 1:length(C)
D(jj,kk) = B(jj)/C(kk);
end
end
E = zeros(size(D));
for ii = 1:length(A)
E=sind(A(ii))+sind(D);
maxA(ii) = max(max(E));
[idx1(ii),idx2(ii)] = find(E==maxA(ii));
end
scatter(A,maxA)
  4 Kommentare
Hernia Baby
Hernia Baby am 25 Jan. 2022
実は以下の部分でとっています
[idx1(ii),idx2(ii)] = find(E==maxA(ii));
clear,clc,close all;
A = 0:1:30;
B = 1:5:45;
C = -45:5:45;
[BB,CC]=meshgrid(B,C);
DD=BB./CC;
D = DD';
E = zeros(size(D));
for ii = 1:length(A)
E=sind(A(ii))+sind(D);
maxA(ii) = max(max(E));
[idx1(ii),idx2(ii)] = find(E==maxA(ii));
end
例として最後だけプロットしてみますか
@Hiro さんのコードを応用します
E = E'; % D=DD'の影響です
surf(CC,BB,E,'Facealpha',0.3);
title(sprintf("A=%d",A(end)))
hold on
B_maxA = B(idx1);
C_maxA = C(idx2);
scatter3(C_maxA(end),B_maxA(end),maxA(end),'r','filled')
xlabel 'C'
ylabel 'B'
zlabel 'E'
view([25.679 44.382])
峻 佐藤
峻 佐藤 am 26 Jan. 2022
詳しく解説していただきありがとうございます!
疑問点が解消されました。

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Hiro Yoshino
Hiro Yoshino am 24 Jan. 2022
既に回答が出ているので、私からは MATLAB っぽいやり方を紹介します。
LiveEditor で実行すると添付にあるような動画を作製できます。
% データ
B=1:5:45;
C=-45:5:45;
% Meshgrid を作製します
[Bmesh,Cmesh] = meshgrid(B,C);
D = (Bmesh./Cmesh);
sindD = sind(D);
% A に沿ってループ
for A=0:1:30
E = sindD + sind(A);
surf(Bmesh,Cmesh,E);
title(sprintf("A=%d",A))
drawnow;
end

Kategorien

Mehr zu Logical finden Sie in Help Center und File Exchange

Produkte


Version

R2021b

Community Treasure Hunt

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

Start Hunting!