声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1513|回复: 2

[编程技巧] 求高人解释两个关于求极值的程序

[复制链接]
发表于 2012-4-8 20:46 | 显示全部楼层 |阅读模式

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

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

x
这是我在某个地方看到程序
1.----------------------------------hyperelastic 的方法-------------------------------------------------------
N = 100;  
aa=randperm(N);  
index = find(((aa(2:N-1)>aa(1:N-2))+(aa(2:N-1)>aa(3:N)))==2)+1;  
bb = aa(index);  
2.-------------bainhome  的方法-----------------------------------------------------------------------------
a=rand(1,100);   find(diff(sign(diff(a)))>0)+1
第一个程序中的第三行find()求解释一下括号内的,以及第2个程序是什么意思?为什么这两个最后都要+1
谢谢
回复
分享到:

使用道具 举报

发表于 2012-4-16 16:06 | 显示全部楼层
回复 1 # shuidixn 的帖子

1.找出那些点是大於前面及后面的点
2.找出那些点其前后点之差有变号
+1使其对应位置正确

高手们喜欢使用简洁语法, 对新手较不易瞭解
建议取数据少点(N=10), 逐步执行并看结果就容易明白了
  1. N = 10; aa=randperm(N), plot(aa)
  2. ind1=aa(2:N-1)>aa(1:N-2)
  3. ind2=aa(2:N-1)>aa(3:N)
  4. ind3=(aa(2:N-1)>aa(1:N-2))+(aa(2:N-1)>aa(3:N))
  5. index = find(ind3==2)+1  
  6. bb = aa(index);
复制代码
 楼主| 发表于 2012-4-20 15:53 | 显示全部楼层
回复 2 # ChaChing 的帖子

多谢前辈指点
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-12-1 19:06 , Processed in 0.052163 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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