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搭建简单的仿真模型

MATLAB /simulink中, sin导数后为啥cos(0)不等于1? 结果如图所示:

Simulink、matlab 函数

求助:matlab/simulink中memory模块的详细使用方法!

MATLAB/Simulink仿真时出现下边错误 这是哪里出错了啊 不太懂 求大神指点一二 不胜感激

MATLAB/simulink中,将示波器的数据保存数据在workspace里面,怎样用plot的方法打印图形。