早教吧 育儿知识 作业答案 考试题库 百科 知识分享

MATLAB为什么无法调用这个M文件呢?任意排列问题.MATLAB提供的函数randperm(n),可以产生一个从整数1到整数n的任意排列.编写一个函数来实现randperm(n)函数的功能,即给出一个由任意数组成的行向量

题目详情
MATLAB 为什么无法调用这个M文件呢?
任意排列问题.MATLAB提供的函数randperm(n),可以产生一个从整数1到整数n的任意排列.编写一个函数来实现randperm(n)函数的功能,即给出一个由任意数组成的行向量,然后产生这个行向量元素的任意排列.
function Y=rndprm1(X)
[m,n]=size(X);
if m>1
error('RNDPRM1 accepts as inputs only vectors');
end
Y=[];
l=n;
for i=1:n
k=1+fix(l*rand);
x=X(k);
Y=[Y,x];
X(k)=[];
l=l-1 ;
end
结果就是下面这几种情况
>> Y=rndprm1(5)
Error:File:rndprm1.m Line:1 Column:20
Unexpected MATLAB expression.
>> rndprm1(6)
Error:File:rndprm1.m Line:1 Column:20
Unexpected MATLAB expression.
>> X=7
X =
7
Input argument "X" is undefined.
Error in ==> rndprm1 at 2
[m,n]=size(X);
Error:File:rndprm1.m Line:1 Column:20
Unexpected MATLAB expression.
有发现个问题.重新编写一次后
function Y=rndprm1(X)
%RNDPRM1 用for循环产生一个行向量的任意排列
%RNDPRM1(X)产生行向量X的任意排列
[m,n]=size(X);
if m>1
error('RNDPRM1 accepts as inputs only vectors');
end
Y=[]; %从一个空矩阵开始
l=n; %X的元素个数
for i=1:n
k=1+fix(l*rand); %随机选择Y的下一个元素的位置
x=X(k); %被选择的元素
Y=[Y,x]; %将X添加到Y中
X(k)=[]; %从X中删除x元素
l=l-1 ; %更新X的元素个数
end
这次保存在MATLAB/work文件夹内
>> Y=rndprm1(6)
Y =
6
>> Y=rndprm1(16)
Y =
16
>> rndprm1(16)
ans =
16
>>
万分纠结,好吧,我真的是新学,
▼优质解答
答案和解析
看不懂你写的意思,
function p = randperm(n)
[ignore,p] = sort(rand(1,n));
这是那个函数实现的语句,就是先生成一个一维数组,数组长度为n,大小为0与1之间的任意数,然后排序,randperm输出排序的下标,所以就是任意的排序的1到n的数字.