semeng 发表于 2008-4-30 09:37

这个方程的最大值坐标怎么找?

图形生成代码如下:
      x=0:0.5:60;y=(0:0.5:60)';
      X=ones(size(y))*x;
      Y=y*ones(size(x));
      Z=(11/10)*abs(Y.^2.*X.^2.*(exp(-4)-exp(-4.8./(5*X.^2+5*Y+12))).^2./(Y.^4+2*Y.*X+X+eps));
      surf(X,Y,Z)
      grid on
我现在想确定最高点的坐标值(x,y,Z),搜索了半天还是没有结果,
在震动论坛上有人说用下面的代码,可惜不对,贴出来仅供参考。
      =max(Z);
      for ii=1:length(I)
      disp(['(x, y)=', '(', num2str(x(I(ii))), ',', num2str(y(I(ii))), ')']);
      end

问题还没有解决,希望好心人提供帮助。最好不要说什么help find。
有人提示用fmincon,将方程转化为非线性最优化问题,可是这个我不会,希望大侠写出详细的代码

laughzha 发表于 2008-4-30 10:16

你的Z是一个矩阵,所以上面那个代码错了。你用下面这个找最大值
=find(Z==max(max(Z)));
找到是K=9,I=121。这个数字代表的是你Z矩阵第9行第121列的数值76.667。
知道最大值的位置之后找横坐标应该不是难事。

semeng 发表于 2008-4-30 10:59

这个最大值很好确定,我现在就是要确定这个最大值的坐标。
如果你觉得很好找,为什么不把完整的代码贴出来

laughzha 发表于 2008-4-30 13:12

原帖由 semeng 于 2008-4-30 10:59 发表 http://www.chinavib.com/forum/images/common/back.gif
这个最大值很好确定,我现在就是要确定这个最大值的坐标。
如果你觉得很好找,为什么不把完整的代码贴出来

x=0:0.5:60;y=(0:0.5:60)';
X=ones(size(y))*x;
Y=y*ones(size(x));
Z=(11/10)*abs(Y.^2.*X.^2.*(exp(-4)-exp(-4.8./(5*X.^2+5*Y+12))).^2./(Y.^4+2*Y.*X+X+eps));
surf(X,Y,Z)
grid on
=find(Z==max(max(Z)));
for ii=1:length(I)
   disp(['(X, Y)=', '(', num2str(X(K(ii),I(ii))), ',', num2str(Y(K(ii),I(ii))), ')']);
end
我没给你完整程序,是希望你能去思考,而不只是指望别人给你完整程序去用.
你的问题很简单,其实以前那个朋友已经给你指出了问题解决的路子,只要稍微思考一下就能解决.
我估计他是直接给你写出了程序,而懒得去matlab里运行.只是他没考虑到你的Z是一个矩阵.他以为是一个数组.

[ 本帖最后由 laughzha 于 2008-4-30 13:14 编辑 ]

semeng 发表于 2008-4-30 13:33

num2str(X(K(ii),I(ii))),
能具体的解释一下吗?

laughzha 发表于 2008-4-30 13:56

原帖由 semeng 于 2008-4-30 13:33 发表 http://www.chinavib.com/forum/images/common/back.gif

能具体的解释一下吗?

将数字转化为字符函数.
请help num2str或者doc num2str

sogooda 发表于 2008-4-30 16:07

原帖由 semeng 于 2008-4-30 13:33 发表 http://www.chinavib.com/forum/images/common/back.gif

能具体的解释一下吗?

请参阅本版置顶帖,注意学习matlab帮助的用法。

aiguo 发表于 2008-5-4 09:12

回复 4楼 的帖子

我以前也遇到过相同的问题,不过和现在的有点不同:我的目的就是要找max(Z)这个矩阵中每一个值(相对我研究的问题,这个矩阵中的每一个值也是最大的,要画出max(Z)对应的轨迹)对应的x和y,该如何办,请指点

aiguo 发表于 2008-5-4 09:23

回复 4楼 的帖子

不需要循环吧,直接就可呀
=find(Z==max(max(Z)));
disp(['(X, Y)=', '(', num2str(X(K,I)), ',', num2str(Y(K,I)), ')']);

sogooda 发表于 2008-5-4 09:44

原帖由 aiguo 于 2008-5-4 09:23 发表 http://www.chinavib.com/forum/images/common/back.gif
不需要循环吧,直接就可呀
=find(Z==max(max(Z)));
disp(['(X, Y)=', '(', num2str(X(K,I)), ',', num2str(Y(K,I)), ')']);
当最大值不唯一时应该需要吧
页: [1]
查看完整版本: 这个方程的最大值坐标怎么找?