forループで1ループごとの最大値をプロットするにはどうすればよいですか?
4 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
値が変化するときの計算値の変化を調べようと思い、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);
よろしくお願いします。
0 Kommentare
Akzeptierte Antwort
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
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])
Weitere Antworten (1)
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
0 Kommentare
Siehe auch
Kategorien
Mehr zu Logical finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!