如何在matlab中实现精英主义?例如,我运行了一个程序,每次运行之后,一个值保存在变量(例如a)中,并且在完成所有运行之后,假设6运行,我的a如下所示
a = [7, 5, 4, 3, 6, 8];如何将精英主义应用于a以结束a作为a = [7, 5, 4, 3, 3, 3];的内容
那就是当我通过a扫描时,我会用我遇到的小数字替换更大的数字。从这个例子来看,通过a,5<7,所以我保留了5,4<5,所以我保留了4,3<4,所以我保留了3,3<6,所以我用3代替6,再用3< 8替换8用3代替a作为a = [7, 5, 4, 3, 3, 3];。
如何在Matlab中做到这一点。
尝试
我说了,
if a(i)< a(i+1)
a(i+1) = a(i);
end
plot(a); 这样我就能得到一个平滑下降的图形。
但我一直有以下错误:
'Subscript indices must either be real positive integers or logicals.'
知道我怎么才能正确地做这件事吗。
发布于 2014-01-22 20:56:54
我认为这适用于所有情况:
b = [a(1), arrayfun(@(n) min(a(1:n)), 2:length(a))]
a =
7 4 3 6 5 2 5
b =
7 4 3 3 3 2 2获取信息:
您最初的想法是正确的,但您忘了将if放在循环中。你本可以这样做:
for ii = 1:length(a)-1
if a(ii)< a(ii+1)
a(ii+1) = a(ii);
end
end您得到错误的原因可能是您没有定义i,因此MATLAB将其解释为虚单位(sqrt(-1))。这也是为什么我在循环中使用ii而不是i来避免此类错误的原因。
发布于 2014-01-22 20:43:13
编辑了以处理局部极小值:
a = [7, 5, 4, 3, 6, 8];
[y, i] = findpeaks(-a, 'npeaks', 1) ;
a(i:end)=-y;
plot(a)情节:

发布于 2014-01-22 21:05:32
不含Robert P.'s answer的arrayfun的替代方案
min(triu(repmat(a(:),1,numel(a))) + tril(NaN(numel(a)),-1))https://stackoverflow.com/questions/21293187
复制相似问题