Matlab产生随机数

用randperm(200)可以得1-200的随机排序的行向量A=[111213111112];B=[313233191192];我想让产生的随机行向量中A(i)必须排在... 用randperm(200) 可以得1-200的随机排序的行向量
A=[11 12 13 111 112];
B=[31 32 33 191 192];
我想让产生的随机行向量中A(i)必须排在对应的B(i)之前。

如何进行限制,求指教
展开
 我来答
Carrot_hy
2012-05-01 · TA获得超过1836个赞
知道小有建树答主
回答量:374
采纳率:0%
帮助的人:224万
展开全部
给你个建议,分成两步:1)随机重排A中元素,得向量A';2)利用for循环,将B中元素一一插入到A'中,不过对应的B(i)元素只能插在A(i)元素后面的位置。如此应该就能满足你的要求了。

% ---- 对应函数
function [AB, ind] = myperm(A, B)
% permate two vector follow the lay: A(i) before B(i)

% input check - 输入检查
if nargin == 1
B = A;
end

if length(B(:)) ~= length(A(:)) % 长度不一致,报错!
error('the input vectors must have the same length. ');
end

N = length(A(:));
AB = cat(1,A(:),B(:)); % to be a vector - 合并A, B成一列向量

% indA = 1:N; indB = N + (1:N); - A指标为1:N, B指标为N+1:2*N
ind = randperm(N); % permate vector A index - 重排A中元素
for k = 1:N % insert elements of B - 将B中元素,按要求一一插入
nA = length(ind);
id = find(ind+N == N + k); % find B index corresponding index A

tmp = randi(nA-id+1,1,1); % there have nA-id+1 site wait for B-k-index
ind = [ind(1:(id+tmp-1)), N+k, ind((id+tmp):nA)]; % insert
end

AB = AB(ind);

% ---- 函数测试
>> A = [11 12 13 111 112];
>> B = [31 32 33 191 192];
>> AB = myperm(A,B);
>> AB'

ans =

13 111 33 112 12 192 32 11 31 191

>> AB = myperm(A,B)'

AB =

112 11 192 12 31 13 32 33 111 191
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式