首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Matlab中的精英主义?

Matlab中的精英主义?
EN

Stack Overflow用户
提问于 2014-01-22 20:22:39
回答 3查看 283关注 0票数 4

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

代码语言:javascript
复制
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,所以我用3代替6,再用3< 8替换83代替a作为a = [7, 5, 4, 3, 3, 3];

如何在Matlab中做到这一点。

尝试

我说了,

代码语言:javascript
复制
if a(i)< a(i+1)
a(i+1) = a(i);
end

plot(a); 

这样我就能得到一个平滑下降的图形。

但我一直有以下错误:

'Subscript indices must either be real positive integers or logicals.'

知道我怎么才能正确地做这件事吗。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-01-22 20:56:54

我认为这适用于所有情况:

代码语言:javascript
复制
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放在循环中。你本可以这样做:

代码语言:javascript
复制
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来避免此类错误的原因。

票数 4
EN

Stack Overflow用户

发布于 2014-01-22 20:43:13

编辑了以处理局部极小值:

代码语言:javascript
复制
a = [7, 5, 4, 3, 6, 8];
[y, i] = findpeaks(-a, 'npeaks', 1) ;
a(i:end)=-y;
plot(a)

情节:

票数 2
EN

Stack Overflow用户

发布于 2014-01-22 21:05:32

不含Robert P.'s answerarrayfun的替代方案

代码语言:javascript
复制
min(triu(repmat(a(:),1,numel(a))) + tril(NaN(numel(a)),-1))
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21293187

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档