Matlab/simulink:一个数组 不用排序的方法 找出它当中第K大的数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Matlab/simulink:一个数组 不用排序的方法 找出它当中第K大的数相关的知识,希望对你有一定的参考价值。
高手请进!!完成继续给分!!会的速度点,小弟急啊!
设置个标志矩阵,先赋值都为1,做k次循环。每次循环,各元素和对应的标志位相乘,找最大的元素和对应位置,并把对应位置的标志位置零,再下次进行下次循环。第k次循环找到的最大数就是第k大的数。(ps 本来不想贴具体语句的,还是好人做到底吧,呵呵)
a = [2 6 4 3 1 9 5 7 0 8];
flag = ones(size(a));
k = 5;
for j=1:k
[data i] = max(a.*flag);
flag(i) = 0;
end 参考技术A
推荐使用unique 函数,具体算法为:
用unique找出所有的不重复数值,
然后得到的所有的不重复数值会自动由小到大显示,
最后寻找出倒数第K个值则为结果
范例:
假如有一个列向量A,那么第K的数值为KAnswer,代码如下:
unimat = unique(A);
KAnswer = unimat(end-K+1);
参考技术B a = floor(rand(1,10) * 10)a =
4 4 1 0 2 7 4 6 4 0
>> find(a==0)
ans =
4 10
>> find(a==7)
ans = 6 你懂的 啊B哥本回答被提问者采纳 参考技术C 循环去掉k个最大的追问
能给个具体的语句吗
Matlab/Simulink:子系统的 linmod 失败
【中文标题】Matlab/Simulink:子系统的 linmod 失败【英文标题】:Matlab/Simulink: linmod fails for subsystem 【发布时间】:2015-01-12 21:23:51 【问题描述】:给定一个简单的 Simulink 模型 Model
,它有一个输入、一个输出和一个介于两者之间的传递函数,我可以使用 linmod('Model')
来获得线性状态空间模型。但是,当我将相同的模型放入 Model
下名为 Subsystem
的子系统中并发出 linmod('Model/Subsystem')
时,我收到以下错误:
Error using dlinmod (line 147)
Subsystem block does not have a parameter named 'SimulationStatus'
Error in linmod (line 59)
[varargout1:max(1,nargout)] = dlinmod(model, Ts, varargin:, Args);
我正在使用 Matlab/Simulink R2014a。如何解决这个问题?
【问题讨论】:
【参考方案1】:linmod
仅适用于 Simulink 模型,不适用于子系统。线性化的输入和输出点对应于模型顶层的 Inports 和 Outports 模块。
如果你有Simulink Control Design,你应该使用linearize
,它更加灵活和强大(或等效的linear analysis tool)。
【讨论】:
以上是关于Matlab/simulink:一个数组 不用排序的方法 找出它当中第K大的数的主要内容,如果未能解决你的问题,请参考以下文章
MATLAB /simulink中, sin导数后为啥cos(0)不等于1? 结果如图所示:
求助:matlab/simulink中memory模块的详细使用方法!