سبد خرید (0)

تولید اعداد صحیح تصادفی در متلب

همان طور که تابع 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 بصورت شامل

دیدگاه‌ها  

0 # Guest 1396-08-26 22:04
سلام
یک بردار از اعداد صحیح بین 31 تا 75 میخوام ایجاد کنم چجوری باید انجام بدم کسی میدونه
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
0 # احسان عباسی 1396-08-27 09:27
سلام. منظورتون اعداد صحیح تصادفی بود؟
از دستور زیر استفاده کنید:
randi([a b],1,c);
a و b بازه را مشخص می کنند و c تعداد اعداد تصادفی را مشخص می کند.
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
0 # sanaz 43hz 1396-08-24 10:25
با سلام
ببخشید من میخوام یک بردار تصادفی از اعداد صحیح بین ۳۰ تا ۱۰۰ ایجاد کنم و این برنامه رو براش بنویسم که واسه اعداد بین ۵۰ تا ۹۰ . بیاد ۱۰ تا بهشون اضافه کنه و اعداد ۹۰ به بالا رو هم ۱۰۰ بده. سیستم نمره دهیه یعنی مثلا ۵۰ رو بکنه ۶۰. من با randi یک ماتریس ایجاد کردم که اعداد تصادفی بین ۳۰ تا ۱۰۰ رو بهم بده اما نمیدونم چطور برنامه ای بنویسم که اون کارایی که توضیح دادم رو بکنه. میشه راهنماییم کنید؟
با تشکر
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
0 # احسان عباسی 1396-08-24 11:17
سلام.
1. آیا می خواهید بازه ی 30 تا 100، بازه ی باز باشه یا بازه ی بسته؟ یعنی خود اعداد 30 و 100 هم شامل بشه یا نه؟
2. می خواهید اعداد بین 30 تا 50 چه اتفاقی براشون بیفته؟ آیا می خواهید دست نخورده باقی بمونند؟
3. آیا می خواهید اعداد تصادفی ایجاد شده، دارای تکرار هم باشند یا فقط غیر تکراری باشند؟
به سوالات بالا پاسخ دهید تا برنامه مورد نظر برای شما نوشته شود.
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
0 # sanaz 43hz 1396-08-24 12:30
کلا میخوام که 30 تا عدد تصادفی بین بازه 30 تا 100 که بسته هستش (یعنی خوده 30 و 100 هم باشند) ایجاد کنم
بله اعدادی که بین 30 تا 50 هست دست نخورده بمونه
اعداد تصادفی ایجاد شده تکراری هم میتونه باشه
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
0 # sanaz 43hz 1396-08-24 12:26
میخوام که بازه بسته باشه یعنی خوده اعداد 30 تا 100 هم جزوشون باشه
کلا میخوام 30 تا عدد تولید کنم برای 30 تا دانشجو که اعداد در بازه 30 تا 100 باشند و بعد میخوام که بعد از تولید این اعداد ، اعدادی که بین 50 تا 90 هستند (بازه بسته) به علاوه 10 بشند یعنی مثلا اگر 56 هستش بشه 66 یا 90 هستش بشه 100.
اعدادی هم که بالای 90 هستند بشن 100 مثلا 94 بشه 100 یا 92 بشه 100.
نمیخوام که اعداد غیر تکراری باشه یعنی ممکنه از یک عدد بیش از یدونه هم باشه.
ممنون
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
0 # احسان عباسی 1396-08-24 13:49
سلام مجدد.
برای درخواست شما، تابعی ایجاد کرده ام که از شرایط زیر تبعیت می کند:
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 مقادیر حاصل شده به دست می آید.
اگه تابع اشکالی داشت. همین جا مطرح کنید.
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
0 # sanaz 43hz 1396-08-24 15:07
تابع اشکالی ندارد و کاملا درست است خیلی ممنون از وقتی که گذاشتید.
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
0 # سینا سلیمیان 1396-08-24 09:53
با سلام میخواستم از بین اعداد 30 تا 100 برای 30 نفر بردار تصادفی نمرات را ایجاد کنم. کسی میتونه راهنمایی کنه؟ ممنون
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
0 # احسان عباسی 1396-08-24 11:03
سلام.
1. می خواهید توی نمرات ایجاد شده اعداد تکراری هم باشه یا نه؟
2. در بردار تصادفی نمرات چه تعداد نمره وجود داشته باشه؟
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
0 # سينا سليميان 1396-08-24 11:18
تعداد اعداد سي تا باشه و تكراري بودن و نبودنش هم مهم نيست
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
0 # احسان عباسی 1396-08-24 13:51
به سوال شما در بالا پاسخ داده شد.
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
0 # سينا سليميان 1396-08-24 14:01
به نقل از احسان عباسی:
به سوال شما در بالا پاسخ داده شد.

ممنونم
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
0 # احمد منصوري 1396-08-08 18:01
با درود و احترام
ميخواستم در بازه a تا b اعداد تصادفي صحيح و غير تكراري توليد كنم، كسي راه كاري داره؟؟
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
+2 # احسان عباسی 1396-08-08 19:30
سلام و عرض ادب.
به صورت زیر عمل کنید:
>> y = randsample(3:10,5)

y =

8 3 9 6 7

>>

در تابع randsample، بعنوان آرگومان اول، یک بردار مشخص می کنیم. مثلا اعداد 3 تا 10. بعد در آرگومان دوم تعداد اعداد تصادفی یکتایی که می خواهیم در بین این بازه تولید شود، رو می نویسیم.
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
0 # احمد منصوري 1396-08-09 12:27
سپاس بيكران
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
0 # دانیال علیخانی 1396-04-03 14:10
سلام ببخشید کسی متلب بلده چنتا تست کمکم کنه اگه کسی هس لطفا شماره بده
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
0 # احسان عباسی 1396-04-03 23:29
سلام.
سوال خودتون رو در همینجا مطرح کنید. تا حد امکان پاسخ خواهیم داد.
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
0 # سمانه ندری 1396-03-11 12:55
سلام میشه بگید برای randn چطورمیشه یه بردارشامل هزارعدد تصادفی بین۱تا۶تولید کرد؟
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
0 # احسان عباسی 1396-03-11 16:57
سلام.
لطفا سوال خودتون رو کمی بیشتر توضیح بدهید بنده متوجه نشدم. آیا منظورتون اینه که هزار عدد تصادفی صحیح(مثل 1یا 3 یا 5 که اعداد صحیحی هستند ) ایجاد بشه، یا اینکه هزار عدد تصادفی اعشاری دلخواه مثل 1.32 و 4.256 و 5.21 ایجاد شود؟
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن