آموزش عملیات ریاضی روی آرایهها در متلب
به نام خدا و سلام.
به جلسه هفتم آموزش رایگان نرم افزار متلب خوش آمدید. آموزش صفر تا صد نرم افزار متلب توسط وبسایت متلب پلاس به صورت کاملا رایگان ارائه میشود. در جلسه چهارم آموزش متلب به ایجاد آرایهها در متلب پرداختیم. سپس در جلسه پنجم به اندیس گذاری و فراخوانی مقادیر از آرایه پرداختیم. در جلسه قبل نیز به تغییرشکل، اندازه، دوران و مرتب سازی آرایهها در متلب اشاره شد. دسترسی سریع به این جلسات و تمامی جلسات آموزش متلب از منوی سمت راست وجود دارد. حال نوبت به عملیات ریاضی روی آرایهها (بردار و ماتریس) میرسد. در این جلسه به عملیات ریاضی روی آرایهها در متلب (شامل جمع، تفریق، ضرب، تقسیم، توان، دترمینان و… میپردازیم.
با متلب پلاس همراه باشید.
مقدمهای بر عملیات ریاضی روی آرایهها در متلب
نرم افزار متلب از زمان انتشار اولیه، یک ماشین حساب پیشرفته مهندسی بود. در کنار افزایش توان محاسباتی و انجام عملیاتهای مختلف، متلب به یک زبان برنامه نویسی و تحلیل داده تبدیل شد. اما همچنان هسته اصلی آن را محاسبات پیچیده ریاضی تشکیل میدهد. به نوعی که این نرم افزار توان پردازش انواع محاسبات ریاضی را دارد. در این آموزش متلب رایگان به عملیاتهای پایه ریاضی نظیر جمع، تفریق، ضرب، تقسیم و… روی اعداد، بردارها و ماتریسها میپردازیم.
جمع و تفریق بردارها و ماتریسها در متلب
جمع و تفریق بردارها و ماتریسها در متلب
سادهترین عملیات ریاضی که با استفاده از نرم افزار متلب میتوان انجام داد، جمع و تفریق اعداد ساده (اسکالر) است. برای این کار کافیست اعداد را نوشته و جمع و تفریق را انجام دهیم. جمع و تفریق آرایههای برداری و ماتریسی نیز به همین صورت است. شرط موردنیاز برای جمع و تفریق بردارها و ماتریسها در متلب، برابر بودن ابعاد آنها است. مثلا یک ماتریس 2×2 با یک ماتریس 4×3 قابل جمع و تفریق نیست. و یا مثلا یک بردار 7×1 با یک بردار 5×1 قابل جمع و تفریق نیست. شرط برابر بودن ابعاد دقیقا مشابه آنچه در ریاضیات داریم است.
- برای جمع دو یا چند بردار یا ماتریس از علامت + استفاده میکنیم.
- برای تفریق دو یا چند بردار یا ماتریس از علامت – استفاده میکنیم.
در مثالهای زیر جمع و تفریق دو بردار و دو ماتریس در متلب نشان داده شدهاست.
A = [1 4 7; 6 -1 0; 8 9 11];
B = [5 7 1; -1 9 13; 0 2 6];
A + B
ans =
6 11 8
5 8 13
8 11 17
A - B
ans =
-4 -3 6
7 -10 -13
8 7 5
a = [6 9 26 1 2];
b = [12 0 1 51 3];
a + b
ans =
18 9 27 52 5
a - b
ans =
-6 9 25 -50 -1
جمع و تفریق عدد اسکالر با بردار و ماتریس در متلب
برای کم یا اضافه کردن یک مقدار مشخص به یک بردار یا ماتریس در متلب، از جمع و تفریق استفاده میکنیم. جمع یا تفریق یک عدد اسکالر با هر بردار یا ماتریسی (با هر ابعادی که باشد) مجاز است. متلب براساس مقدار وارده شده، به تمام درایههای بردار یا ماتریس کم یا زیاد میکند. مثلا:
a = 5;
b = [1 3 8 9];
c = [2 4; 1 8];
a + b
ans =
6 8 13 14
a + c
ans =
7 9
6 13
ضرب بردارها و ماتریسها در متلب
ضرب اسکالر در بردار یا ماتریس در متلب
منظور از ضرب اسکالر، ضرب یک عدد ساده در یک بردار یا ماتریس است. بدیهی است که در این صورت همه درایههای ماتریس یا بردار در عدد موردنظر ضرب میشوند. ابعاد بردار یا ماتریس اهمیتی در این نوع ضرب ندارد.
a = 5;
u = [1 8 4 3];
A = [1 4 7; 6 -1 0; 8 9 11];
a * u
ans =
5 40 20 15
a * A
ans =
5 20 35
30 -5 0
40 45 55
ضرب عنصری (درایه به درایه) آرایهها در متلب
منظور از ضرب عنصری، ضرب درایههای متناظر یک آرایه (بردار یا ماتریس) در آرایه (بردار یا ماتریس) دیگر است. برای این نوع ضرب حتما بایستی ابعاد دو آرایه باهم برابر باشد. ضرب عنصری دو آرایه در متلب با استفاده از ‘ *. ‘ انجام میشود. به مثالهای زیر دقت کنید.
A = [1 4 7; 6 -1 0; 8 9 11];
B = [5 7 1; -1 9 13; 0 2 6];
A .* B
ans =
5 28 7
-6 -9 0
0 18 66
u = [9 3 7 -1];
w = [2 -13 5 11];
u .* w
ans =
18 -39 35 -11
مشاهده میشود که درایههای متناظر درهم ضرب شدهاند.
ضرب ماتریسی در متلب
این نوع ضرب، ضرب آشنای ماتریسی است که در دبیرستان با آن آشنا شدیم. این ضرب در صورتی قابل انجام است که ماتریسی به ابعاد m*n در ماتریسی به ابعاد n*k ضرب شود. حاصل این ضرب، ماتریسی به ابعاد n*k خواهد بود. در واقع بایستی تعداد سطرهای ماتریس دوم با تعداد ستونهای ماتریس اول برابر باشد. در شکل زیر نمایش گرافیکی این موضوع دیده میشود.
ضمنا توجه داشته باشید که ضرب ماتریسی خاصیت جابجایی ندارد. یعنی اگر ضرب A در B قابل انجام باشد. ضرب B در A ممکن است قابل انجام نباشد. نتیجهی هر مورد نیز لزوما با دیگری یکسان نخواهد بود.
C = rand(3);
D = rand(3);
C*D
ans =
0.2786 0.6230 1.0214
0.1006 0.1465 0.3464
0.2572 0.5980 1.1752
D*C
ans =
0.9342 0.7081 0.3079
0.5270 0.3838 0.1954
0.6801 0.7172 0.2824
A = [1 4 7; 6 -1 0; 8 9 2; 7 5 1];
B = [1 2; 5 8; 7 9];
A*B
ans =
70 97
1 4
67 106
39 63
B*A
Error using *
Inner matrix dimensions must agree.
در مثال سمت چپ فوق، گرچه A در B ضرب شده اما B در A ضرب نمیشود. در مثال سمت راست نیز، ضرب هر دو حالت امکان پذیر است اما پاسخ باهم تفاوت دارد.
ضرب نقطهای در متلب
ضرب نقطهای (Dot Product) نوعی ضرب است که برای بردارها تعریف شده و پاسخ آن یک اسکالر است. ضرب نقطهای، تک تک درایههای بردارها را در یکدیگر ضرب کرده و مجموع آنها را محاسبه میکند. به همین دلیل پاسخ نهایی یک عدد ساده است. برای محاسبه ضرب نقطهای در متلب از دستور dot استفاده میشود. در مثالهای زیر از این ضرب برای ضرب دو بردار و دو ماتریس استفاده شدهاست.
A = [1 4 7; 6 -1 0; 8 9 2];
B = [1 2 2; 5 6 8; 0 7 9];
dot(A,B)
ans =
31 65 32
u = [9 3 7];
v = [4 2 3];
dot(u,v)
ans =
63
u(1)*v(1) + u(2)*v(2) + u(3)*v(3)
ans =
63
از این دستور برای ضرب نقطهای ماتریس هم میتوان استفاده کرد. نحوه ضرب نقطهای در ماتریس مطابق با انجام آن برای بردار است.
ضرب خارجی در متلب
ضرب خارجی (Cross Product) نوعی ضرب است که برای بردارها تعریف شده و پاسخ آن یک بردار است. از نظر جبر خطی، بردار حاصل، بر هر دو بردار اولیه عمود است.
u = [9 3 7];
v = [4 2 3];
cr = cross(u,v);
dot(u,cr)
ans =
0
dot(v,cr)
ans =
0
u = [9 3 7];
v = [4 2 3];
cross(u,v)
ans =
-5 1 6
در مثال سمت راست فوق عمود بودن بردار حاصل ضرب بر بردارهای اولیه اثبات شدهاست. قضیهای در جبر خطی داریم که بیان میکند، ضرب نقطهای دو بردار عمود بر هم، صفر است. بنابراین عمود بودن بردار cr بر u و v اثبات شدهاست.
تقسیم بردارها و ماتریسها در متلب
تقسیم معمولی اعداد اسکالر ساده در متلب با استفاده از / انجام میشود. البته متلب نوع دیگری از تقسیم دارد که با \ انجام میشود. این تقسیم، تقسیم برعکس است.
12/3
ans =
4
3\12
ans =
4
تقسیم ماتریس و بردار بر اسکالر
تقسیم یک بردار یا ماتریس بر عدد اسکالر، مشابه با ضرب آنهاست. کافیست بردار یا ماتریس را بر عدد موردنظر تقسیم کنیم. در این تقسیم هیچ محدودیتی برای ابعاد و اندازهها نداریم.
A = [1 4 7; 6 -1 0; 8 9 2];
A/4
ans =
0.2500 1.0000 1.7500
1.5000 -0.2500 0
2.0000 2.2500 0.5000
تقسیم درایه به درایه
مشابه با ضرب عنصری (درایه به درایه)، تقسیم درایه به درایه نیز تعریف میشود. ابعاد ماتریس یا بردارها در این حالت باید باهم برابر باشند. برای تقسیم درایه به درایه از عملگر /. استفاده میکنیم. در واقع یک نقطه قبل از تقسیم اضافه میشود.
r1 = [1 2 3];
r2 = [6 7 2];
r1./r2
ans =
0.1667 0.2857 1.5000
تقسیم ماتریسها
حتماً تا به حال عبارت تقسیم ماتریسی به گوشتان نخورده است. یکی از قابلیتهای ماتریسها که بسیار از آن استفاده میشود، حل دستگاه معادلات خطی در متلب است. این تعریف، مشابه با معکوس ماتریس در ریاضیات است. مثلا برای حل دستگاه معادلات خطی به فرم A*X=B از آن استفاده میکنیم. در این فرم معادله، پاسخ عبارت است از X=B/A. در مثال زیر یک دستگاه معادلات خطی حل شدهاست.
A = [1 3 4;5 1 8; 7 1 2];
B = [1; 5; 8];
A\B
ans =
1.1613
0.0968
-0.1129
توجه داریم که برای تقسیم B بر A از عملگر تقسیم برعکس (یعنی A\B) استفاده شدهاست. به این دلیل که از نظر ابعادی با خطا مواجه نشویم.
به توان رسانی ماتریس و بردار در متلب
برای به توان رساندن عدد، بردار و یا ماتریس در متلب، از عملگر ^ استفاده میکنیم.
4^2
ans =
16
اما برای ماتریسها، دو نوع به توان رساندن در متلب تعریف شدهاست. توان رسانی عنصری و توان رسانی ماتریسی.
به توان رساندن ماتریسها در متلب
با این نوع توان رسانی، یک ماتریس در خودش ضرب ماتریسی میشود. مثلا A^2 برابر است با A*A. به عنوان یک نکته درنظر داشته باشید که توان 1- در این حالت معادل با معکوس ماتریس است. (مثال در پایین ارائه شده)
به توان رساندن هر درایه از ماتریس در متلب
در این نوع از توان رسانی، هر درایه در خودش ضرب میشود. پاسخ این نوع توان رسانی با نوع قبل متفاوت است. برای توان رسانی هر درایه از ماتریس، از ^. استفاده میکنیم. در واقع یک نقطه قبل از ^ اضافه شدهاست.
توان رسانی درایهای
A = [1 7 3; 5 8 9; -1 9 1]
A.^2
ans =
1 49 9
25 64 81
1 81 1
A.*A
ans =
1 49 9
25 64 81
1 81 1
توان رسانی ماتریسی
A = [1 7 3; 5 8 9; -1 9 1];
A^2
ans =
33 90 69
36 180 96
43 74 79
A*A
ans =
33 90 69
36 180 96
43 74 79
همانطور که مشاهده میشود، توان 2 در این نوع توان رسانی، معادل با ضرب عنصری یک ماتریس در خودش است.
محاسبه دترمینان و معکوس ماتریسها در متلب
محاسبه دترمینان ماتریس در متلب
دترمینان برای یک ماتریس مربعی تعریف میشود. برای محاسبه دترمینان ماتریس در متلب از دستور det استفاده میشود. ماتریس ورودی حتما باید مربعی باشد.
A = [1 7 3; 5 8 9; 3 9 1];
det(A)
ans =
144
محاسبه معکوس ماتریس در متلب
معکوس ماتریس، با استفاده از دستور inv در متلب محاسبه میشود. البته معکوس یک ماتریس با توان منفی یک (1-) نیز قابل محاسبه است. توجه داشته باشید که معکوس ماتریس، فقط برای ماتریسهای مربعی که دترمینان آنها غیر صفر است تعریف شدهاست.
A = [1 7 3; 5 8 9; 3 9 1];
inv(A)
ans =
-0.5069 0.1389 0.2708
0.1528 -0.0556 0.0417
0.1458 0.0833 -0.1875
A^-1
ans =
-0.5069 0.1389 0.2708
0.1528 -0.0556 0.0417
0.1458 0.0833 -0.1875
مقایسه عملیات ریاضی روی ماتریسها و درایهها
در انتهای این جلسه، مقایسهای بر عملیات ریاضی روی آرایهها و اعداد معمولی داریم.
تقدم اپراتورها (Operator Precedence) در متلب
تقدم اپراتورهای ریاضی در یک عبارت محاسباتی به صورت زیر میباشد.
- درون پرانتز
- توان
- ضرب و تقسیم
- جمع و تفریق
در مثال زیر اثر تقدم اپراتورهای ریاضی در نتیجه محاسبات دیده میشود.
A = [2 9 4];
B = [8 3 2];
C = A./B.^2
C =
0.0313 1.0000 1.0000
D = (A./B).^2
D =
0.0625 9.0000 4.0000
تمرینات این جلسه
در انتهای این جلسه 3 تمرین متلب مربوط به مباحث این جلسه ارائه شده است. لطفا این تمرینها را حل کرده و با پاسخ آن مقایسه کنید. پاسخ تمرینات متلب این جلسه در کانال تلگرام متلب پلاس منتشر میشود. از آیکونهای سمت راست صفحه میتوانید در این کانال عضو شوید.
تمرین اول) یک بردار سطری 3×1 تصادفی به نام A ایجاد کنید. این بردار را به یک بردار ستونی به نام B تبدیل کنید. حاصل ضرب A*B و B*A را محاسبه کنید. پاسخ در حالت عددی و در یک حالت ماتریسی است. چرا؟
تمرین دوم) یک ماتریس تصادفی 3×3 ایجاد کنید. این ماتریس را یکبار به صورت ماتریسی و یکبار به صورت عنصری به توان 2 برسانید.
تمرین سوم) با استفاده از توان رسانی، جذر درایههای یک ماتریس 3×3 تصادفی را محاسبه کنید. (راهنمایی: توان 0.5 معادل با جذر است)
جمعبندی
جلسه هفتم از سری جلسات آموزش نرم افزار متلب رایگان به پایان رسید. این جلسه درباره عملیات ریاضی مقدماتی روی آرایهها صحبت کردیم. این موارد به ظاهر ساده، سنگ بنای تمام محاسبات ریاضی و برنامه نویسی را شکل میدهند. به همین دلیل توصیه میشود که حتما به مباحث این جلسه توجه ویژه داشته باشید و به تسلط کافی برسید. سعی ما انتقال مفاهیم به زبانی ساده و ارائه مثالهای متنوع بود. هدف اصلی تیم متلب پلاس ارائه آموزش متلب به صورت حرفهای و رایگان است. بی صبرانه منتظر نظرات، سوال و ابهامات شما عزیزان هستیم. سعی میکنیم تا هرگونه سوال یا ابهامی که در این باره دارید را پاسخ دهیم.
توصیه میشود که حتما تمرینات این جلسه را انجام بدید و اگر سوال و ابهامی دارید در بخش نظرات (پایین همین صفحه) به ما بگید. از فهرست سمت راست هم میتونید به بقیه جلسات دسترسی داشته باشید.
2 Comments
به گفتگوی ما بپیوندید و دیدگاه خود را با ما در میان بگذارید.
سلام و خسته نباشید.
برای ماتریس فرضی A
دستور A^0.5 با چه منطقی اجرا می شود؟
If B = (A^.5) then B^2 = A
در اصل دنبال ماتریسی هستیم که در صورت ضرب شدن در خودش ماتریس A را تولید کند.