تولید اعداد صحیح تصادفی در متلب
همان طور که تابع 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 بصورت شامل
- نوشته شده توسط احسان عباسی
- بازدید: 21726
دیدگاهها
سلام و خسته نباشید
میخواستم با دستور رندی بین n تا عدد صحیح دلخواه عدد تصادفی انتخاب کنم. مثلا بین اعداد 5 و 10 و 15 هر بار یکی رو به صورت تصادفی انتخاب کنم. میشه راهنماییم کنید؟ ممنون
اگر بخواهیم تعدادی عدد تصادفی اعشاری بین مثلا 2. تا 5 انتخاب کنیم به شرطی که این اعداد از بین 2 تا 5 باگام یا dx برابر 0.01 انتخاب شده باشند چه فرمانی باید استفاده شود
با سلام وخسته نباشید
دو عدد را بصورت ورودی میدم...
چطوری میتونم تمام اعداد صحیح بین این دو عدد را پیدا کنم ؟؟؟
ممنون
با سلام
من مطابق با کد بالا خواستم عدد تصادفی برای دو سر یک بازه ایجاد کنم.
اما این ارور را داد.
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 تا عدد تصادفی بین بازه 30 تا 100 که بسته هستش (یعنی خوده 30 و 100 هم باشند) ایجاد کنم
بله اعدادی که بین 30 تا 50 هست دست نخورده بمونه
اعداد تصادفی ایجاد شده تکراری هم میتونه باشه
میخوام که بازه بسته باشه یعنی خوده اعداد 30 تا 100 هم جزوشون باشه
کلا میخوام 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 مقادیر حاصل شده به دست می آید.
اگه تابع اشکالی داشت. همین جا مطرح کنید.
تابع اشکالی ندارد و کاملا درست است خیلی ممنون از وقتی که گذاشتید.
با سلام میخواستم از بین اعداد 30 تا 100 برای 30 نفر بردار تصادفی نمرات را ایجاد کنم. کسی میتونه راهنمایی کنه؟ ممنون
سلام.
1. می خواهید توی نمرات ایجاد شده اعداد تکراری هم باشه یا نه؟
2. در بردار تصادفی نمرات چه تعداد نمره وجود داشته باشه؟
تعداد اعداد سي تا باشه و تكراري بودن و نبودنش هم مهم نيست
به سوال شما در بالا پاسخ داده شد.
به نقل از احسان عباسی:
ممنونم
با درود و احترام
ميخواستم در بازه a تا b اعداد تصادفي صحيح و غير تكراري توليد كنم، كسي راه كاري داره؟؟
سلام و عرض ادب.
به صورت زیر عمل کنید:
>> y = randsample(3:10,5)
y =
8 3 9 6 7
>>
در تابع randsample، بعنوان آرگومان اول، یک بردار مشخص می کنیم. مثلا اعداد 3 تا 10. بعد در آرگومان دوم تعداد اعداد تصادفی یکتایی که می خواهیم در بین این بازه تولید شود، رو می نویسیم.
سپاس بيكران
سلام ببخشید کسی متلب بلده چنتا تست کمکم کنه اگه کسی هس لطفا شماره بده
سلام.
سوال خودتون رو در همینجا مطرح کنید. تا حد امکان پاسخ خواهیم داد.
سلام میشه بگید برای randn چطورمیشه یه بردارشامل هزارعدد تصادفی بین۱تا۶تولید کرد؟
سلام.
لطفا سوال خودتون رو کمی بیشتر توضیح بدهید بنده متوجه نشدم. آیا منظورتون اینه که هزار عدد تصادفی صحیح(مثل 1یا 3 یا 5 که اعداد صحیحی هستند ) ایجاد بشه، یا اینکه هزار عدد تصادفی اعشاری دلخواه مثل 1.32 و 4.256 و 5.21 ایجاد شود؟