PDA

View Full Version : random matlab



kebriya
یک شنبه 15 شهریور 1394, 22:56 عصر
سلام وققتون بخیر.یه دستور از رندوم میخوام در متلب که 5 عدد تصادفی تولید کند که مجموع این 5 عدد 1 باشد.ممنون میشم کمک کنید.خیلی ضروریه

kebriya
یک شنبه 15 شهریور 1394, 23:54 عصر
لطفا راهنماییم کنید.ممنون میشم

rahnema1
دوشنبه 16 شهریور 1394, 09:04 صبح
سلام
به این صورت

result = rand(1,5);
result = result / sum(result);

kebriya
دوشنبه 16 شهریور 1394, 11:27 صبح
واقعا مرسی

kebriya
دوشنبه 16 شهریور 1394, 11:29 صبح
اگه بخام بگم مقدار تصادفی ها بیشتر از 0.66 نشه چطور بگم؟

kebriya
دوشنبه 16 شهریور 1394, 11:55 صبح
while(length(RandArray)<=4)
result = rand;
if(result<0.66)
RandArray=[RandArray,result];
end
end
RandArray = RandArray / sum(RandArray);

راحتتر از این چیزی که من نوشتم هم میشه؟؟؟؟

rahnema1
دوشنبه 16 شهریور 1394, 12:50 عصر
مثل همون قبلی فقط ضرب در 0.66 می شه

result = rand(1,5) * 0.66;

kebriya
دوشنبه 16 شهریور 1394, 17:38 عصر
ابن دستور جمع 5 تا عدد را برابر یک نمیکند

kebriya
دوشنبه 16 شهریور 1394, 18:26 عصر
فهمیدم دوست عزیز ممنونم

rahnema1
دوشنبه 16 شهریور 1394, 22:38 عصر
این تابعی که نوشتم می شه در هر حالتی استفاده کرد

function result = cumrand(numrand, maxrand, sumrand)
if sumrand / numrand >= maxrand || maxrand >= sumrand
error('Error in parameters!');
end
result = zeros(1, numrand);
reminder = sumrand;
to = maxrand;
from = 0;
for i = 1: numrand - 1
to = min(reminder, to);
from = max(reminder - (numrand - i) * to, from);
result(i) = rand * (to - from) + from;
reminder = reminder - result(i);
end
result(numrand) = reminder;
end

numrand تعداد اعداد رندوم مورد نظر
maxrand حداکثر مقداری که هر عدد تصادفی می تونه داشته باشه
sumrand هم مجموع این اعداد هست
مثلا در مورد مساله شما اینجور باید استفاده بشه

cumrand(5, 0.66, 1)

البته شاید لازم بشه وقتی اعداد تصادفی تولید شد اونها را یک بار به هم بریزید

res = cumrand(5, 0.66, 1);
res = res(randperm(numel(res)));

kebriya
چهارشنبه 25 شهریور 1394, 20:07 عصر
سلام.دوتا دستور رندوم دارم که اعداد صحیح تصادفی بین 1 تا 6 میزنه.من میخام کاری کنم در هربار تولید عدد تصادفی مقدار دو تا رندوم تکراری نشه.مثلا هردو 3 نشن.
r1=randi(6)
r2=randi(6)

rahnema1
پنج شنبه 26 شهریور 1394, 02:20 صبح
سلام
از دستور زیر استفاده کنید
randperm(6, 2)