در واقعیت انواع پارامترهایی که یک مدل را تعریف میکنند یک مقدار ثابت نداشته و هر کدام از آنها یک متغیر تصادفی میباشند که توزیع مشخصی دارند به این گونه مدلسازی مسائل، مدلسازی احتمالاتی میگویند. به عنوان مثال مقاومت فشاری چندین سیلندر بتنی که از یک نمونه بتن گرفته شدهاند یکسان نبوده و یک توزیع مشخص با میانگین و انحراف معیار معین دارد. در این مقاله بنا داریم تا با نحوه تولید اعداد تصادفی در متلب به طور کامل آشنا شویم.
در بسیاری از مسائلی که با آن سر و کار داریم نیاز به تولید اعداد تصادفی خواهیم داشت. اعدادی که رخداد آنها تصادفی باشد و وابستگی بین اعداد تولید شده وجود نداشته باشد.
اعداد تصادفی با توجه به شکل زیر در دو دسته بندی گسسته و پیوسته تولید میشوند. مثلا خسارت مالی یک شهر، مقاومت فشاری بتن، ارتفاع موج، شتاب زلزله و… متغیر تصادفی پیوسته میباشند و انتخاب نوع سیستم سازهای یک ساختمان، انواع حالت خرابی برای یک سازه ، شتاب زلزله در مقیاس مرکالی (ریشتر) و… متغیر تصادفی گسسته میباشند.
همچنین شما میتوانید سایر مقالات و فیلم های آموزش متلب را مشاهده نمایید و همین الان تسلط خود به متلب را افزایش دهید.
همچنین توصیه میکنیم همزمان با این مقاله ، پست محاسبات آماری در متلب را حتما مطالعه کنید چون که در این مقاله با محاسبه شاخصهای آماری همچون میانگین و انحراف معیار سر و کار خواهیم داشت.
تولید اعداد تصادفی در متلب بصورت پیوسته
در بخش اول اعداد تصادفی میخواهیم اعداد تصادفی پیوسته را با متلب تولید نماییم.
ایجاد اعداد تصادفی با دستور rand در متلب
برای تعریف اعداد تصادفی در متلب بصورت یکنواخت در بازه صفر تا 1 از دستور rand استفاده میشود. این دستور را میتوان به چند شکل در متلب فراخوانی کرد:
1-فراخوانی بدون ورودی:
A=rand
در حالتی که هیچ ورودی به دستور ندهیم فقط یک عدد تصادفی در بازه صفر تا 1 با احتمال یکنواخت ایجاد خواهد کرد.
2- اگر بخواهیم تعداد مشخصی اعداد تصادفی در بازه صفر تا 1 تولید کنیم کافی است به عنوان ورودی اندازه ماتریس موردنظر را به عنوان ورودی به آن بدهیم:
B1=rand(3) (به اندازه ماتریس 3*3)
B2=rand(5,2) (5 سطر و 2 ستون)
3- برای ساخت اعداد تصادفی در متلب بصورت عدد مختلط (موهومی) کافی است دستور rand را بصورت زیر فراخوانی کنیم: به عنوان مثال برای تولید 5 عدد تصادفی مختلط از هر سه حالت زیر میتوانیم استفاده کنیم:
C1=rand(1,5)+1i*rand
C2=rand+1i*rand(1,5)
C3=rand(1,5)+1i*rand(1,5)
0.2098 + 0.3146i 0.2098 + 0.9038i 0.2098 + 0.5207i 0.2098 + 0.1622i 0.2098 + 0.1436i
4- برای تعریف اعداد تصادفی در متلب در بازه دلخواه با دستور rand در بازه دلخواه a تا b کافی است از فرمول زیر استفاده کنیم:
r = a + (b-a)*rand(N,M)
به عنوان مثال میخواهیم 20 عدد اعداد تصادفی در بازه 10- تا 10 ایجاد کنیم:
D=-10+(10+10)*rand(20,1)
5- اگر بخواهیم اعداد تصادفی که در هر مرتبه تولید میشوند ثابت باشند برای اینکار باید از دستور rng استفاده کردکه این دستور نحوه تولید اعداد تصادفی را ریست میکند که باعث میشود اعداد تصادفی بصورت ثابت تولید شوند. ( اصطلاحا seed را در هر دفعه تولید در حالت state نگه میدارد.) نحوه استفاده از این دستور بصورت زیر میباشد:
v = rng;
E1 = rand(1,10)
rng(v);
E2 = rand(1,10)
E1=E2
ساخت اعداد تصادفی با دستور unifrnd در متلب
برای تولید اعداد تصادفی در بازه دلخواه و در اندازه دلخواه میتوانیم علاوه بر شیوه که در دستور rand گفته شد بصورت راحتتر از دستور unifrnd استفاده کنیم.
برای استفاده از این دستور در ورودی اول و دوم بازه مورد نظر و در ورودی های سوم و چهارم اندازه ماتریس مورد نظر را وارد میکنیم. اگر برای آن اندازهای در نظر نگیریم به طور پیش فرض یک عدد در بازه دلخواه تولید خواهد کرد. به عنوان مثال میخواهیم به ترتیب یک و 20 عدد در بازه 10- تا 10 ایجاد کنیم:
A=unifrnd(-10,10);
از هر دو شیوه زیر میتوان برای تولید اعداد تصادفی در بازه دلخواه به تعداد مشخص استفاده کرد:
B=unifrnd(-10,10,1,20);
B=unifrnd(-10,10,[1 20]);
همچنین میتوان بصورت زیر نیز از این دستور استفاده کرد:
a = 0; b = 1:5;
C = unifrnd(a,b)
در مثال فوق 5 عدد تولید میشود که اولین عدد بین صفر تا 1، دومین عدد بین صفر تا 2 و … و تا پنجمین عدد بین صفر تا 5 میباشد. در اینجا مقدار b یک بردار بوده و حتی میتواند یک ماتریس باشد. بصورت زیر:
B = repmat(b,5,1);
R = unifrnd(a,B)
خروجی این حالت یک ماتریس 5*5 خواهد بود که به طور مشابه اولین ستون بین صفر تا یک و … و پنجمین ستون بین صفر تا 5 میباشد. لازم به ذکر است که دستور repmat دستور کپی تهیه کردن از یک ماتریس میباشد که در اینجا کپی تهیه کردن از بردار b به اندازه مشخص میباشد.
تولید اعداد تصادفی با دستور randn در متلب
بسیاری از پدیدههای تصادفی همچون تراز سطح امواج دریا با توزیع نرمال مدل میشوند. توزیع نرمال ویژگیهای بسیار منحصر به فردی دارد که باعث کاربرد بسیار گسترده آن در پدیدههای مختلف شده است. اگر میانگین این توزیع صفر و انحراف معیار آن واحد باشد، به آن توزیع نرمال استاندارد میگویند.
برای تولید اعداد تصادفی که از توزیع نرمال استاندارد تبعیت میکنند از دستور randn در متلب استفاده میشود. این دستور تمام 5 حالت ویژگیهای دستور rand را دارد از جمله اینکه میتوان اعداد در تعداد مختلف و همچنین بصورت موهومی تعریف کرد. به عنوان مثال میخواهیم 1000 عدد که توزیع استاندارد نرمال داشته باشند را تولید کنیم:
A=randn(1,1000);
Mean=0.0058;
StandardDeviation=0.9911
همانطور که مشاهده میکنید مقدار میانگین و انحراف معیار تقریبا به ترتیب به مقدارهای صفر و یک نزدیک هستند که اگر تعداد اعداد تولید شده افزایش یابد، میانگین و انحراف معیار به ترتیب به صفر و یک میل خواهند کرد.
در صورتی که بخواهیم با استفاده از دستور randn در متلب توزیع نرمال با میانگین و انحراف معیاردلخواه تولید کنیم میتوانیم از همین دستور با یک فرمول مشخص استفاده کنیم. میتوان نشان داد که این رابطه از مبحث تبدیل احتمال بصورت زیر بدست میآید:
N(μ,σ)=μ+σ×N(0,1)
به عنوان مثال برای ایجاد اعداد تصادفی در متلب میخواهیم 1000 عدد تصادفی با توزیع استاندارد با میانگین 2 و انحراف معیار 3 را تولید کنیم. همچنین با دستور histogram توزیع آن را در 20 دسته رسم میکنیم:
B=2+3*randn(1,1000);
histogram(B,20)
mean(B)= 1.9581
StandardDeviation=std(B) = 2.8646
اگر میخواهید با ترسیم نمودارهای دو بعدی در متلب به طور کامل آشنا شوید به هیچ وجه مقاله زیر را از دست ندهید.
تولید اعداد تصادفی در متلب بصورت گسسته
در بخش قبل با تولید اعداد تصادفی پیوسته در متلب آشنا شدیم و در این بخش میخواهیم اعداد گسسته تصادفی را با متلب تولید نماییم.
ایجاد اعداد تصادفی بصورت گسسته با دستور randi در متلب
برای تولید اعداد تصادفی بصورت گسسته از دستور randi در متلب استفاده میشود. این دستور مشابه با دستور rand عمل میکند و بسیاری از ویژگیهای این دستور که گفته شد در randi نیز وجود دارد. به این صورت که در ورودی اول بردار بازه تولید عدد تصادفی است و در ورودی دوم اندازه موردنظر را برای اعداد تصادفی بیان میکنیم.
به عنوان مثال برای ایجاد اعداد تصادفی در متلب میخواهیم اعداد تصادفی گسسته در بازه 1 تا 10 و به تعداد 20 عدد تولید کنیم. این کار به شیوههای زیر انجام میشود:
A=randi(10,[1 20])
A=randi(10,1,20)
A=randi([1,10],[1 20])
A=randi([1,10],1,20)
از هر چهار شیوه بالا میتوان برای تعریف اعداد تصادفی در متلب بصورت گسسته استفاده کرد. دقت کنید که در دو شیوه اول اگر بازه از یک شروع شود نیازی به تعریف عدد یک نخواهد و فقط انتهای بازه کفایت میکند در غیر اینصورت باید ابتدای بازه تعریف شود.
امیدواریم به خوبی نحوه استفاده از دستور randi در متلب به چندین حالت میباشد، را فرابگیرید.
همچنین با مراجعه به راهنمای نرمافزاریا سایت متلب میتوانید انواع زیردستورات این دستور را به طور کامل فرا بگیرید که مشابه دستور rand میباشد.
ساخت اعداد تصادفی بصورت جایگشت - دستور randperm در متلب
در این بخش دستور randperm در متلب را بیان خواهیم کرد که بسیار در آمار و احتمالات پرکاربرد میباشد.
جایگشتی از اعداد به معنای یک ترتیبی از یکسری اعداد مشخص میباشد که در این ترتیب امکان تکرار اعداد وجود ندارد و این انتخاب بدون جایگذاری میباشد.
برای تولید یک جایگشت (permutation) از اعداد تصادفی صحیح از دستور randperm در متلب استفاده میشود. به عنوان مثال میخواهیم جایگشتی از اعداد 1 تا 10 را داشته باشیم:
randperm(10)
3 7 10 4 6 8 9 2 1 5
اگر بخواهیم یک جایگشتی از 5 عدد که بین اعداد 1 تا 10 را داشته باشیم بصورت زیر عمل خواهیم کرد:
randperm(10,5)
6 3 1 4 9
انتخاب تعدادی نمونه از یک جمعیت بصورت تصادفی-دستور randsample در متلب
در بسیاری از مواقع نیاز داریم که از بین تعداد مشخصی از اعداد، تعدادی را به عنوان نمونه یا برنده انتخاب کنیم. دستور randsample این انتخاب را بصورت یکنواخت و تصادفی انجام میدهد. همچنین این انتخاب بدون جایگذاری میباشد.
به عنوان نمونه میخواهیم از بین 1000 نفر که هر کدام یک شماره از 1 تا 1000 دارند، 5 نفر را به طور تصادفی انتخاب کنیم که هر نفر نیز حداکثر یکبار میتواند انتخاب شود:
randsample(1000,5)
224 922 375 309 315
پایان
این مقاله آموزشی به کوشش تیم تولید محتوای علمی و نرمافزاری گام98 در راستای ارتقای دانش شما در استفاده از نرمافزار متلب تولید شده است. درصورتی مفید بودن این مقاله آن را به دوستان و آشنایان خود معرفی نمایید.