shuidixn 发表于 2012-4-8 20:46

求高人解释两个关于求极值的程序

这是我在某个地方看到程序
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
谢谢

ChaChing 发表于 2012-4-16 16:06

回复 1 # shuidixn 的帖子

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

高手们喜欢使用简洁语法, 对新手较不易瞭解
建议取数据少点(N=10), 逐步执行并看结果就容易明白了N = 10; aa=randperm(N), plot(aa)
ind1=aa(2:N-1)>aa(1:N-2)
ind2=aa(2:N-1)>aa(3:N)
ind3=(aa(2:N-1)>aa(1:N-2))+(aa(2:N-1)>aa(3:N))
index = find(ind3==2)+1
bb = aa(index);

shuidixn 发表于 2012-4-20 15:53

回复 2 # ChaChing 的帖子

多谢前辈指点
页: [1]
查看完整版本: 求高人解释两个关于求极值的程序