[英]Find minimum and maximum of a two variable function on fixed interval in Matlab, and plotting those points in the same graph with the function
我在下面有此函數,我需要計算此函數U的最小值和最大值,並將該函數的最大值和最小值繪制在3D圖形中。
如何編寫代碼?
[x,y]=meshgrid(0:0.1:pi,0:0.1:2*pi);% x-theta,y-phi
a=90.7;b=36.2;c=12.9;
E=1.44;
U=-E.^2*(a.*sin(x).^2.*cos(y).^2+b.*sin(x).^2.*sin(y).^2+c.*cos(x).^2);
meshc(x,y,U)
xlabel('\theta')
ylabel('\Phi ')
zlabel('U')
我很累這種找到最大值的方法,但是我不知道我是否正確
max(U,[],1) %max row-wise
max(U,[],2) %max column-wise
對於最小值,它不起作用相同的想法,也沒有得到最大值的確切值
如上所述,要簡單地找到采樣函數的最大值/最小值,請使用m = min(U(:)); M = max(U(:))
m = min(U(:)); M = max(U(:))
。 為了能夠繪制它們,您缺少的是為您提供這些值的坐標。 為此,您將需要min / max函數的第二個輸出 ,這將為您提供發生極端情況的索引。
一個可能的實現(可能不是最好的實現)(可能無法完美運行,我手邊沒有matlab):
[Ms,I] = max(U,[],1); %row-wise maximum and their indexes
[M,j] = max(Ms); %maximum among all rows and its index
現在, i = I(j)
是最大值的位置。 您最終可以執行plot3(x(i,j),y(i,j),U(i,j),'ro')
在最大值位置或任何您喜歡的位置繪制一個大紅色圓圈。
注意:我可能會將其向后移動,並且可能是x(j,i)
,依此類推。 只是檢查一下。 當然,您可以為min()
做同樣的事情。
編輯:我只記得ind2sub函數,它可以解決所有問題。 遵循上面使用的語法:
[M,ind] = max(U(:));
[i,j] = ind2sub(size(U),ind)
其余的保持不變。
您可以簡單地使用類似
max(max(U))
這將為您的2D矩陣找到最大值。 對於最小值,您只需將max替換為min。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.