همان طور که تابع rand، اعداد تصادفی حقیقی را تولید می کند، می توانیم اعداد تولید شده به وسیله ی آن را گرد کنیم تا یک عدد صحیح تصادفی به دست آید. بعنوان مثال داریم:
>> round(rand*10)
با استفاده از دستور بالا، یک عدد صحیح تصادفی در محدوده ی 0 تا 10 به دست می آید که شامل خود اعداد 0 و 10 نیز می باشد. درواقع عبارت rand*10 یک عدد حقیقی تصادفی بین بازه ی باز (0,10) را تولید می کند که با گرد کردن آن یک عدد صحیح تصادفی بوجود می آید.
اما این اعداد صحیح به دست آمده، به طور مساوی در محدوده ی مورد نظر توزیع نشده اند. روش بهتر این است که از تابع randi استفاده کنیم. در ساده ترین حالت، اگر دستور (randi(imax را مورد استفاده قرار دهیم، یک عدد صحیح تصادفی در محدوده ی 1 تا imax بصورت شامل، برگردانده می شود. بعنوان مثال دستور (randi(4 یک عدد صحیح را بین 1 تا 4 بطوری که شامل خود اعداد 1 و 4 باشد را برمی گرداند. همچنین می توان یک محدوده را نیز مشخص نمود. بعنوان مثال اگر عبارت \(randi([imin,imax])\) را وارد کنیم، یک عدد صحیح تصادفی بین imin تا imax بصورت شامل، به وجود می آید. به مثال زیر توجه کنید:
تمرین 1.2
در هریک از موارد زیر یک عدد تصادفی را ایجاد کنید:
1. یک عدد حقیقی تصادفی در محدوده ی [0,1]
2. یک عدد حقیقی تصادفی در محدوده ی [0,100]
3. یک عدد حقیقی تصادفی در محدوده ی [20,35]
4. یک عدد صحیح تصادفی در محدوده ی 1 تا 100 بصورت شامل
5. یک عدد صحیح تصادفی در محدوده ی 20 تا 35 بصورت شامل
میخواستم با دستور رندی بین n تا عدد صحیح دلخواه عدد تصادفی انتخاب کنم. مثلا بین اعداد 5 و 10 و 15 هر بار یکی رو به صورت تصادفی انتخاب کنم. میشه راهنماییم کنید؟ ممنون
دو عدد را بصورت ورودی میدم...
چطوری میتونم تمام اعداد صحیح بین این دو عدد را پیدا کنم ؟؟؟
ممنون
من مطابق با کد بالا خواستم عدد تصادفی برای دو سر یک بازه ایجاد کنم.
اما این ارور را داد.
IMAX must be greater than or equal to 1.
ممنون میشم راهنمایی بفرمایید.
یک بردار از اعداد صحیح بین 31 تا 75 میخوام ایجاد کنم چجوری باید انجام بدم کسی میدونه
از دستور زیر استفاده کنید:
randi([a b],1,c);
a و b بازه را مشخص می کنند و c تعداد اعداد تصادفی را مشخص می کند.
ببخشید من میخوام یک بردار تصادفی از اعداد صحیح بین ۳۰ تا ۱۰۰ ایجاد کنم و این برنامه رو براش بنویسم که واسه اعداد بین ۵۰ تا ۹۰ . بیاد ۱۰ تا بهشون اضافه کنه و اعداد ۹۰ به بالا رو هم ۱۰۰ بده. سیستم نمره دهیه یعنی مثلا ۵۰ رو بکنه ۶۰. من با randi یک ماتریس ایجاد کردم که اعداد تصادفی بین ۳۰ تا ۱۰۰ رو بهم بده اما نمیدونم چطور برنامه ای بنویسم که اون کارایی که توضیح دادم رو بکنه. میشه راهنماییم کنید؟
با تشکر
1. آیا می خواهید بازه ی 30 تا 100، بازه ی باز باشه یا بازه ی بسته؟ یعنی خود اعداد 30 و 100 هم شامل بشه یا نه؟
2. می خواهید اعداد بین 30 تا 50 چه اتفاقی براشون بیفته؟ آیا می خواهید دست نخورده باقی بمونند؟
3. آیا می خواهید اعداد تصادفی ایجاد شده، دارای تکرار هم باشند یا فقط غیر تکراری باشند؟
به سوالات بالا پاسخ دهید تا برنامه مورد نظر برای شما نوشته شود.
بله اعدادی که بین 30 تا 50 هست دست نخورده بمونه
اعداد تصادفی ایجاد شده تکراری هم میتونه باشه
کلا میخوام 30 تا عدد تولید کنم برای 30 تا دانشجو که اعداد در بازه 30 تا 100 باشند و بعد میخوام که بعد از تولید این اعداد ، اعدادی که بین 50 تا 90 هستند (بازه بسته) به علاوه 10 بشند یعنی مثلا اگر 56 هستش بشه 66 یا 90 هستش بشه 100.
اعدادی هم که بالای 90 هستند بشن 100 مثلا 94 بشه 100 یا 92 بشه 100.
نمیخوام که اعداد غیر تکراری باشه یعنی ممکنه از یک عدد بیش از یدونه هم باشه.
ممنون
برای درخواست شما، تابعی ایجاد کرده ام که از شرایط زیر تبعیت می کند:
1. خود عدد 49 و خود عدد 30 و اعداد بین این دو را نادیده می گیرد و تغییری ایجاد نمی کند.
2. خود عدد 50 و خود عدد 89 و اعداد بین این دو را بعلاوه ی 10 می کند.
3 خود عدد 90 و خود عدد 100 و اعداد بین این دو را برابر با 100 می کند.
---------------------------------------------------------------------------------
نام این تابع را rnumber قرار داده ام و می توانید از لینک زیر دانلود کنید:
beyamooz.com/images/matlab/functions/rnumber.zip
روش کار به صورت زیر است:
>> [result,main]=rnumber(30,100,10)
result =
91 85 72 78 61 92 43 88 43 66
main =
81 75 62 68 51 82 43 78 43 56
>>
به تابع rnumber سه آرگومان می دهیم. آرگومان اول و آرگومان دوم، بازه ی اعداد رو مشخص می کنند. آرگومان سوم، تعداد اعدادی است که می خواهیم بین این بازه ایجاد شوند. و عملیات بر روی آنها انجام شود. در مثال بالا، 10 عدد بین بازه ی 30 تا صد و خود این دو ایجاد شده و عملیات بر روی انها انجام می گیرد.
در متغیر main، اعداد اولیه ی تولید شده قرار می گیره و در متغیر result مقادیر حاصل شده به دست می آید.
اگه تابع اشکالی داشت. همین جا مطرح کنید.
1. می خواهید توی نمرات ایجاد شده اعداد تکراری هم باشه یا نه؟
2. در بردار تصادفی نمرات چه تعداد نمره وجود داشته باشه؟
ممنونم
ميخواستم در بازه a تا b اعداد تصادفي صحيح و غير تكراري توليد كنم، كسي راه كاري داره؟؟
به صورت زیر عمل کنید:
>> y = randsample(3:10,5)
y =
8 3 9 6 7
>>
در تابع randsample، بعنوان آرگومان اول، یک بردار مشخص می کنیم. مثلا اعداد 3 تا 10. بعد در آرگومان دوم تعداد اعداد تصادفی یکتایی که می خواهیم در بین این بازه تولید شود، رو می نویسیم.
سوال خودتون رو در همینجا مطرح کنید. تا حد امکان پاسخ خواهیم داد.
لطفا سوال خودتون رو کمی بیشتر توضیح بدهید بنده متوجه نشدم. آیا منظورتون اینه که هزار عدد تصادفی صحیح(مثل 1یا 3 یا 5 که اعداد صحیحی هستند ) ایجاد بشه، یا اینکه هزار عدد تصادفی اعشاری دلخواه مثل 1.32 و 4.256 و 5.21 ایجاد شود؟