簡體   English   中英

在Matlab中以固定間隔找到兩個變量函數的最小值和最大值,並使用該函數在同一圖中繪制這些點

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM