在 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
对于最小值,它的想法不一样,我也没有得到最大值的确切值
你可以简单地使用像
这样的东西
max(max(U))
这将为您的二维矩阵找到最大值。
对于最小值,您只需将最大值替换为最小值。
如上所述,要简单地找到采样函数的 maximum/minimum,请使用 m = min(U(:)); M = max(U(:))
。为了能够绘制它们,您缺少的是为您提供这些值的坐标。为此,您将需要 min/max 函数的 second output,它会为您提供极端情况发生的索引。
一个可能的实现(可能不是最好的)是(可能工作不完美,我手头没有 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)
其余不变
我下面有这个函数,我需要计算这个函数 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
对于最小值,它的想法不一样,我也没有得到最大值的确切值
你可以简单地使用像
这样的东西max(max(U))
这将为您的二维矩阵找到最大值。 对于最小值,您只需将最大值替换为最小值。
如上所述,要简单地找到采样函数的 maximum/minimum,请使用 m = min(U(:)); M = max(U(:))
。为了能够绘制它们,您缺少的是为您提供这些值的坐标。为此,您将需要 min/max 函数的 second output,它会为您提供极端情况发生的索引。
一个可能的实现(可能不是最好的)是(可能工作不完美,我手头没有 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)
其余不变