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

조회 수: 13 (최근 30일)
峻 佐藤
峻 佐藤 2022년 1월 24일
댓글: 峻 佐藤 2022년 1월 26일
値が変化するときの計算値の変化を調べようと思い、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);
よろしくお願いします。

채택된 답변

Hernia Baby
Hernia Baby 2022년 1월 24일
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
Hernia Baby
Hernia Baby 2022년 1월 25일
実は以下の部分でとっています
[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])
峻 佐藤
峻 佐藤 2022년 1월 26일
詳しく解説していただきありがとうございます!
疑問点が解消されました。

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

Hiro Yoshino
Hiro Yoshino 2022년 1월 24일
既に回答が出ているので、私からは 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

카테고리

Help CenterFile Exchange에서 Logical에 대해 자세히 알아보기

제품


릴리스

R2021b

Community Treasure Hunt

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

Start Hunting!