آموزش ایجاد آرایه در متلب
به نام خدا و سلام.
به جلسه چهارم از سری جلسات آموزش متلب خوش آمدید. در جلسه قبل با نگاهی دقیقتر به مباحث وارد کردن دستورات و ایجاد متغیر در فضای کاری متلب پرداختیم. دیدیم که نحوه ایجاد یک متغیر عددی ساده در متلب به چه صورت است. همچنین قوانینی برای نامگذاری متغیرها ارائه شد. از این جلسه وارد مبحث آرایهها (بردار و ماتریس) در نرم افزار متلب میشویم. موضوع آرایهها در متلب از نقطه نظرات مختلفی حائز اهمیت است. ایجاد و الحاق آرایهها، اندیس گذاری آرایهها، عملیات ریاضی روی بردارها و ماتریسها و… از جمله این موارد اند. اما در این جلسه به طور کامل به ایجاد آرایه برداری و ماتریسی و الحاق آنها میپردازیم. اندیس گذاری آرایهها، عملیات ریاضی روی آرایهها و… در جلسات بعد ارائه میشوند.
با متلب پلاس همراه باشید.
مقدمهای بر آرایهها در متلب
زمانی که متلب برای اولین بار عرضه شد (در حدود سال 1985)، یک ماشین حساب ماتریسی بود. نام نرم افزار متلب (MATLAB) نیز براساس ماتریسها ایجاد شد. در واقع نام اصلی نرم افزار متلب، آزمایشگاه ماتریسها (Matrix Laboratory) است. نرم افزار متلب تمامی پردازشهای محاسباتی، گرافیکی و… خود را از طریق ماتریسها انجام میدهد. چه محاسبات ما اسکالر (عددی) ساده باشد و چه ماتریس یا بردار. یک عدد ساده نیز از دید متلب، یک ماتریس یک در یک است. یک بردار سطری که دارای 3 عضو است نیز یک ماتریس است. چرا که این بردار یک ماتریس یک در 3 میباشد. در آموزش برنامه نویسی متلب دانستن این نکته ضروری است که متلب همه چیز را به چشم ماتریس میبیند.
ایجاد بردار در متلب
یک بردار دارای چند عضو است که میتواند سطری یا ستونی باشد. در شکل زیر بردار سطری و ستونی دیده میشود.
در واقع بردار سطری دارای یک سطر و چندین ستون است. به این صورت که اعضا (درایهها) در یک سطر کنارهم قرار گرفتهاند. اما بردار ستونی دارای یک ستون و چندین سطر است. در این حالت درایهها در یک ستون، زیر هم قرار میگیرند.
به طور کلی 3 راه برای ایجاد بردار در متلب وجود دارد. اولین و رایجترین روش ایجاد بردار استفاده از براکت [ ] است. به این صورت که درایههای بردار درون این براکت قرار میگیرند. دومین روش، استفاده از گامهای زمانی با عملگر : است. سومین روش نیز مقداردهی به بردار خالی است که معمولا به کمک حلقهها انجام میشود. در ادامه جزئیات بیشتر برای ایجاد بردار ارائه میشود.
لطفا نرم افزار متلب را باز کنید و تمام مثالهایی که در ادامه میآیند را شما هم بنویسید!
ایجاد بردار در متلب با استفاده از براکت
در این روش از براکت برای ایجاد بردار استفاده میکنیم. کافیست تا مستقیما درایههای موردنظر خود را درون این براکت بنویسیم.
برای ایجاد بردار سطری با استفاده از براکت در متلب، بین درایهها از علامت کاما (,) یا فاصله (Space) استفاده میکنیم. به صورت زیر.
A = [1, 12, 31, 4, 12]
A =
1 12 31 4 12
B = [1 12 31 4 12]
B =
1 12 31 4 12
مشاهده میشود که این دو بردار سطری هیچ تفاوتی باهم ندارند. چه از علامت کاما استفاده کنیم و چه از فاصله.
برای ایجاد بردار ستونی با استفاده از براکت در متلب، بین درایهها از علامت نقطه ویرگول (;) یا اینتر (Enter) استفاده میکنیم. به صورت زیر.
A = [1; 12; 31; 4; 12]
A =
1
12
31
4
12
B = [1
12
31
4
12]
B =
1
12
31
4
12
مشاهده میشود که این دو بردار ستونی هیچ تفاوتی باهم ندارند. چه از علامت نقطه ویرگول استفاده کنیم و چه از Enter (فاصله بین خطوط).
ایجاد بردار در متلب با استفاده از عملگر دو نقطه (:)
این روش در واقع ایجاد یک دنباله با ابتدا، انتها و گام زمانی مشخص است. ایجاد دنباله در متلب، با استفاده از عملگر دو نقطه (:) انجام میشود. به این صورت که اول، شروع بازه، سپس گام و پس از آن انتهای بازه مشخص میشود.
% A = a: s : n;
% a = start
% s = step
% n = final value
در عبارت بالا، a شروع، s گام و n انتها میباشد. برای مثال یک دنباله ایجاد میکنیم که شامل اعداد 3 تا 15 با گام 3 باشد.
A = 3:3:15
پس از اجرا داریم:
A =
3 6 9 12 15
به همین راحتی برداری ایجاد کردیم که دارای 5 عضو میباشد. توجه داشته باشید که چنانچه مقدار گام را وارد نکنیم، متلب آن را برابر یک درنظر میگیرد. مثلا:
F = 1:8
پس از اجرا داریم:
F =
1 2 3 4 5 6 7 8
همه بردارهایی که به این روش ساخته میشوند، سطری هستند. برای ایجاد بردار ستونی، کافیست بردار سطری را ترانهاده کنیم. برای ترانهاده کردن یک بردار از علامت کوتیشین (‘) یا دستور transpose استفاده میکنیم. در مثال زیر ابتدا یک بردار سطری با عملگر دو نقطه (:) ایجاد میکنیم. سپس آن را به بردار ستونی تبدیل میکنیم.
C = 7:2:13
C =
7 9 11 13
C'
ans =
7
9
11
13
transpose(C)
ans =
7
9
11
13
مشاهده میشود که خروجی به صورت بردار ستونی میباشد.
در اینجا بد نیست به 2 دستور پرکاربرد دیگر برای ایجاد بردار اشاره کنیم. دستور linspace و logspace. طرز کار با هر دو دستور یکسان است. با این تفاوت که linspace دنبالهای با گام خطی ایجاد میکند و logspace با گام لگاریتمی. linspace(a,b,n) یک بردار از a تا b با تعداد n درایه ایجاد میکند. فاصله بین درایهها نیز یکسان است. اگر n وارد نشود، به طور پیشفرض 100 عدد را تولید میکند. اما logspace(a,b,n) یک بردار n تایی از 10 به توان a تا 10 به توان b ایجاد میکند. فاصله بین درایهها از نظر لگاریتمی یکسان است. ضمناً اگر n در دستور logspace وارد نشود، به طور پیشفرض 50 عدد را تولید میکند. به مثالهای زیر دقت کنید.
linspace(2,8,4)
پس از اجرا داریم:
ans =
2 4 6 8
logspace(1,4,4)
پس از اجرا داریم:
ans =
10 100 1000 10000
ایجاد بردار در متلب با مقداردهی بردار خالی
این روش به دوستانی که جلسات آموزش متلب را دنبال میکنند پیشنهاد نمیشود. چرا که هنوز در جلسات ابتدایی هستیم و وارد مبحث حلقهها در متلب نشدهایم. اما اگر با حلقهها در متلب آشنا هستید، این روش یک روش عالی برای ایجاد بردار است. (برای مشاهده آموزش حلقه for در متلب روی عبارت قرمز رنگ کلیک نمائید.)
در این روش، ابتدا یک بردار خالی درنظر میگیریم. سپس درایههای این بردار را با محاسبات ریاضی تکمیل میکنیم. مثلا میخواهیم برداری ستونی و 4 عضوی ایجاد کنیم که درایههای آن، توانهای عدد 2 باشد.
A = [];
for i = 1 : 4
A(i) = i^2;
end
A
پس از اجرا داریم:
A =
1 4 9 16
این بردار ستونی با ویژگی ریاضی مدنظر ما ایجاد شد. با ترانهاده کردن آن، میتوانیم بردار سطری نیز بسازیم. به مثال زیر توجه کنید.
A = [];
for i = 1 : 4
A(i) = i^2;
end
A'
پس از اجرا داریم:
ans =
1
4
9
16
ایجاد ماتریس در متلب
برای ایجاد ماتریس ابتدا حالت کلی یک ماتریس را که دارای m سطر و n ستون است درنظر میگیریم. مطابق شکل زیر.
چنانچه m و n برابر باشند، ماتریس مربعی خواهد بود.
ایجاد ماتریس در متلب معمولا به دو روش صورت میگیرد. روش اول استفاده از براکت [ ] و روش دوم مقداردهی مستقیم است. در ادامه جزئیات بیشتر برای ایجاد ماتریس ارائه میشود.
ایجاد ماتریس در متلب با استفاده از براکت
در بخش قبل برای ایجاد بردار سطری از علامت کاما (,) یا فاصله و برای بردار ستونی از نقطه ویرگول (;) یا Enter استفاده کردیم. برای ایجاد ماتریس از ترکیب این دو روش استفاده میکنیم. در واقع یک ماتریس شامل چند بردار سطری است که بصورت ستونی کنار هم قرار گرفتهاند. به شکل زیر دقت کنید.
بنابراین برای ایجاد یک ماتریس در متلب، درایههای روی یک سطر را با کاما یا فاصله ایجاد میکنیم. برای رفتن به سطر بعد نیز از نقطه ویرگول (;) یا Enter استفاده میکنیم.
حال چند ماتریس مختلف را در متلب با استفاده از براکت ایجاد میکنیم.
مثال اول از ایجاد ماتریس در متلب
A = [1, 2, 3; 4, 5, 6; 7 8 9]
پس از اجرا داریم:
A =
1 2 3
4 5 6
7 8 9
مثال دوم از ایجاد ماتریس در متلب
B = [1 2 3
4 5 6
7 8 9]
پس از اجرا داریم:
B =
1 2 3
4 5 6
7 8 9
در نرم افزار متلب، کاما (,) و فاصله (Space) معادل یکدیگر هستند. کاربرد این دو کاراکتر جداکردن ستونها از یکدیگر است. مشابه آن برای جدا کردن سطرها هم میتوان یا به خط بعد رفت یا نقطه ویرگول (;) استفاده کرد.
توجه کنید که اگر تعداد عناصر در هر سطر یا تعداد عناصر در ستونها برابر نباشند با خطا مواجه میشویم.
A = [1 2 3; 1 4]
Dimensions of matrices being concatenated are not consistent.
پیغام خطای متلب “ابعاد ماتریسهایی که در حال الحاق هستند، باهم برابر نیست” میباشد. بنابراین برای ایجاد ماتریس در متلب به تعداد درایههای هر سطر و ستون دقت داشته باشید.
ایجاد ماتریس در متلب با استفاده از مقداردهی
در این روش، مشابه با آنچه برای ایجاد بردارها با مقداردهی در متلب گفته شد عمل میکنیم. این روش به مبحث حلقههای تکرار نیازمند است. آموزش حلقههای تکرار در جلسه 18 ام ارائه شده است. (فهرست سمت راست👉)
در این روش، ابتدا یک ماتریس صفر درنظر میگیریم. سپس درایههای این ماتریس را با محاسبات ریاضی تکمیل میکنیم. برای ایجاد ماتریس صفر از دستور zeros یا عدد صفر استفاده میکنیم. دستور zeros به همراه تمامی ماتریسهای خاص در جلسه هشتم آموزش متلب به طور کامل ارائه میشود. مثلا یک ماتریس صفر با ابعاد 3×3 ایجاد میکنیم. برای این کار 2 راه داریم:
A = zeros(3,3)
پس از اجرا داریم:
A =
0 0 0
0 0 0
0 0 0
B(3,3) = 0
پس از اجرا داریم:
B =
0 0 0
0 0 0
0 0 0
حال با استفاده از حلقهها، درایههای این ماتریس را پر میکنیم. کافیست یک عبارت ریاضی برای هر درایه ینویسیم. مثلا هر درایه برابر با جمع توان 2 شماره سطر و ستون آن باشد. یعنی:
for i = 1 : 3
for j = 1 : 3
A(i,j) = i^2 + j^2;
end
end
A
پس از اجرا داریم:
A =
2 5 10
5 8 13
10 13 18
به این ترتیب یک ماتریس با استفاده از مقداردهی ایجاد شد.
الحاق آرایهها (بردار و ماتریس) در متلب
منظور از الحاق آرایهها، کنار هم قرار دادن آرایههای عددی میباشد. برای الحاق دو آرایه به یکدیگر در برنامه متلب دو راه وجود دارد: استفاده از براکتها [ ] و یا استفاده از تابعهای پیشبینی شده در متلب.
استفاده از براکت بسیار ساده و کاربردی است. در این روش برای قرار دادن آرایهها به صورت سطری در کنار هم از کاما (,) یا فاصله (Space) استفاده میشود. همچنین برای قرار دادن به صورت ستونی از نقطه ویرگول یا Enter استفاده میشود.
توابع آمادهای نیز در متلب وجود دارند که فرآیند الحاق را انجام میدهند. معروفترینِ این توابع، horzcat و vertcat میباشد. تابع horzcat مخفف Horizontal Concatenation است و آرایهها را به صورت افقی (کنار هم) الحاق میکند. تابع vertcat نیز مخفف Vertical Concatenation است و آرایهها را به صورت عمودی (زیر هم) الحاق میکند.
الحاق بردارها در متلب
الحاق بردارها یعنی عناصر دو یا چند بردار به ترتیب دلخواه به صورت افقی یا عمودی کنار هم قرار گیرند. برای نمونه دو بردار A و B را در نظر بگیرید، قصد داریم به چند روش این دو بردار را به یکدیگر ملحق کنیم به صورتی که در ابتدا عناصر A و سپس عناصر B و قرار گیرند.
A = [1 2 3];
B = [4; 5; 6];
horzcat(A,B')
ans =
1 2 3 4 5 6
vertcat(A,B')
ans =
1 2 3
4 5 6
horzcat(A',B)
ans =
1 4
2 5
3 6
vertcat(A',B)
ans =
1
2
3
4
5
6
A = [1 2 3];
B = [4; 5; 6];
C1 = [A B']
C1 =
1 2 3 4 5 6
C2 = [A; B']
C2 =
1 2 3
4 5 6
C3 = [A' B]
C3 =
1 4
2 5
3 6
C4 = [A'; B]
C4 =
1
2
3
4
5
6
الحاق ماتریسها در متلب
مشابه الحاق بردارها، دو روش برای الحاق ماتریسها نیز وجود دارد، استفاده از براکتها و توابع متلب. البته عملکرد هردو مشابه است و معادل یکدیگر هستند. برای الحاق ماتریسها باید توجه کنیم که اندازههای ماتریسها همخوانی داشته باشند، در غیر این صورت با خطا مواجه میشویم. در مثال زیر دو ماتریس یکبار به صورت افقی و یکبار به صورت عمودی باهم الحاق کردهایم. این الحاق کردن ماتریسها با استفاده از هر دو روش براکت و توابع انجام شدهاست.
A = [1 2; 3 4];
B = [4 5; 7 8];
horzcat(A,B)
ans =
1 2 4 5
3 4 7 8
vertcat(A,B)
ans =
1 2
3 4
4 5
7 8
A = [1 2; 3 4];
B = [4 5; 7 8];
C1 =[A B]
C1 =
1 2 4 5
3 4 7 8
C2 = [A; B]
C2 =
1 2
3 4
4 5
7 8
تمرینات این جلسه
در انتهای این جلسه 3 تمرین متلب مربوط به مباحث این جلسه ارائه شده است. لطفا این تمرینها را حل کرده و با پاسخ آن مقایسه کنید. پاسخ تمرینات متلب این جلسه در کانال تلگرام متلب پلاس منتشر میشود. از آیکونهای سمت راست صفحه میتوانید در این کانال عضو شوید.
تمرین اول) برداری سطری با درایههای 1، 5، 16 و 10- ایجاد کنید.
تمرین دوم) بردار سطری تمرین قبل را به یک بردار ستونی تبدیل کنید.
تمرین سوم) بردارهای تمرین اول و دوم را باهم الحاق کرده و یک ماتریس 2×4 بسازید.
جمعبندی
جلسه چهارم از سری جلسات آموزش نرم افزار متلب در اینجا به پایان میرسد. در این آموزش سعی کردیم تا مفاهیم اساسی ایجاد آرایه (شامل بردار و ماتریس) در متلب را پوشش دهیم. هدف اصلی تیم متلب پلاس ارائه آموزش متلب به صورت حرفهای و توجه کامل به یادگیری است. از شما عزیزان تقاضا داریم که همه این جلسات را به طور پیوسته دنبال کنید. چرا که با تکرار، یادگیری شما در متلب به طرز شگفت انگیزی افزایش مییابد.
توصیه میشود که حتما تمرینات این جلسه را انجام بدید و اگر سوال و ابهامی دارید در بخش نظرات (پایین همین صفحه) به ما بگید. از فهرست سمت راست هم میتونید به بقیه جلسات دسترسی داشته باشید.
13 Comments
به گفتگوی ما بپیوندید و دیدگاه خود را با ما در میان بگذارید.
سلام
وقت بخیر
چگونه میتوان بردار n بعدی با مولفههای متفاوت تعریف کرد مثلا یک بردار ۱۰۰۰ بعدی با مولفههای متفاوت؟
سلام علی جان
برای تعریف بردار در متلب در همین پست 3 روش رو ارائه کردیم. هم میتونید به صورت دستی درایههای بردارها رو وارد کنید و هم به صورت اتوماتیک (با حلقه for). اما روش دیگهای هم برای تعریف بردار با ابعاد بالا (مثل بردار 1000 عضوی که گفتی) وجود داره. این روش، پر کردن بردار با استفاده از اعداد تصادفی هست. مثلا میشه یک بردار 1000 تایی از اعداد تصادفی با توزیع استاندارد یا اعداد تصادفی در بازه دلخواه تعریف کرد. دستور rand و randn متلب در این مورد کاربرد دارند. توصیه میکنم که حتما به آموزش تولید اعداد تصادفی در متلب یه سر بزن. در این پست بطور کامل نحوه ی تعریف اعداد تصادفی با توزیعهای مختلف رو ارائه کردیم.
خیلی ممنون از توضیحات کامل و جامع تون. لطف کردید.
سلام ضمن عرض خسته نباشید, تشکر می کنم از شما بابت این سایت بسیار زیبا و پرمحتوا. چند وقتی بود که دنبال آموزش متلب بودم اما سایت ها خیلی پراکنده بودند و چندآن چیزی یاد نگرفتم, به طور تصادفی در آپارات با سایت شما آشنا شدم و با دیدن یک کلیپ متوجه شدم که بسیار زیبا و جامع تدریس می کنید… باز هم تشکر و به امید آنکه مطالب پرمحتوا تر را نیز در سایت تان قرار دهید.
سلام علی عزیز
خیلی ممنون و متشکریم از اینکه نظرتون رو با ما به اشتراک گذاشتید. واقعا پیامهای شما و دوستان در سایت یا اینستاگرام، باعث میشه انگیزه و اراده بیشتری در زمینه تولید محتوای آموزشی متلب داشته باشیم.
بازهم ممنونیم از لطفت و خیلی خوشحالیم که این آموزش ها برات مفید بوده.
سلام
خواستم تشکری کنم از محتواهای با کیفیت شما.خیلی عالیه که از صفر و به صورت منظم و برنامه ریزی شده مطالب رو در اختیارمون قرار میدید.
امیدوارم بدرخشید…
با سلام و احترام
تمام تلاش ما در تیم متلبپلاس ارائه خدمات باکیفیت است. ممنون که نظر خودتون رو با ما به اشتراک گذاشتید.
این قسمت هم عالی بود ، عید خوبی رو با سایتتون شروع کردم ؛ ممنونم.
چه عالی، امیدوارم سال خوبی در پیش داشته باشید.
سلام ودرود،خسته نباشید میگم به شما و همکارانتون بابت زحمات این مطالب و انتشار اونها برای عموم.
با سلام و احترام
ممنون، نظرات شما عزیزان انگیزه مضاعفی برای کار ایجاد میکند.
موفق باشید
خسته نباشید
تشکر بابت توضیحات کامل و جامع
خوشحالیم که تلاشهامون مثمر ثمر واقع شده، موفق باشید.