کلیدستان

نسخه‌ی کامل: تولید اعداد تصادفی
شما در حال مشاهده نسخه آرشیو هستید. برای مشاهده نسخه کامل کلیک کنید.
با سلام
ببخشید من یه سوال داشتم من اگه بخوام اعداد تصادفی مانند شکل زیر را تولید کنم چه کدی رو بنویسم به طوری که بعضی از سطرها صفر باشه
1 8
1 3
1 4
3 6
4 6
4 7
6 8
0 0
سلام .
برای اعداد تصادفی از دستور rand در متلب استفاده می شود .
البته این دستور اعداد تصادفی بین 0 تا 1 را تولید می کند اما با دستورات زیر می توانید اعداد تصادفی بین a تا b را تولید کنید :

کد:
a=2;
b=4;
A=a+(b-a)*rand(1)

کد متلب بالا یک عدد تصادفی بین 2 تا 4 تولید می کند . مثلا یک نتیجه برای این کد متلب به صورت زیر می باشد :

کد:
A =

    2.8724

خوب حالا فرض کنید که بخواهید یک ماتریس با 3 ردیف و 2 ستون داشته باشید که هر عنصر آن یک عدد تصادفی در بازه 2 تا 4 باشد ، برای این منظور باید درون پرانتز دستور rand ، تعداد ردیف و ستون را به صورت زیر مشخص کنید :

کد:
a=2;
b=4;
A=a+(b-a)*rand(3,2)

نتیجه یک بار اجرای کدهای متلب بالا به صورت زیر می باشد :

کد:
A =

    2.7506    2.0767
    3.1794    2.5314
    3.9904    2.6044

چنانچه بخواهید اعداد تصادفی اعشاری نبوده و حتما عدد صحیح باشند می توانید از دستور round استفاده کنید . البته دستورات دیگری نیز برای گرد کردن اعداد اعشاری وجود دارند که تفاوت هایی با هم دارند و می توانید در مبحث زیر تفاوت آنها را متوجه شوید :

گرد کردن اعداد اعشاری در متلب

مثلا فرض کنید یک ماتریس با 6 ردیف و 2 ستون می خواهیم که هر عنصر آن یک عدد صحیح تصادفی در بازه عددی 0 تا 10 باشد ، برای این منظور کدهای زیر را می نویسیم :

کد:
a=0;
b=10;
A=round(a+(b-a)*rand(6,2))

نتیجه یک بار اجرای کدهای متلب بالا به صورت زیر خواهد بود (چون اعداد تصادفی هستند ، هر بار اجرا نتایج متفاوتی را خواهد داد) :

کد:
A =

     6     8
     1     2
     3     4
     1     8
     7     2
     8     7

در مورد اینکه گفتید بعضی سطرها صفر باشند ، دقیقا متوجه نشدم منظورتون چی هست اما اگه منظورتون اینه که اگه عنصر اول هر ردیف صفر باشد ، عنصر دوم آن ردیف نیز صفر شود ، باید ابتدا اعداد تصادفی را تولید کنید سپس با دستور if شرط بگذارید و عناصر اول هر ردیف را چک کنید و اگر صفر بود عنصر دوم آن ردیف را هم به صفر تغییر بدهید .
ممنون ولی اگه بخوام در بعضی از سطرها 2 تا صفر به طور تصادفی ایجاد شه اونوقت اونو چه جوری بنویسم؟

منظورم اینه که ردیف اخر همیشه صفر باشه
اگر بخواهید بعضی سطرها به صورت تصادفی صفر بشه ، همون طور که گفتم می تونید از دستور if در متلب استفاده کنید و شرط بگذارید که اگه در هر سطر ، اگر هر کدام از دو عنصر برابر صفر بود آنگاه عنصر دیگر هم صفر باشد . در این صورت بعضی سطرها دارای دو عنصر صفر خواهند بود .
اما روش دیگری هم هست و اون اینه که ابتدا با دستور rand در متلب اعداد تصادفی را در بازه 1 تا 10 برای ماتریس بسازید و پس از آنکه ماتریس به صورت اولیه ساخته شد آنگاه به تعداد سطرهایی که می خواهید سطر صفر داشته باشید با دستور rand عدد تصادفی در بازه 1 تا عدد مربوط به تعداد سطر ماتریس ایجاد کنید و سپس بر اساس عدد تصادفی ایجاد شده ، سطر مربوط به آن را تماما تبدیل به صفر کنید .
اما اگه میخواهید فقط سطر آخر صفر باشه ، بهتره اگه اندازه ماتریس را میدانید ، پس از تولید اعداد تصادفی ، دو عنصر آخر ماتریس را برابر صفر قرار دهید و دستور خاصی نمی خواهد .
البته خیلی واضح توضیح نداده بودید ، ولی امیدوارم همونی که خواستید رو نوشته باشم .
ببخشید میشه کدو برام بنویسین راستش زیاد مطلب بلد نیستم ممنون
فرض کنید بخواهیم ماتریسی با 12 ردیف و 2 ستون بسازیم که عناصر آن به صورت اعداد تصادفی 1 تا 10 باشند و همچنین 3 ردیف از آن به صورت تصادفی برابر صفر باشند و همچنین ردیف آخر آن نیز تماما صفر باشد ، کدهای متلب زیر را می نویسیم :

کد:
clear all
close all
clc

a=1;
b=10;
A=round(a+(b-a)*rand(12,2))

a=1;
b=12;
row_random=round(a+(b-a)*rand(1,3))

for nn=1:12
    for mm=1:3
        if(nn==row_random(mm))
            A(nn,:)=0;
        end
    end
end
A(end,:)=0;
A

نتیجه یک بار اجرای کدهای متلب بالا :

کد:
A =

     0     0
     3     6
     3     6
     2     3
     0     0
     8     6
     0     0
     2     9
     3     7
     9     7
     4     2
     0     0
ممنون
راستی معذرت من اگه بخوام اولش هم 2 تا 1 چاپ شه اونوقت اینجوری باید بنویسم؟
A(start,Smile=1;

A(end, : )=0;

A(start, : )=1;
احتیاجی به کلمه start نیست ، زیرا اندیس اولین ردیف همیشه 1 می باشد بنابراین باید کد زیر نوشته بشه :

کد:
A(1,:)=1;

در واقع کلمه end هم که به آخرین اندیس اشاره میکنه به این دلیل به کار میره که ما ممکنه ندونیم که آخرین اندیس چه شماره ای هست .