matlab - 在 Matlab 中查找固定间隔上的两个变量函数的最小值和最大值,并将这些点与函数绘制在同一张图中
问题描述
我在下面有这个函数,我需要计算这个函数 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(:))
. 为了能够绘制它们,您缺少的是为您提供这些值的坐标。为此,您将需要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)
其余保持不变。
推荐阅读
- c++ - clang:使用 QHash
而不是 QMap 当 K 是指针时 - python - matplotlib scatterplot 在分类列上获取标记
- angular - 保留在 DOM 中的所有路由的 div
- python - 在 Python 中给出一个与 kwarg 参数同名的参数是不好的做法吗?
- python - Jupyter ipywidgets 框在内容更改后未调整大小
- blockchain - 将使用哪个标准?ERC721 还是 ERC1155?
- visual-studio-code - 我的 vs 代码 UI 发生了什么,它放大了很多
- sql - 根据属性值从 XML 中提取不同的值
- android - 基于意图的 Android 安全漏洞,违反设备和网络滥用政策
- python-3.x - Odoo讨论频道在odoo erp 13中添加新用户时创建