Peducate.ir

Peducate.ir

با هم بیاموزیم
Peducate.ir

Peducate.ir

با هم بیاموزیم

الگوریتم تولید اعداد تصادفی

الگوریتم تولید اعداد تصادفی

در نرم افزار متلب (Matlab)، سه روش معروف برای تولید اعداد تصادفی شامل دستور rand، دستور randn و دستور randi به کار می رود. دستور rand اعداد تصادفی با توزیع یکنواخت و دستور randn اعداد تصادفی با توزیع نرمال تولید خواهد کرد. ولی روش های دیگری نیز وجود دارند که بتوان به وسیله آن ها به طور مستقیم اعداد تصادفی را تولید کرد. یکی از این روش ها، روش مولد همنهشتی مرکب است. در این روش عدد تصادفی بعدی از ترکیب خطی عدد قبلی به پیمانه قبلی استفاده می کند. در رابطه بازگشتی این روش یعنی Rn=(aRn-1+b) mod (m)، پیمانه m عدد ثابت b را تولید می کند. باید توجه داشت که m نسبت به b اول است (بهترین حالت آن است که m و b یک واحد با یکدیگر اختلاف داشته باشند) و ضریب a، مقدار ثابت b و پیمانه m همگی عدد صحیح هستند. توجه شود که دستور mod باقی مانده دو عدد را در خروجی می دهد. در برخی منابع ذکر شده است که الگوریتم فوق اعداد شبه تصادفی تولید می کند. الگوریتم فوق را به صورت زیر می توان در نرم افزار Matlab پیاده سازی کرد.

clear;clc;

N=100;

m=50;

b=m-1;

a=17;

R=zeros(1,N);

R(1)=19;

for t=1:N-1

R(t+1)=mod(a.*R(t)+b,m);

end

R=R./max(R);

در خط اول تمام حافظه متلب (Matlab) با دستور clear و محیط خط فرمان با دستور clc پاک می شود.

در خط دوم تعداد اعداد مورد نیاز کاربر یعنی N تعریف می شود.

خط سوم تا پنجم، اعداد ورودی طبق الگوریتم توضیح داده شده و به دلخواه مقدار می گیرند.

در خط ششم با دستور zeros یک بردار با طولی برابر تعداد اعداد تولیدی تعریف می شود که تمام درایه های این بردار صفر هستند. در حقیقت در اینجا با دستور zeros مقدار اولیه ای برای بردار نهایی که قرار است اعداد را در خود نگه دارد، در نظر گرفته شده است.

خط هفتم، مقدار اولیه رابطه بازگشتی به دلخواه مشخص می گردد.

در خط هشتم حلقه for برای تولید اعداد آغاز می شود.

خط نهم رابطه بازگشتی الگوریتم پیاده سازی می شود.

خط دهم، پایان حلقه را مشخص می کند.

خط یازدهم، مقادیر اعداد تولیدی را با دستور max نرمالیزه می کند.

حال اگر بخواهیم اعداد تصادفی تولیدی در بازه [A,B] قرار داشته باشند کافی است کد زیر را به الگوریتم بالا اضافه کنیم.

round ((B-A).*R+A);

دستور round اعداد تصادفی تولیدی را به نزدیک ترین عدد صحیح گرد می کند. اگر اعداد تصادفی صحیح مد نظر نباشد کافی است از رابطه زیر در پایان الگوریتم بالا استفاده شود:

 (B-A).*R+A

نظرات 1 + ارسال نظر
سمان جمعه 12 خرداد 1396 ساعت 04:24 ب.ظ

سلام مطلبتون جامع وکامل بود تشکر از سایت خوبتون

سلام
ممنون

ایمیل شما بعد از ثبت نمایش داده نخواهد شد