Я изначально хотел понять, есть ли функция в Matlab, которая может быть использована для решения этой проблемы. Тем не менее, ни одна из команд, относящихся к rand, кажется, делает то, что мне нужно, чтобы сделать (мои извинения, если я пропустил это).
Однако, я написал следующий код, который, кажется, исправить мою проблему. В цикле я допускаю 0,1 отклонения от желаемого среднего значения (которое может быть адаптировано по мере необходимости).
% Make an array of 100 ages between 20 and 80
min=20;
max=80;
AgeArray = min + (max-min).*rand(100,1);
% Set parameters for randomselection
samplenr=10; % Want a 10 random samples from the original age array of 100
mean = 45; % The mean of randomly selected 10 sample should be 45
half_nr=samplenr/2; % Set the half-way point
% Get first random sample of 10 ages from the original array of 100
RandSubSample = datasample(AgeArray,samplenr);
% Sort the array of 10 from low to high values
RandSubSample=sort(RandSubSample);
% Mean of this random sample
sumage=sum(RandSubSample);
meanage=sumage/samplenr;
% Loop to re-select 10 samples until mean matches 45 (with error allowed for +/-
% 0.1
while meanage<mean-0.1 || meanage>mean+0.1
if meanage<mean % If mean is too low we need to replace young ages with older aged
index=randi([1 half_nr]);
RandSubSample(index)=r(randi(numel(r)));
elseif meanage>mean % If mean is too high we need to replace old age with younger age
index=randi([half_nr nr]);
RandSubSample(index)=r(randi(numel(r)));
end
RandSubSample=sort(RandSubSample);
sumage=sum(RandSubSample);
meanage=sumage/nr;
end
y=sort(y);
sumage=sum(y);
meanage=sumage/nr;
end
[ 'randsample'] (http://www.mathworks.com/help/stats/randsample.html), если у вас есть набор инструментов статистики. Или просто сгенерируйте [случайные целые числа] (http://www.mathworks.com/help/matlab/math/random-integers.html) для индексации. – excaza
Мы не можем здесь написать свой код. Сначала попробуйте что-то, и если вы застряли в попытке, задайте вопрос, который включает в себя [mcve] подробную информацию о коде, с которым вы столкнулись. – Adriaan