怎么用matlab生成随机数,排序,取数排序前的位置?

如题所述

clear
Num=input('please
input
Num=');
M=input('please
input
M=');
N=input('please
input
N=');
%我也不知道你的Num,M,N是什么,你自己输入吧!
A=5*rand(1,Num);%产生Num个随机数
[B,Ix]=sort(A,'descend');
%对产生的随机数按由大到小的顺序排序,并取随机数在排序前的位置Ix
x=floor(Ix./N);%将排序前的位置除以N
所得商作为横坐标x
y=rem(Ix,N);%所得余数作为纵坐标y
I=Ix(1:M);%取排序后前M个随机数在排序前的位置
X=x(1:M);
Y=y(1:M);
%I,X,Y为你所求!
%以下是你复制所有上面代码后运行举例!
please
input
Num=10
please
input
M=5
please
input
N=4
>>
I
I
=
9
6
1
7
8
>>
X
X
=
2
1
0
1
2
>>
Y
Y
=
1
2
1
3
0
温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-04-18
楼主你好!
产生一组平均分布(产生了1440个):
r=unifrnd(0,1:1440)
产生一组正态分布:(其中,取mu=720,sigema=240)
r=normrnd(720,240,[1,6])(其中,方括号的6代表了生成6个,您需要多少个,就改成多少个好啦)
上面都是我刚调试过的,如果还有问题请联系我哈~
希望您满意
补充:
楼主,我根据您的要求重新写了一下程序,
a=rand(1)
if(a<0.2&a>0)
r=(normrnd(540,5))
end
if(a>=0.2&a<0.4)
r=(normrnd(780,5))
end
if(a>=0.4)
r=(normrnd(1200,5))
end
x=int32(r)
x就是所需的结果,a是用于您指定的出现概率的。
里面并没有涉及您的取值范围。这是因为在6*方差的范围内,正态分布的取值基本已经可以涵盖全部的取值了(99.8%的样子吧)
所以基本没可能出在这个规定范围之外。
希望您满意~
相似回答