ایجاد ماتریس با حلقه for در متلب
در آموزش رایگان متلب ، نحوه تعریف یک ماتریس را بررسی کردیم. هدف ما در این پست، ایجاد ماتریس با حلقه for در متلب است. یعنی میخواهیم یک ماتریس تعریف کنیم که تک تک آرایههای آن بر اساس معادله خاصی که خودمان تعیین کردیم پر شده است! پس تا پایان این پست هیجانانگیز همراهمان باشید…
مقدمه
قبلا ما چند روش برای تعریف ماتریسها در متلب معرفی کردیم. گفتیم که چگونه با کمک براکت یک بردار یا ماتریس تعریف کنید. بعد هم چندین دستور معرفی کردیم که ماتریسهای خاص مانند ماتریس صفر و غیره را تولید میکردند. اما حالا هدف ما ایجاد ماتریس با حلقه for در متلب است! اگرچه با این روش تنها ماتریسهای خاصی را میتوان تعریف کرد. اما این روش هم گاهی بسیار به درد میخورد! در بخش بعدی از پست «ایجاد ماتریس با حلقه for در متلب» میرویم که یاد بگیریم چطور با حلقههای تودرتو در متلب، یک ماتریس بسازیم.
ساختن ماتریس صفر با for
فکر میکنم همگی شما با ماتریس صفر آشنا باشید. به ماتریسی که تمام درایههای آن صفر باشد، ماتریس صفر میگویند! اگرچه این ماتریس را به راحتی با دستور zeros میتوان ساخت، ولی ما میخواهیم این ماتریس را این بار با for بسازیم.
ما میخواهیم یک ماتریس صفر به ابعاد 3 * 5 بسازیم. یعنی این ماتریس 5 سطر و 5 ستون دارد و تمامی درایههای آن صفر هستند. برای این کار به دو for توردرتو احتیاج داریم. یکی از این for-ها شماره سطر و دیگری شماره ستون را نشان میدهد.
clear
clc
for i = 1 : 5
for j = 1 : 3
zero_matrix(i, j) = 0;
end
end
disp(zero_matrix)
- خط 1 و 2: اینها که واضح هستند. تمام متغیرها را حذف کرده و command window را پاک میکنیم!
- خط 4: یک حلقه for تعریف کردیم. ایندکسِ این حلقه، شماره سطرها است. بنابراین چون 5 تا سطر داشتیم، i را از 1 تا 5 در نظر گرفتیم.
- خط 5: یک حلقه for جدید تعریف کردیم. ایندکسِ این حلقه اما شماره ستونها را نشان میدهد. بنابراین j را از 1 تا 3 در نظر گرفتیم.
- خط 6: ماتریسی که میخواهیم بسازیم را در متغیری به نام zero_matrix ذخیره میکنیم. در هر تکرار از حلقه دوم، یک سطر از ماتریس پُر میشود. دقت کنید که حتما باید به وسیله i و j ماتریس zero_matrix را اندیسدهی کنید.
- خط 9: در نهایت ماتریس zero_matrix را نمایش میدهیم!
با اجرای کدی که نوشتیم، خروجی زیر را خواهیم داشت:
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
مشاهده میکنید که نتیجه یک ماتریس صفر با 5 سطر و 3 ستون است. همان که میخواستیم! در بخش بعدی از پست «ایجاد ماتریس با حلقه for در متلب» یک مثال پیچیدهتر را بررسی خواهیم کرد…
ساخت یک ماتریس پیچیدهتر!
ساختن ماتریس صفر بسیار ساده بود. حالا میخواهیم ماتریسی به شکل زیر بسازیم:

اول از همه بگویید ببینم ابعاد ماتریسی چه هست؟ ماتریس موردنظرمان یک ماتریس 6 * 6 است. خب بگویید ببینم چطور میتوانیم با for چنین ماتریسی بسازیم؟ تمامی اعداد در یک سطر با هم برابر هستند درست است؟ و مقدارش هم دقیقا برابر با شماره سطر است. یعنی در سطر اول، همه اعداد یک هستند، در سطر دوم همه 2 هستند و الی آخر.
-
کدهای ایجاد ماتریس با حلقه for در متلب
پس باید کدمان را به شکل زیر تغییر دهیم:
clc
clear
for i = 1 : 6
for j = 1 : 6
my_matrix(i, j) = i;
end
end
disp(my_matrix)
- خط 4 و 5: اندیسها را متناسب را با ابعاد ماتریسمان تغییر میدهیم. ماتریس ما 6 در 6 است. بنابراین i و j را 1 تا 6 در نظر میگیریم.
- خط 6 : مقدار همه ستونها در یک سطر باید برابر با اندیسِ همان سطر باشد. یعنی اگر در سطرِ 5 باشیم، مقدار همه ستونها باید برابر با 5 باشند! از این رو مقدار my_matrix(i, j) ، یعنی درایهای که در سطر i و ستون j است را برابر با i قرار میدهیم.
- خط 7: در نهایت هم ماتریسی که ساختیم را نمایش میدهیم.
کدی که نوشتیم را اجرا میکنیم. ببینیم چه کردیم!:
1 1 1 1 1 1
2 2 2 2 2 2
3 3 3 3 3 3
4 4 4 4 4 4
5 5 5 5 5 5
6 6 6 6 6 6
مشاهده میکنید که به هدفمان رسیدیم. ماتریسی که ساختیم دقیقا همان ماتریس هدفمان است! برویم سراغ بخش بعدی از پست « ایجاد ماتریس با حلقه for در متلب»…
ساخت ماتریس صفر و یک با for
در این بخش یک ماتریس پیچیدهتر از ما خواسته شده است. باید یک ماتریس صفر و یک بسازیم به شکل زیر:

اول از همه باید رابطه میان اعداد و اندیسها پیدا کنیم! درایهها یک در میان صفر و یک هستند. چون صحبت از یکی در میان شد، ممکن است بتوان این را به زوج و فرد بودن ربط داد. کمی بیشتر دقت کنید. در سطرهایی با اندیسِ فرد، مقدار درایههای ستونهای زوج، یک هستند! در سطرهای با اندیس فرد، این مسئله برعکس است. یعنی اگر اندیس سطر، زوج باشد، مقدار ستونهای با اندیس فرد، یک خواهد بود.
-
مسئله ما همان XOR است!
پس ما با یک مسئله شرطی مواجه هستیم. داخل حلقهها باید یک شرط بنویسیم که اگر اندیسِ سطر زوج بود فلان کار را بکن و در غیر اینصورت بسار کار را! تا اینجا درست؟ اما بیایید تکلیف عبارت شرطی را هم مشخص کنیم. با کمی دقت به نتیجه زیر خواهیم رسید:
- اگر اندیسِ سطر و ستون، هردو زوج یا هردو فرد باشند، مقدار درایه متناظرشان 0 است.
- اگر اندیسِ سطر، زوج و اندیسِ ستون فرد یا برعکس باشد، مقدار درایه متناظرشان 1 است.
در واقع ما میخواهیم عملیات XOR را انجام دهیم درست است؟ اگر زوج بودن را 1 و فرد بودن را 0 در نظر بگیریم:

-
کدهای ماتریس صفر و یک
مشاهده کردید که مسئله دقیقا XOR است. با علم به این موضوع کد زیر را مینویسیم:
clc
clear
for i = 1 : 6
for j = 1 : 6
if xor(rem(i, 2) == 0, rem(j, 2) == 0)
my_matrix(i, j) = 1;
else
my_matrix(i, j) = 0;
end
end
end
disp(my_matrix)
- خط 1 تا 5: این خطوط دیگر نیاز به توضیح ندارند!
- خط 6 تا 9: در این خط، یک عبارت شرطی نوشتیم! عبارت rem(i, 2) == 0 چیست؟ دستور rem در متلب برای محاسبه باقیمانده استفاده میشود. اگر باقیمانده تقسیم i بر 2 صفر باشد یعنی چه؟ یعنی i بر 2 بخشپذیر است و طبیعتا i زوج است. نتیجه عبارت rem(i, 2) == 0 یا صفر است یا یک. اگر i زوج باشد نتیجهاش یک و در غیر اینصورت صفر خواهد بود. برای عبارت rem(j, 2) == 0 نیز همین توضیحات صادق است. بنابراین اگر xor این دو عبارت 0 باشد، درایه متناظر با j و j باید صفر باشد. در غیر اینصورت آن درایه باید یک باشد.
- خط 13: در نهایت هم نتیجه را نمایش میدهیم.
نتیجه کدی که نوشتیم به شکل زیر خواهد بود:
0 1 0 1 0 1
1 0 1 0 1 0
0 1 0 1 0 1
1 0 1 0 1 0
0 1 0 1 0 1
1 0 1 0 1 0
نتیجه دقیقا همان چیزی است که میخواستیم 😉.
جمعبندی
عنوان این پست «ایجاد ماتریس با حلقه for در متلب» بود! ما در این پست با استفاده از حلقههای تو در تو توانستیم یک ماتریس بسازیم. سه مثال ساده، متوسط و پیچیده را بررسی کردیم. شما چه ماتریسهایی را با حلقهها تودرتو ساختید؟ برایمان کامنت کنید😊. امیدوارم این آموزش مورد توجه شما قرار گرفته باشد.
مطالب زیر را حتما مطالعه کنید
تعریف متغیر در متلب
آموزش متلب رایگان
دستور max در متلب
دستور محاسبه انتگرال در متلب
دستور input در متلب
دستور ezplot در متلب
18 دیدگاه
به گفتگوی ما بپیوندید و دیدگاه خود را با ما در میان بگذارید.
سلام چطوری درایه های زوج یک ماتریس را صفر قرار دهیم و درایه های منفی تغییر نکند؟
سلام یه ماتریس با هفت سطر و یک ستون دارم میخوام تبدیل به ماتریسی بشه که نه سطر و یک ستونه باشه به شرطی که درایه های ماتریس قبلی حفظ بشه اما مثلا سطر دوم ماتریس قبل بشه سطر سوم ماتریس جدید منتهی با حفظ مقدار قبلی.
سلام
برنامه ای بنویسید که یک مقدار n دریافت کرده و ماتریس جادویی n*n نظیر را چاپ کند.
درواقع باید الگوریتم رو به صورت برنامه نویسی در متلب بنویسم اما نمیدونم از چه حلقه ای استفاده کنم ممنون میشم اگر راهنمایی کنید.
سلام تابعی که یک ماتریس و یک عدد را به عنوان ورودی بگیرد و تعیین کند که آن ماتریس صفر و یک است یا خیر.و اگر ماتریس a صفر و یک بود درایه های ماتریس بصورت سطر جمع کند تا زمانی که مجموع درایه ها از آن عدد کوچکتر باشد و شماره سطر و ستونی که مجموعه آن عدد میشود را به عنوان خروجی چاپ کند؟
سلام. وقت شما به خیر
من دو ماتریس با 10 سطر و 11 ستون دارم. تمام ستون هارا باید در هم به صورت درایه به درایه ضرب کنم و در نهایت انتگرال عددی بگیرم. احتیاج به حلقه for دارم که بتواند خودش درایه ها ی همه ستون هارا دو به دو در هم ضرب کند. ممنون میشوم راهنمایی کنید؟
سلام
میخوام ی تابعی بنویسم که تعداد اعداد زوج یک ماتریس رو شمارش کند
ممنون
سلام میخواستم منطق چاپ کردن ستاره بصورت مربع، بوسیله ی حلقه های تو در توfor ، رو بدونم.
فلوچارتش به چه صورت میشه؟
سلام، با کد زیر میتونید به هدفتون برسید
n = 9;
for i=1:n
a = char(ones(1, n) * ‘*’);
disp(a)
end
سلام خیلی ممنون.من با این برنامه نوشتم
;b=input(‘inter a number:’)
for i=1:1:b
for j=1:1:b
; (‘ *’) fprintf
end
; (‘ n\’) fprintf
end
اکه امکانش هست میخواستم فلوچارت این برنامه رو بدونم
ایمیلمو میذارم
تشکر از سایت و پاسخگویی خوبتون
ممنون میشم اگر دوره ای در این زمینه هست معرفی کنید.
چطور الگوریتم نویسی ماتریس ها را یاد بگیرم.در این زمینه بسیار ضعیف هستم
سلام
چطور میتونیم به جای دستور sort با استفاده از دستورات شرطی و حلقه for ارایه های یک ماتریس را یکبار ستونی و یکبار سطری از کوچک به بزرگ و بالعکس مرتب کنیم
برنامه ای بنویسید که ماتریس مربعی بگیرد، تا زمانی که دترمینان کوچک تر از 200 است، به درایه های بالای قطر 3 تا اضافه کنه، به درایه های زیر قطر 6 تا اضافه کنه، به درایه های روی قطر 9 تا اضافه کنه
سلام، کد زیر این کار رو انجام میده
a = [1, 2, 3, 4; 5, 6, 7, 8; 9, 10, 11, 12; 13, 14, 15, 16];
[m, n] = size(a);
while det(a)<200
disp(det(a))
for i = 1 : m
for j = 1 : n
if i > j
a(i, j) = a(i, j) + 6;
elseif i == j
a(i, j) = a(i, j) + 9;
else
a(i, j) = a(i, j) + 3;
end
end
end
end
سلام ماتریسی صفر و یک داریم بخواهیم درایه ها را بررسی کنیم و متناظر با آن ماتریس جدیدی بسازیم. مثلا به ازای هر درایه صفر در ماتریس جدید متغیر x و به ازای هر درایه یک در ماتریس جدید درایه متناظر متغیر y باشد؟
سلام،
باید از ترکیب for و if استفاده کنید. کدش شبیه به این میشه:
my_mat = [1, 0, 0;
0, 0, 1;
1, 1, 0];
[m, n]= size(my_mat);
x = 11;
y = 10;
for i = 1: m*n
if my_mat(i) == 0
my_mat(i) = x;
else
my_mat(i) = y;
end
end
سلام
برنامه ای بنویسید که با داشتن یک ماتریس ۵ عددی ، کسر اعداد مثبت ، کسر اعداد منفی و کسر اعداد صفر رو نشون بده .
مثال :
ماتریس a عبارتست از [9 8 0 -2 -7]
نتیجه :
2/5
2/5
1/5
سلام وقتتون بخیر
تابعی با اسم titles_coure تعریف کنید که با اجرای آن، از کاربر تعداد عناوین دروس )n )گرفته شود. سپس اسم هر عنوان از
کاربر گرفته و در ماتریس T با سایز 1×n ذخیره گردد. درنهایت مقدار این ماتریس در فایل mat.list_saved ذخیره گردد.