در قسمت قبلی از دوره رایگان متلب فنولوژی در مورد بردار در متلب صحبت کردیم. ماتریسها از مجموعهای از بردارها تشکیل میشوند و علت نامگذاری متلب (به معنی آزمایشگاه ماتریس) نیز به دلیل اهمیت و کاربرد ماتریس در متلب میباشد. در این قسمت به طور کامل در مورد انواع ماتریسها در متلب و عملیات مهمی که روی آنها صورت میگیرد میآموزیم.
تعریف ماتریس در متلب
ماتریس یک آرایه دو بعدی از اعداد است. در متلب، برای ساخت یک ماتریس، درایه های هر سطر را با استفاده از ویرگول و یا space جدا و با استفاده از سمیکالن (؛) سطرها را از هم جدا میکنیم.
برای مثال یک ماتریس ۴ در ۵ میسازیم :
1 |
a = [ 1 2 3 4 5; 2 3 4 5 6; 3 4 5 6 7; 4 5 6 7 8] |
متلب دستور بالا را اجرا و سپس نتیجه زیر را بر میگرداند:
1 2 3 4 5 |
a = 1 2 3 4 5 2 3 4 5 6 3 4 5 6 7 4 5 6 7 8 |
ارجاع به عناصر یک ماتریس در متلب
برای ارجاع به درایهی موجود در سطر شماره m و ستون شماره n ماتریسی که در بخش قبل ایجاد کرده بودیم، در سینتکس متلب داریم:
1 |
mx(m, n); |
برای مثال، جهت ارجاع به درایهی موجود در دومین سطر و پنجمین ستون ماتریسی که در بخش قبل ایجاد کردیم داریم:
1 2 3 |
a = [ 1 2 3 4 5; 2 3 4 5 6; 3 4 5 6 7; 4 5 6 7 8]; a(2,5) |
متلب دستور بالا را اجرا و سپس نتیجه ans = 6 را بر میگرداند.
برای ارجاع به همهی درایههای mامین ستون داریم: A(:,m)
اکنون بگذارید یک بردار ستونی به نام v، از درایههای چهارمین سطر ماتریس بسازیم:
1 2 3 |
a = [ 1 2 3 4 5; 2 3 4 5 6; 3 4 5 6 7; 4 5 6 7 8]; v = a(:,4) |
متلب دستور بالا را اجرا و سپس نتیجه زیر را بر میگرداند:
1 2 3 4 5 |
v = 4 5 6 7 |
شما همچنین میتواند درایههای ستونهای mام تا nام را انتخاب کنید. برای این کار داریم: a(:,m:n)
بیایید ماتریس کوچکتری را با استفاده از درایههای ستونهای دوم تا سوم بسازیم:
1 2 |
a = [ 1 2 3 4 5; 2 3 4 5 6; 3 4 5 6 7; 4 5 6 7 8]; a(:, 2:3) |
متلب دستور بالا را اجرا و سپس نتیجه زیر را بر میگرداند:
1 2 3 4 5 6 7 8 9 |
ans = 2 3 3 4 4 5 5 6 |
به همین شیوه، میتوان یک ماتریس کوچکتر را با استفاده از بخشی از ماتریس ایجاد کرد:
1 2 |
a = [ 1 2 3 4 5; 2 3 4 5 6; 3 4 5 6 7; 4 5 6 7 8]; a(:, 2:3) |
متلب دستور بالا را اجرا و سپس نتیجه زیر را بر میگرداند:
1 2 3 4 5 6 7 8 9 |
ans = 2 3 3 4 4 5 5 6 |
به همین شیوه، میتوان یک ماتریس کوچکتر را با استفاده از بخشی از ماتریس ایجاد کرد. برای مثال بیایید یک ماتریس کوچکتر به نام sa را با استفاده از لایههای داخلی یک ماتریس دیگر ایجاد کنیم:
1 2 |
a = [ 1 2 3 4 5; 2 3 4 5 6; 3 4 5 6 7; 4 5 6 7 8]; sa = a(2:3,2:4) |
متلب دستور بالا را اجرا و سپس نتیجه زیر را بر میگرداند:
1 2 3 4 5 |
sa = 3 4 5 4 5 6 |
حذف یک سطر یا یک ستون از ماتریس در متلب
میتوان یک سطر یا ستون یک ماتریس را بطور کامل با اختصاص دادن یک مجموعه خالی بین دو براکت برای آن سطر یا ستون مورد نظر حذف کرد. بطورکلی [] یک آرایه خالی را نشان میدهد. به مثال زیر توجه کنید که در آن سطر چهارم یک ماتریس را حذف کردهایم:
1 2 |
a = [ 1 2 3 4 5; 2 3 4 5 6; 3 4 5 6 7; 4 5 6 7 8]; a( 4 , : ) = [] |
متلب دستور بالا را اجرا و سپس نتیجه زیر را بر میگرداند:
1 2 3 4 5 6 7 |
a = 1 2 3 4 5 2 3 4 5 6 3 4 5 6 7 |
بیایید پنجمین ستون را حذف کنیم:
1 2 |
a = [ 1 2 3 4 5; 2 3 4 5 6; 3 4 5 6 7; 4 5 6 7 8]; a(: , 5)=[] |
متلب دستور بالا را اجرا و سپس نتیجه زیر را بر میگرداند:
1 2 3 4 5 6 7 8 9 |
a = 1 2 3 4 2 3 4 5 3 4 5 6 4 5 6 7 |
در این مثال، بیایید یک ماتریس ۳در۳ بسازیم. سپس ما دومین و سومین سطر از ماتریس را دوبار کپی میگیریم تا یک ماتریس ۴در۳ بسازیم.
میشود یک script file را با استفاده از کد زیر ایجاد کرد:
1 2 |
a = [ 1 2 3 ; 4 5 6; 7 8 9]; new_mat = a([2,3,2,3],:) |
وقتی شما فایل را اجرا کنید، نتیجه زیر را نمایش میدهد:
1 2 3 4 5 6 7 8 9 |
new_mat = 4 5 6 7 8 9 4 5 6 7 8 9 |
عملیاتهای مهم ماتریسی در متلب
همانند عملیاتهای برداری، ماتریسها نیز عملیات مهمی دارند که در ادامه به آنها با مثالهای بیشتری میپردازیم.
- جمع و تفریق ماتریسی
- تقسیم ماتریسها
- عملیات اسکالر روی ماتریسها
- ترانهادهی ماتریس
- ترکیب ماتریسها
- ضرب ماتریسی
- دترمینان ماتریس
- معکوس ماتریس
جمع و تفریق ماتریس در متلب
این عملیات مشابه جمع و تفریق برداری در متلب میباشد و ماتریسها باید تعداد سطر و ستون یکسانی باشند. این عملیات به صورت درایه به درایه انجام میشود.
مثال: جمع و تفریق دو بردار در متلب
1 2 3 4 |
a = [ 1 2 3 ; 4 5 6; 7 8 9]; b = [ 7 5 6 ; 2 0 8; 5 7 1]; c = a + b d = a - b |
نتایج به صورت زیر خواهد بود:
1 2 3 4 5 6 7 8 |
c = 8 7 9 6 5 14 12 15 10 d = -6 -3 -3 2 5 -2 2 1 8 |
1 |
عملیات اسکالر در ماتریسها
وقتی شما ماتریسها را با یک عدد اسکالر به صورت درایه به درایه ضرب، تقسیم، جمع یا تفریق میکنید، به آن عملیات اسکالر ماتریس میگوییم. در این عملیات تعداد سطر و ستونهای ماتریس جدید تغییر نمیکند. به مثالهای زیر توجه کنید:
1 2 3 4 5 6 |
a = [ 10 12 23 ; 14 8 6; 27 8 9]; b = 2; c = a + b d = a - b e = a * b f = a / b |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
c = 12 14 25 16 10 8 29 10 11 d = 8 10 21 12 6 4 25 6 7 e = 20 24 46 28 16 12 54 16 18 f = 5.0000 6.0000 11.5000 7.0000 4.0000 3.0000 13.5000 4.0000 4.5000 |
ترانهادهی ماتریس در متلب
ترانهادهی یک ماتریس حاصل جا به جا شدن سطرها و ستونهای آن ماتریس است. برای ترانهادهی ماتریس در متلب از علامت (‘) استفاده میشود. به مثال زیر توجه کنید:
1 2 |
a = [ 10 12 23 ; 14 8 6; 27 8 9] b = a' |
نتایج کدهای بالا:
1 2 3 4 5 6 7 8 |
a = 10 12 23 14 8 6 27 8 9 b = 10 14 27 12 8 8 23 6 9 |
ترکیب ماتریسها در متلب
میتوانید چندین ماتریس را با هم ترکیب کنید تا ماتریسهای بزرگتر بسازید. برای این منظور از براکتها ([]) استفاده میکنیم. در متلب دو نوع ترکیب ماتریسی داریم:
ترکیب افقی (با استفاده از کاما «,»)
ترکیب عمودی (با استفاده از سمیکالن «;»)
مثال:
1 2 3 4 |
a = [ 10 12 23 ; 14 8 6; 27 8 9] b = [ 12 31 45 ; 8 0 -9; 45 2 11] c = [a, b] d = [a; b] |
مشاهده نتایج:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
a = 10 12 23 14 8 6 27 8 9 b = 12 31 45 8 0 -9 45 2 11 c = 10 12 23 12 31 45 14 8 6 8 0 -9 27 8 9 45 2 11 d = 10 12 23 14 8 6 27 8 9 12 31 45 8 0 -9 45 2 11 |
ضرب ماتریسی در متلب
دو ماتریس A و B را در نطر بگیرید اگر A یک ماتریس m*n باشد و B یک ماتریس n*p باشد می توان این دو ماتریس را در هم ضرب کرد و ماتریسی مانند C را ایجاد کرد. فقط در صورتی میتوان ضرب کرد که تعداد ستون A با تعداد سطر B برابر باشد. ضرب دو ماتریس با دستور (*) صورت میگیرد.
برای مثال:
1 2 3 |
a = [ 1 2 3; 2 3 4; 1 2 5] b = [ 2 1 3 ; 5 0 -2; 2 3 -1] prod = a * b |
که خروجی متلب به شکل زیر است :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
a = 1 2 3 2 3 4 1 2 5 b = 2 1 3 5 0 -2 2 3 -1 prod = 18 10 -4 27 14 -4 22 16 -6 |
تقسیم ماتریسی در متلب
شما میتوانید دو ماتریس را از راست (/) و یا از چپ (\) در متلب بر یکدیگر تقسیم کنید. در این صورت هر دو ماتریس باید تعداد سطر و ستون یکسان داشته باشند.
- تقسیم از راست: A/B = A*inv(B) (تقسیم معمولی که ضرب A در معکوس B است.)
- تقسیم از چپ: A\B = inv(A)*B (معکوس A ضرب در B میشود.)
به مثال زیر توجه کنید:
1 2 3 4 |
a = [ 1 2 3 ; 4 5 6; 7 8 9]; b = [ 7 5 6 ; 2 0 8; 5 7 1]; c = a / b d = a \ b |
با اجرای فایل بالا به نتایج زیر میرسید:
1 2 3 4 5 6 7 8 9 10 11 |
c = -0.52542 0.68644 0.66102 -0.42373 0.94068 1.01695 -0.32203 1.19492 1.37288 d = -3.27778 -1.05556 -4.86111 -0.11111 0.11111 -0.27778 3.05556 1.27778 4.30556 |
دترمینان ماتریس در متلب
دترمینان ماتریس در متلب با دستور det انجام میشود. به مثال زیر دقت کنید:
1 2 |
a = [ 1 2 3; 2 3 4; 1 2 5] det(a) |
خروجی متلب به شکل زیر است:
1 2 3 4 5 6 7 8 9 |
a = 1 2 3 2 3 4 1 2 5 ans = -2 |
معکوس ماتریس در متلب
وارون ماتریس A با $A^{-1}$ نشان داده می شود به طوری که رابطه زیر برقرار است:
$AA^{-1}=A^{-1}A=1 $
وارون ماتریس همیشه وجود ندارد. اگر دترمینان ماتریس صفر باشد، معکوس وجود ندارد و ماتریس منفرد است. معکوس ماتریس در متلب با استفاده از تابع inv محاسبه می شود.
برای مثال:
1 2 |
a = [ 1 2 3; 2 3 4; 1 2 5] inv(a) |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
a = 1 2 3 2 3 4 1 2 5 ans = -3.5000 2.0000 0.5000 3.0000 -1.0000 -1.0000 -0.5000 0 0.5000 |