声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1767|回复: 9

[编程技巧] 这个方程的最大值坐标怎么找?

[复制链接]
发表于 2008-4-30 09:37 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
图形生成代码如下:
        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),搜索了半天还是没有结果,
在震动论坛上有人说用下面的代码,可惜不对,贴出来仅供参考。
        [K,I]=max(Z);
        for ii=1:length(I)
        disp(['(x, y)=', '(', num2str(x(I(ii))), ',', num2str(y(I(ii))), ')']);
        end


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

使用道具 举报

发表于 2008-4-30 10:16 | 显示全部楼层
你的Z是一个矩阵,所以上面那个代码错了。你用下面这个找最大值
[K,I]=find(Z==max(max(Z)));
找到是K=9,I=121。这个数字代表的是你Z矩阵第9行第121列的数值76.667。
知道最大值的位置之后找横坐标应该不是难事。

评分

1

查看全部评分

 楼主| 发表于 2008-4-30 10:59 | 显示全部楼层
这个最大值很好确定,我现在就是要确定这个最大值的坐标。
如果你觉得很好找,为什么不把完整的代码贴出来
发表于 2008-4-30 13:12 | 显示全部楼层


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
[K,I]=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 编辑 ]

评分

1

查看全部评分

 楼主| 发表于 2008-4-30 13:33 | 显示全部楼层
num2str(X(K(ii),I(ii))),

能具体的解释一下吗?
发表于 2008-4-30 13:56 | 显示全部楼层
原帖由 semeng 于 2008-4-30 13:33 发表

能具体的解释一下吗?


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

评分

1

查看全部评分

发表于 2008-4-30 16:07 | 显示全部楼层
原帖由 semeng 于 2008-4-30 13:33 发表

能具体的解释一下吗?


请参阅本版置顶帖,注意学习matlab帮助的用法。
发表于 2008-5-4 09:12 | 显示全部楼层

回复 4楼 的帖子

我以前也遇到过相同的问题,不过和现在的有点不同:我的目的就是要找max(Z)这个矩阵中每一个值(相对我研究的问题,这个矩阵中的每一个值也是最大的,要画出max(Z)对应的轨迹)对应的x和y,该如何办,请指点
发表于 2008-5-4 09:23 | 显示全部楼层

回复 4楼 的帖子

不需要循环吧,直接就可呀
[K,I]=find(Z==max(max(Z)));
disp(['(X, Y)=', '(', num2str(X(K,I)), ',', num2str(Y(K,I)), ')']);
发表于 2008-5-4 09:44 | 显示全部楼层
原帖由 aiguo 于 2008-5-4 09:23 发表
不需要循环吧,直接就可呀
[K,I]=find(Z==max(max(Z)));
disp(['(X, Y)=', '(', num2str(X(K,I)), ',', num2str(Y(K,I)), ')']);

当最大值不唯一时应该需要吧
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-12-11 15:55 , Processed in 0.078048 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表