با سلام
ببخشید من یه سوال داشتم من اگه بخوام اعداد تصادفی مانند شکل زیر را تولید کنم چه کدی رو بنویسم به طوری که بعضی از سطرها صفر باشه
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 تولید می کند . مثلا یک نتیجه برای این کد متلب به صورت زیر می باشد :
خوب حالا فرض کنید که بخواهید یک ماتریس با 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,
=1;
A(end, : )=0;
A(start, : )=1;
احتیاجی به کلمه start نیست ، زیرا اندیس اولین ردیف همیشه 1 می باشد بنابراین باید کد زیر نوشته بشه :
در واقع کلمه end هم که به آخرین اندیس اشاره میکنه به این دلیل به کار میره که ما ممکنه ندونیم که آخرین اندیس چه شماره ای هست .