ماتریس در متلب
ماتریس در متلب
به طور کلی برای ذخیره مجموعهای از اعداد در متلب میتوان از ماتریس استفاده کرد. ماتریس مجموعهای از اعداد است که در قالب آرایههایی به صورت سطری و ستونی قرار میگیرند. به طور کلی برای تعریف ماتریس در متلب از نماد “[ ]”، برای جدا کردن آرایههای یک سطر از نماد “,” و برای رفتن به سطر بعد از نماد “;” استفاده میشود. به عنوان مثال اگر بخواهیم یک ماتریس سطری تعریف کنیم، میتوانیم عبارتی همچون[a=[3,4,7,8,10 را در بخش command window در متلب وارد کنیم و نتیجه را مشاهده کنیم، که نتیجه را در شکل ۱ مشاهده میفرمایید.
تبصره: در متلب میتوان از کلید اسپیس (space) هم به جای نماد “,” استفاده کرد، بر همین اساس ماتریس فوق را میتوان به شکل [a=[3 4 7 8 10 هم نشان داد. این موضوع در شکل زیر هم نشان داده شده است و همانطور که مشاهده میکنید، تغییری در نتایج حاصل نمیشود. البته تعداد اسپیسها اهمیتی ندارد و متلب حساسیتی بر تعداد فاصلهها ندارد.
بر اساس روش فوق میتوان هر ماتریس دلخواهی را با هر تعداد سطر و ستون آرایه در متلب ایجاد کرد. به عنوان نمونه یک ماتریس همانند شکل ۲ که دارای سه سطر و سه ستون است در متلب تعریف میکنیم.
برای این منظور میتوانیم هر یک از کدهای رو به رو را در بخش command window وارد کنیم: [a=[1 0 7;9 5 8;3 4 2 یا [a=[1,0,7;9,5,8;3,4,2 . نتیجه را در شکل ۳ مشاهده میکنید.
اندازه یک ماتریس
در صورتی که بخواهیم تعداد سطر و ستون یک ماتریس نظیر ماتریس a را بدست آوریم. میتوانیم از دستور (size(a استفاده کنیم.
کار با آرایهها ماتریس
برای پیدا کردن آرایهای در سطر m-ام و ستون n-ام در ماتریس a میتوانیم از دستور (a(m,n استفاده کنیم. حال اگر بخواهیم تمام عناصر ستون n-ام را استخراج کنیم، میتوانیم از دستور (a(:,n استفاده کنیم. برای دستیابی به آرایههای سطر m-ام هم میتوان از دستور (:,a(m استفاده کرد.
آرایههای بین دو ستون مشخص نظیر m و n را میتوان به کمک دستور (:,a(m:n استخراج کرد.
برای حذف آرایههای یک سطر و یا ستون میتوان از نماد مجموعه تهی ([]) در کنار دستورات فوق استفاده کرد. به عنوان نمونه اگر بخواهیم سطر m-ام یک ماتریس به طور کامل حذف شود، میتوانیم از دستور []=(:,a(m استفاده کنیم.
برای دسترسی به ماتریس میتوانیم از قسمت workspace هم استفاده کنیم. در این بخش نام متغیری که ذخیره کردهایم نشان داده میشود و با کلیک بر روی آن میتوانیم اطلاعات موجود در آن متغیر را مشاهده کنیم. همانطور که در شکل ۸ نشان داده شده است، این اطلاعات همانند یک ماتریس در حافظه ذخیره شدهاند.
در متلب برای راحتی بیشتر کاربران یک سری روشهای ساده کننده برای ورود اعداد در نظر گرفته شده است. یکی از این متدها مربوط به ورود دنباله اعداد حسابی به متلب است. مثلا اگر قرار است یک دنباله از اعداد را با قدر نسبت مثبت یا منفی به متلب وارد کنیم، میتوانیم از دستور [۴:۲:۱۰] استفاده کنیم. طبق این فرمان دنبالهای از اعداد تولید میشود که عدد اول ۴ بوده و دو تا دو تا افزایش پیدا میکند تا به عدد دوم که در این مثال ۱۰ میباشد، برسد. از این متد برای وارد کردن اعداد یک ماتریس هم میتوان استفاده کرد. در شکل ۹ چند نمونه از این دنبالههای عددی و ماتریسهایی که با این دنبالهها تولید میشوند هم نشان داده شده است.
نکته مهم در ورود ماتریسها این است که باید تعداد آرایههای هر سطر یکسان باشد در غیر این صورت پیغام خطایی همچون شکل ۱۰ مشاهده میکنید که برای رفع آن، مثلا میتوانید آرایههای خالی را با صفر پر کنید تا ماتریس تشکیل شود.
ماتریسهای خاص
در برخی از کاربردها و حل معادلات مختلف و ذخیره نتایج در مثالهای گوناگون، لازم است ماتریسهایی خالی یا با آرایههای صفر داشته باشیم تا بتوانیم نتایج خود را در آنها ذخیره کنیم. برای این منظور لازم نیست از دستورات فوق استفاده کنیم و میتوانیم از دستور مربوطه برای تولید ماتریس صفر یا zero استفاده کنیم. برای تعریف این ماتریس به سادگی از کد (a=zeros(4,5 استفاده میکنیم. به این ترتیب یک ماتریس متشکل از ۴ سطر و ۵ ستون داریم که تمام آرایههای آن را صفر تشکیل داده است. از دستور فوق برای تولید ماتریس صفر در هر ابعادی میتوان استفاده کرد. این ماتریس در شکل ۱۱ نشان داده شده است:
یکی از کاربردهای اصلی این ماتریس در تعریف مکان اولیه برای ذخیره متغیرهایی است که در خلال یک کد پیچیده و زمانبر تولید میشود، با همین تکنیک ساده میتوان زمان حل را به میزان قابل توجهی کاهش داد.
از دیگر ماتریسهای خاصی که در متلب به کار گرفته میشود، ماتریس واحد یا ones است. این ماتریس بیشتر در بخش برنامه نویسی با متلب کاربرد دارد. تمام درایههای این ماتریس ۱ است. دستوری که برای این ماتریس به کار برده میشود به شکل (a=ones(5,5 است. در شکل ۱۲ این ماتریس و کد آن را که در متلب وارد شده است، مشاهده میکنید:
کار با ماتریسها در متلب
اعمال مختلفی را میتوان بر روی ماتریسها اعمال کرد. از جمله این اعمال جمع و تفریق ماتریسها است که برای این موضوع باید تعداد سطر و ستون ماتریسها یکی باشد و این جمع و تفریق همانند جمع و تفریق دو عدد اسکالر است و در واقع هر عدد با متناظر خودش در ماتریس جمع و تفریق میشود. در شکل ۱۳ میتوانید، مثالی از این موضوع را مشاهده کنید:
گاهی اوقات لازم است درایههای سطری و یا ستونی یک ماتریسها را در هم ضرب کنیم. متلب برای این منظور هم یک تابع جداگانه تعریف کرده است. برای اینکه درایههای موجود در ستونهای یک ماتریس را در هم ضرب کنیم، میتوانیم از تابع (prod(a استفاده کنیم. در این صورت یک تابع سطری به عنوان نتیجه گزارش خواهد شد. حال اگر بخواهیم همین اتفاق برای درایههای سطری یک ماتریس اتفاق بیافتد، از تابع (prod(a,2 استفاده میکنیم. در این صورت یک تابع ستونی به عنوان نتیجه گزارش خواهد شد. در شکل ۱۴ این موضوعات نشان داده شده است.
نکته: به طور کلی اگر بخواهیم یک ماتریس ستونی را به ماتریس سطری تبدیل کنیم و یا برعکس این کار را انجام دهیم، کافی است از علامت پرایم (” ’ “) استفاده کنیم. در واقع به این کار، تولید ترانهاده ماتریس گفته میشود. به مثال موجود در شکل ۱۵ که ادامه مثال ۱۴ است، دقت کنید:
عملگر ضرب هم در ماتریسها به کار برده میشود. برای اینکه دو ماتریس به صورت درایه به درایه در هم ضرب شوند. کافی است از دستور “ *. ” استفاده کنیم. البته این نوع ضرب با ضرب متداول ماتریسها متفاوت است. به عنوان مثال میتوانید شکل ۱۶ را مشاهده کنید.
تقسیم ماتریسها هم عینا همانند ضرب آنها به صورت درایه به درایه انجام میشود. برای این منظور به شکل ۱۷ توجه کنید.
حال اگر بخواهیم مجموع، حاصل ضرب درایه به درایه دو ماتریس را بدست آوریم، میتوانیم از تابع dot استفاده کنیم. به عنوان مثال اگر دو ماتریس ساده همانند [A=[2 4 6 و [B=[3 5 7 داشته باشیم و بخواهیم حاصل عبارت (C=A(1)*B(1)+ A(2)*B(2)+ A(3)*B(3 را بدست آوریم. به راحتی از تابع dot به صورت (C=dot(A,B استفاده میکنیم. به همین مثال که در شکل ۱۸ نشان داده شده است، توجه بفرمایید.
حال اگر بخواهیم ضرب طبیعی دو ماتریس در یکدیگر را انجام دهیم. کافی است از نماد “*” استفاده کنیم. البته همان طور که از قواعد ضرب ماتریسها به یاد داریم، برای ضرب دو ماتریس باید تعداد ستونهای ماتریس اول با تعداد سطرهای ماتریس دوم برابر باشد. این موضوع در شکل ۱۹ نشان داده شده است.
دترمینان یک ماتریس در متلب
همانطور که میدانید یکی از پرکاربردترین محاسبات در ماتریسها، محاسبه دترمینان یک ماتریس است. برای این منظور میتوان به راحتی از تابع دترمینان متلب استفاده کرد. برای تعیین دترمینان ماتریس a میتوان به راحتی از دستور (det(a استفاده کرد. که مثالی از این کد را در شکل ۲۰ مشاهده میفرمایید.
وارون یک ماتریس
وارون ماتریس، یکی دیگر از ویژگیهای ماتریسها بوده که برای حل معادلات ماتریسی کاربرد فراوانی دارد. برای این منظور کافی است یک ماتریس وارون پذیر باشد، در این صورت میتوان از تابع مربوط به وارون ماتریس در متلب استفاده کرد. شرط وارون پذیر بودن یک ماتریس، صفر نبودن دترمینان آن است، چرا که در صورت صفر بودن دترمینان، ماتریس مربوطه یک ماتریس تکین خواهد بود. برای دستیابی به وارون ماتریس a میتوانیم از دستور (inv(a استفاده کنیم. نمونهای در شکل ۲۱ نشان داده شده است.
بعد ماتریس
ماتریس میتواند بیش از دو بعد داشته باشد. تا کنون تمام ماتریسهایی که مشاهده کردید، ماتریسهای دو بعدی دارند. برای این که یک ماتریس سه بعدی تعریف کنیم، میتوانیم از دستور (a(m,n,l استفاده کنیم. m تعداد سطر، n تعداد ستون و l بعد یک ماتریس را مشخص میکند. برای دستیابی به تعداد ابعاد ماتریس a میتوانیم از دستور (ndims(a استفاده کنیم.
محاسبه مینیمم و ماکسیمم یک ماتریس
برای بدست آوردن مینمم و ماکسیمم یک ماتریس میتوان از دستور min و max در متلب استفاده کرد. البته باید به بعد ماتریس توجه کرد. اگر ماتریس a، یک ماتریس دو بعدی باشد، با دستور (min(a، برداری از ماتریس a که کمترین آرایههای هر ستون از ماتریس در آن قرار دارد را مشاهده خواهیم کرد و با دستور (min(min(a) میتوانیم کوچکترین آرایهی ماتریس را مشاهده کنیم. همین تعاریف برای ماکسیمم یک ماتریس هم برقرار است. به عنوان نمونه تمام این کدها برای یک ماتریس فرضی در شکل ۲۳ نشان داده شده است.
تکرار ماتریس
اگر بخواهیم یک ماتریس را عینا تکرار کنیم به نحوی که کنار هم و یا زیر هم قرار بگیرند، میتوانیم از دو روش کلی استفاده کنیم. در روش اول کافی است به جای هر درایه، اسم ماتریس مورد نظر خود را که قرار است، تکرار شود، بنویسیم. به عنوان مثال اگر میخواهیم ماتریسی سه بار در کنار هم و دو بار زیر هم نوشته شود، میتوانیم از دستور [b=[a a a,a a a استفاده کنیم. این کار در شکل ۲۴ نشان داده شده است:
البته روش دیگری که برای این منظور مورد استفاده قرار میگیرد، استفاده از تابع repmat است. اگر بخواهیم یک ماتریس را مثلا ۷ بار زیر هم و ۸ بار کنار هم در یک ماتریس بنویسیم، میتوانیم از دستور (repmat(a,7,8 استفاده کنیم. مثال فوق را اینبار به کمک این روش انجام میدهیم.