Matlab中的精英主义?

时间:2014-01-22 20:22:40

标签: matlab plot

我如何在matlab中实现精英主义?例如,我运行一个程序,每次运行后,一个值保存在一个变量中,并且在完成所有运行之后,比如6次运行,我有a如下

a = [7, 5, 4, 3, 6, 8];

如何在a上应用精英主义,以使a的内容为a = [7, 5, 4, 3, 3, 3];

那是当我扫描a时,我将用我遇到的小号替换更大的号码。从示例中,经过a5<7扫描后,我保持54<5,所以我保留43<4,所以我保留33<6,因此我将6替换为3,然后再替换3< 8,因此我将8替换为3 } {结束aa = [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.'

知道如何正确地做到这一点。

3 个答案:

答案 0 :(得分:4)

我相信这应该适用于所有情况:

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的原因,以避免此类错误。

答案 1 :(得分:2)

已编辑以使用本地最低标准:

a = [7, 5, 4, 3, 6, 8];
[y, i] = findpeaks(-a, 'npeaks', 1) ;
a(i:end)=-y;
plot(a)

情节:

a plotted

答案 2 :(得分:2)

Robert P.'s answer的替代arrayfun

min(triu(repmat(a(:),1,numel(a))) + tril(NaN(numel(a)),-1))