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

4 vues (au cours des 30 derniers jours)
峻 佐藤
峻 佐藤 le 24 Jan 2022
Commenté : 峻 佐藤 le 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);
よろしくお願いします。

Réponse acceptée

Hernia Baby
Hernia Baby le 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 commentaires
Hernia Baby
Hernia Baby le 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])
峻 佐藤
峻 佐藤 le 26 Jan 2022
詳しく解説していただきありがとうございます!
疑問点が解消されました。

Connectez-vous pour commenter.

Plus de réponses (1)

Hiro Yoshino
Hiro Yoshino le 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

Catégories

En savoir plus sur Logical dans Help Center et File Exchange

Produits


Version

R2021b

Community Treasure Hunt

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

Start Hunting!