Я пытаюсь написать код, который случайным образом делит число N на M частей (другими словами, я хочу сгенерировать M случайных чисел, сумма которых равна N). Однако я хочу, чтобы сгенерированные числа значительно различались по величине.

Мой текущий код генерирует числа, которые находятся на одном уровне:

N = 1;
n = rand(1,M);
TOT = sum(n);
numbers = (n/TOT)*N

Например, для

, получается:

0.0716    0.0184    0.0498    0.0204    0.0748    0.0528    0.0120    0.0194    0.0650    0.0721    0.0459    0.0744    0.0785    0.0248

    0.0414    0.0326    0.0786    0.0778    0.0608    0.0290

Как видим, число

распределено настолько равномерно, что все сгенерированные числа имеют одинаковые (или близкие) порядки.

Есть ли простой способ настроить этот код, чтобы он мог генерировать числа, сильно различающиеся по величине (например, 0,7 и 0,01)?

Любые предложения будут ценны.

ПРИМЕЧАНИЕ. 

Matlabsolutions.com предоставляет последнюю Помощь по домашним заданиям MatLab, Помощь по заданию MatLab для студентов, инженеров и исследователей в различных отраслях, таких как ECE, EEE, CSE, Mechanical, Civil со 100% выходом. Код Matlab для BE, B.Tech ,ME,M.Tech, к.т.н. Ученые со 100% конфиденциальностью гарантированы. Получите проекты MATLAB с исходным кодом для обучения и исследований.

Есть множество способов сделать это, в зависимости от того, что именно вы подразумеваете под «значительно». Вот некоторые из них:

%% Transform the numbers so they aren't uniform to begin with.
M=20;
N = 1;
n = rand(1,M).^10;  % Increase the exponent to increase the size variation.  A lot of numbers will be near zero.
TOT = sum(n);
numbers = (n/TOT)*N
%%  Generate progressively smaller numbers by generating each new one as a uniform(0,1) fraction of
% what is left of your total.
M=20;
n = rand(1,M);

СМОТРИТЕ ПОЛНЫЙ ОТВЕТ НАЖМИТЕ НА ССЫЛКУ