محاسبه ضرب و تقسیم ماتریس‌ها در متلب+ تصویر(جلسه بیست و چهارم)

آموزش نحوه محاسبه ضرب و تقسیم ماتریس ها در متلب
آموزش نحوه محاسبه ضرب و تقسیم ماتریس ها در متلب

در این دوره آنلاین آموزش متلب به صورت رایگان با سری آموزش‌های نرم افزار متلب در خدمت شما هستیم. در واقع آنچه که شما به طور کاملا عملی برای استفاده در انجام پروژه متلب نیاز دارید در این جلسات ارائه خواهد شد.

در جلسه بیست و سوم درباره نحوه استفاده از نحوه محاسبه جمع و تفریق ماتریس‌ها در متلب صحبت کردیم. اگر میخواهید با نحوه محاسبه ضرب و تقسیم ماتریس‌ها در متلب آشنا شوید این مطلب را با دقت تا انتها بخوانید.

ضرب ماتریس‌ در متلب

فرض کنید که یک ماتریس به نام ماتریس A داریم. این ماتریس به صورت زیر تعریف می‌شود که دارای دو سطر و دو ستون است.

سطر به انگلیسی به معنی row و ستون به معنی column است.

یعنی یک ماتریس ۳×۲ است و فرض کنید که یک ماتریس دیگری به نام ماتریس B داریم که این ماتریس دارای سه سطر و دو ستون است که به صورت زیر تعریف شده است و همه‌ی اعداد آن فرد هستند. این ماتریس هم دارای سه سطر و دو ستون است.

اگر این دو ماتریس را در هم ضرب کنیم، چه اتفاقی می‌افتد؟ یعنی ماتریس A را در ماتریس B ضرب کنیم. مشاهده می‌کنیم که یک ماتریس را به ما داد که یک ماتریس ۲×۲ است یعنی ۲ سطر و ۲ ستون دارد.

محاسبه ضرب و تقسیم ماتریس‌ها در متلب
محاسبه ضرب و تقسیم ماتریس‌ها در متلب

ضرب ماتریس‌ها را اگر در خاطر داشته باشید، سطر اول ماتریس A در ستون اول ماتریس B ضرب می‌شود و در درایه‌ی  ماتریس حاصل‌ضرب قرار می‌گیرد. سپس سطر اول ماتریس A  در ستون دوم ماتریس B ضرب می‌شود و در درایه‌ی  ماتریس حاصل‌ضرب قرار می‌گیرد. سپس سطر دوم ماتریس A  در ستون اول ماتریس B ضرب می‌شود و در درایه‌ی  ماتریس حاصل‌ضرب قرار می‌گیرد. سپس سطر دوم ماتریس A  در ستون دوم ماتریس B ضرب می‌شود و در درایه‌ی  ماتریس حاصل‌ضرب قرار می‌گیرد.

ضرب سطر در ستون هم برای درایه‌ی اول به صورت زیر است و برای بقیه سطر و ستون‌ها به طور مشابه صورت می‌گیرد:

این یک فرمول خاصی دارد که در اینجا برایتان توضیح می‌دهم. یک ماتریس ۳×۲ یک ماتریس ۲×۳ داشتیم که به ما یک ماتریس ۲×۲ داده است.

برای این‌که ماتریس‌ها بتوانند در هم ضرب شوند، همیشه باید تعداد ستون‌های ماتریس اول با تعداد سطرهای ماتریسی دوم با هم برابر باشند. در اینجا چون هر دو ۳ هستند و با هم برابرند، پس ماتریس حاصل‌ضرب ما یک ماتریس ۲×۲ است.

حاصل ضرب یک ماتریس  در یک ماتریس  یک ماتریس   است.

تا زمانی که n و n با هم برابر باشند، دو ماتریس می‌توانند در هم ضرب شوند.

اما در برنامه متلب می‌خواهیم یک توضیحی بنویسیم، قبل از آن یک علامت % قرار می‌دهیم و به صورت زیر  می‌نویسیم:

محاسبه ضرب ماتریس‌ A در B در محیط برنامه متلب
محاسبه ضرب ماتریس‌ A در B در محیط برنامه متلب

مشاهده می‌کنیم که نوشته به رنگ سبز درآمده است. وقتی که یک علامت % در قسمت command window برنامه متلب قرار می‌دهید، این یعنی این‌که برای خودتان دارید یک note می‌نویسید و هیچ تأثیری در برنامه‌نویسی ما ندارد.

مثلاً در زبان java script دو تا / (slash) را که قرار دهیم، این معنی را برای ما می‌دهد اما در متلب با علامت درصد می‌توانیم این کار را انجام دهیم. در برنامه‌نویسی‌ها با زبان‌های دیگر شاید به صورت‌های مختلفی این کار را انجام می‌دهند.

در workspace ما value (مقدار) ماتریس A را برایمان مشخص کرده است که [2,4,6; 8,10,12] بوده است.

مشخص کردن مقدار ماتریس A
مشخص کردن مقدار ماتریس A در متلب
کلیک راست در محیط workspace
کلیک راست در محیط workspace

اگر در این قسمت یک کلیک راست انجام دهیم، به طور مثال اگر size آن را بخواهیم، برای ما size آن را هم نمایش می‌دهد که به طور مثال ۲×۳ است.

مشخص کردن سایز و مقدار ماتریس A در متلب
مشخص کردن سایز و مقدار ماتریس A در متلب
مشخص کردن سایز و مقدار ماتریس A در متلب
مشخص کردن سایز و مقدار ماتریس A در متلب

مثلاً ans که ضرب A و B بود، ۲×۲ شده است.

حال که دیگر size را لازم نداریم، تیک آن را برمی‌داریم.

برداشتن تیک سایز ماتریس A در متلب
برداشتن تیک سایز ماتریس A در متلب
محیط ورک اسپیس برای ماتریس A
محیط ورک اسپیس برای ماتریس A

به طور مثال اگر بخواهیم ببینیم مقدار مینیمم (کمترین مقدار) در ماتریس A،B و جواب آن چیست.

مشخص کردن مقدار مینیمم در ماتریس A
مشخص کردن مقدار مینیمم در ماتریس A
مشخص کردن مقدار مینیمم ماتریس‌ها
مشخص کردن مقدار مینیمم ماتریس‌های A و B در متلب

از این طریق کمترین مقدار را برای ما به دست می‌آورد. برای به دست آوردن بیشترین مقدار هم Max را از بین گزینه‌ها انتخاب می‌کنیم.

مشخص کردن مقدار ماکزیمم ماتریس‌ها
مشخص کردن مقدار ماکزیمم ماتریس‌های A و B در متلب

که مشاهده می‌کنیم، مقادیر آن ۱۲ و ۱۳۴ و ۹ هستند. بیشترین مقدار در حاصل‌ضرب ۱۳۴ و در ماتریس B مقدار ۹ بوده است.

نمایش مقدار مینیمم و ماکزیمم ماتریس‌ها
نمایش مقدار مینیمم و ماکزیمم ماتریس‌های A و B در متلب

تیک هر کدام از گزینه‌ها که لازم نداشته باشیم را برمی‌داریم.

حذف تیک مقدار ماکزیمم ماتریس‌های A و B در متلب جهت عدم نمایش
حذف تیک مقدار ماکزیمم ماتریس‌های A و B در متلب جهت عدم نمایش

اکنون یک مثال بیان می‌کنیم که قضیه به خوبی توضیح داده شود و این‌که نکته‌ای که در ضرب ماتریس‌ها وجود دارد را هم بیان کنیم.

فرض کنید که یک شخصی برای دویدن هر روز از خانه‌اش بیرون می‌رود و زمان‌هایی که می‌گذارد را اگر با time نشان دهیم، برای مثال یک روز نیم ساعت وقت گذاشته است و یک روز ۷/۰ ساعت وقت گذاشته است و یک روز دیگر هم همان نیم ساعت وقت گذاشته است و یک روز ۱ ساعت و ۱۰ دقیقه وقت گذاشته است و یک روز هم مثلاً ۲ ساعت وقت گذاشته است.

زمان‌هایی که فرد به دویدن اختصاص داده
زمان‌هایی که فرد هر روز به دویدن اختصاص داده و ثبت کرده

این‌ها timeهای ما هستند.

می‌خواهیم ببینیم که در روز با چه سرعتی دویده است. سرعت به انگلیسی velocity می‌شود که با حرف v نشان می‌دهند.

به طور مثال سرعت روز اول آن ۱۵ متر بر ثانیه بوده است. سرعت روز دوم که مثلاً تندتر دویده است، ۱۶ متر بر ثانیه بوده است و روز سوم ۱۸ متر بر ثانیه بوده است و روز بعد مثلاً مریض شده است، ۱۵ متر بر ثانیه دویده است و روز آخر هم کرونا گرفته است و مثلا ۱۴ متر بر ثانیه دویده است. این سرعت آن شخص است.

نمایش میزان سرعت دوی فرد در هر روز
نمایش میزان سرعت دوی فرد در هر روز

حال می‌خواهیم ببینیم که مسافتی که این شخص رفته است، چقدر بوده است. فرمول مسافت چه بود؟ زمان ضربدر سرعت که در خط آخر تصویر فوق نشان داده شده است.

Distance یا مسافت برابر است با زمان ضربدر سرعت. که این همان ضرب دو ماتریس شده است. زیرا در اینجا نیز دو ماتریس داریم. یک ماتریس ۵×۱ و یک ماتریس ۵×۱ دیگر هم در اینجا داریم.

پاسخ حاصل‌ضرب را در تصویر زیر خواهیم دید.

محاسبه حاصل ضرب زمان در سرعت
محاسبه حاصل ضرب زمان در سرعت

جوابی به ما نداده است. چرا؟ دلیل دارد و دلیل آن را هم قبلاً گفتیم.

در اینجا ما دو ماتریس ۵×۱ داشتیم که زمان و سرعت را به ما نشان می‌داد. همان‌طور که مشاهده می‌کنید ۵ با ۱ برابر نیست. زیرا گفته بودیم که n باید با n برابر باشد.

پس error دریافت می‌کنیم. حال می‌خواهیم در اینجا این ضرب را حتما انجام دهیم و جواب را می‌خواهیم. یک مسئله‌ای برای ما پیش آمده است که جواب آن را می‌خواهیم. چه کاری باید انجام دهیم؟ راه حل دارد و راه حل آن نیز استفاده از element wise multiplication است.

نکته حائز اهمیت در رابطه با ضرب ماتریس‌ها در متلب
نکته حائز اهمیت در رابطه با ضرب ماتریس‌ها در متلب

و این راه حل ماست. حال چگونه باید آن را اجرا کنیم؟ با گذاشتن یک dot (نقطه) قبل از ضرب یا ماتریس دیگر به این موارد اصلاً توجهی نمی‌کند و ضرب را انجام می‌دهد که اگر بخواهیم ببینیم به صورت زیر باید نوشته شود:

مسافت طی شده
محاسبه مسافت طی شده توسط ضرب ماتریس‌ها

مشاهده کردید که به سادگی ضرب شده است و مسافتی که طی کردیم، ۵/۷، ۲/۱۱، ۹، ۵/۱۶ و ۲۸ را به ما داده است.

اما فقط در ضرب به این صورت نیست. شما مثلاً اگر این تقسیم را هم انجام می‌دادید، به همین صورت می‌شد. برای مثال اگر می‌خواستیم سرعت را به دست آوریم و سرعت را نداشتیم و سرعت برای ما مجهول بود، به همین صورت بود و باید dot قرار می‌دادیم و مثلاً اگر v را می‌خواستیم، باید به صورت زیر می‌نوشتیم:

محاسبه میزان سرعت از طریق تقسیم مسافت طی شده به زمان
محاسبه میزان سرعت از طریق تقسیم مسافت طی شده به زمان

که v را به ما می‌داد که همان ۱۵ و ۱۶ و ۱۸ و ۱۵ و ۱۴ بوده است. حال فرض کنید که می‌خواهیم انرژی را هم محاسبه کنیم اگر به یاد داشته باشید، انرژی جنبشی را با  نشان می‌دادیم که مخفف kinetic energy به معنی انرژی جنبشی است و فرمول آن به صورت  است. حال برای به دست آوردن این فرمول ابتدا باید جرم را داشته باشیم. فرض می‌کنیم جرم باشد.

گفتیم انرژی جنبشی با فرمول زیر به دست می‌آید:

محاسبه انرژی جنبشی
محاسبه انرژی جنبشی در متلب

اگر توجه کنید، ما در اینجا ضرب به کار بردیم، زیرا m خودش یک ماتریس ۱×۱ است و این هم یک ماتریس ۵×۱ است. nهای آنها با هم برابرند و نیازی به dot نداریم.

موضوع دیگری که در جلسات قبلی به شما توضیح دادم، مبحث extracting elements parametric submatrices from an existing matrix (یعنی جداسازی یک المان یا ماتریس یا به طور مثال زیرماتریس از یک ماتریسی که وجود دارد)، بوده است.

جداسازی یک المان از ماتریس
جداسازی یک المان از ماتریس

این مبحث نیز مبحثی بود که من کمی راجع به آن برایتان توضیح دادم و فکر می‌کنم که کامل هم آن را توضیح دادم.

اگر بخواهیم یک مروری داشته باشیم، فرض کنید ما ماتریس C را داریم و اعضای آن  باشند. فرض کنیم که این ماتریس را داریم که یک ماتریس ۳×۳ و دارای سه سطر و سه ستون است.

نمایش ماتریس C در متلب
نمایش ماتریس C در متلب

حال در اینجا چه می‌خواهیم؟ مثلاً در سطر یک و ستون دو ۲ را می‌خواهیم و در واقع می‌خواهیم یک عدد را extract کنیم. به این کار single element extraction می‌گویند. یعنی این‌که یک المان را از این ماتریس جدا کنیم.

ما ۲ را می‌خواهیم. عدد ۲ در سطر یک و ستون دو قرار دارد. به صورت زیر می‌نویسیم:

جداسازی یکی از عناصر ماتریس C از خود ماتریس
جداسازی یکی از عناصر ماتریس C از خود ماتریس

که مشاهده می‌کنیم که به راحتی عدد ۲ را به ما برگرداند.

حال اگر به طور مثال بخواهیم یک سطر یا ستون کامل را از ماتریس (extract) جدا کنیم، به صورت زیر نوشته می‌‌شود:

آموزش نحوه جداسازی یک سطر یا ستون از ماتریس C
آموزش نحوه جداسازی یک سطر یا ستون از ماتریس C

برای این کار به صورتی که در تصویر فوق نوشته شده است، عمل  می‌کردیم. مشاهده می‌کنیم که برای ما ستون دو را به طور کامل استخراج کرده است. ستون دو شامل اعداد ۲ و ۵ و ۸ است. حال اگر سطر دو را می‌خواستیم استخراج کنیم، به صورت ” C (2 , : ) ” تایپ می‌کردیم.

به طور مثال سطر ۳ را می‌خواهیم استخراج کنیم. سطر ۳ به صورت زیر جدا می‌شود:

آموزش نحوه جداسازی سطر 3 از ماتریس C
آموزش نحوه جداسازی سطر 3 از ماتریس C

که همان‌طور که مشاهده می‌کنید، سطر ۳ را استخراج کرد و بیرون آورده است. اما سومین موردی که فکر می‌کنم در مورد آن توضیح نداده‌ام، sub matrix است. یعنی یک ماتریس را بخواهیم از آن استخراج کنیم. خودتان کمی روی آن فکر کنید که با استفاده از مطالبی که تا اینجا بیان کردیم، چگونه می‌توانید این کار را انجام دهید؟ برای مثال می‌خواهیم که از این ماتریس ۳×۳ ماتریس ۲×۲  را ستخراج کنیم و بیرون بیاوریم. به این صورت انجام می‌شود:

استخراج ماتریس از ماتریس اصلی
نحوه استخراج ماتریس از ماتریس C (اصلی)

همان‌طور که مشاهده می‌کنید دقیقاً همان ماتریس را برای ما استخراج کرده است. این ماتریس را از ماتریس اصلی C بیرون آورده است. چگونه این کار انجام شده است؟ در فرمول بالا 2:3 به معنی سطرهایی است که شروع می‌شود (start rows to end) یعنی از سطر ۲ تا ۳. و 1:2 یعنی از ستون یک تا دو را می‌خواهیم.

به طور کلی یعنی از سطر ۲ تا ۳ و از ستون ۱ تا ۲ را برای ما بیرون می‌کشد و دقیقا همان ماتریسی را می‌دهد که می‌خواستیم. به این صورت اکسترکت انجام شده است.

نکته‌ی دیگری که می‌خواهم بیان کنم، این است که قبلا گفتیم به طور مثال وقتی [3: 0.25 : 6] را نوشتیم، با قدرنسبت 0.25 جلو می‌رود و از ۳ تا ۶ به جلو می‌رود.

اگر به جای 0.25، قدرنسبت ۱ قرار دهیم، یکی یکی به جلو می‌رود.

تعریف قدرنسبت 1 در ماتریس C
آموزش نحوه تعریف قدرنسبت 1 در ماتریس C

حال می‌خواهیم یک نکته‌ی دیگری ر‌ا نیز بیان کنیم که linearlyspace است. در اینجا یک دستوری به نام linespaced داریم که به طور مثال به صورت زیر می‌نویسیم:

اجرای دستور linspace در متلب
اجرای دستور linspace در متلب با املای اشتباه

همان‌طور که در تصویر فوق مشاهده می‌کنید، به صورت linspace باید می‌نوشتیم و linespaced املای صحیح آن نبوده است و حرف d اضافه بوده است.

این می‌گوید که بین ۳ تا ۶، پنج عدد بنویسد. و خودش به دلخواه جدا کرده است.

حال به طور مثال ۱۵ تا عدد بین ۳ تا ۶ می‌خواهیم بنابراین به صورت زیر می‌نویسیم:

اعمال دستور linespace در متلب
اعمال دستور linespace در متلب

که ۱۵ عدد به ما داده است.

دستور آخری که می‌خواهم توضیح دهم، فرض کنید ما چنین چیزی داریم و می‌خواهیم ببینیم اعضای آن چند تا بوده است. مثلاً این تعداد ۱۵ تا نبوده است و ۱۲۰۰ تا بوده است. در این حالت نمی‌توانم آن را یکی یکی بشماریم. بنابراین به صورت زیر می‌‌نویسیم:

نحوه شمارش تعداد اعضای ماتریس در متلب
نحوه شمارش تعداد اعضای ماتریس در متلب

که در جواب به ما گفته است این ۱۵ عدد است.

تقسیم ماتریس‌ها در متلب

حال می‌خواهیم در مورد تقسیم ماتریس‌ها صحبت کنیم و در مورد آن توضیح دهیم.

تقسیم در متلب می‌تواند با علامت‌های / یا نشان داده شود. در تمام زبان‌های برنامه‌نویسی هم تا جایی که مشاهده کردم، به همین صورت است و این که معنی تقسیم در ماتریس به صورت زیر توضیح داده می‌شود:

A/B =A×(1/B)=A×B^(-1)

در B/1 به معنی معکوس B است. معکوس 1/B نیز همان B است. و معکوس را با نماد B به توان منفی 1 نشان می‌دهند که این transpose یا ترانهاده نیست. در مورد transpose یا ترانهاده قبلاً توضیح دادم که چیست.

پس ما در واقع ماتریس‌ها را تقسیم نمی‌کنیم. بلکه به جای آن ماتریس را در معکوس ماتریس دیگر ضرب می‌کنیم.

به این نکته توجه داشته باشید که همانند جمع و تفریق ماتریس‌ها، در تقسیم ماتریس‌ها نیز باید ابعاد دو ماتریس با هم برابر باشند. به طور مثال هر دو ۲×۲ یا هر دو ۳×۳ باشند.

اگر پس از خواندن دقیق تمامی مطالب فصل اول باز هم جواب سوال خود را پیدا نکردید میتوانید از طریق ارتباط با پشتیبانی کارت با کارشناسان ما در ارتباط باشید.

در این‌ بیست و چهار جلسه تمام نکات مربوط به فصل اول از آموزش مقدماتی متلب بیان شد. از جلسه‌ی بعدی با فصل دوم از این آموزش در خدمت شما خواهیم بود.

در صورتی که شما پس از خواندن محتوای جلسات قبلی و این بخش که به ساده‌ترین زبان ممکن درباره‌ی برنامه‌ی متلب و محیط کاربری آن توضیح داده باز هم سردرگم هستید. می‌توانید با برون سپاری انجام پروژه متلب خود به کارشناسان حرفه‌ای کارت پروژه می‌باشد. میتوانید از طریق شماره‌ی 09104503300 با پشتیبانان کارت از طریق پیام یا تماس در ارتباط باشید.

برای کسب اطلاعات بیشتر در مورد متلب میتوانید به مقاله آموزش متلب مقدماتی مراجعه کنید.

برای ثبت سفارش لطفا در تلگرام یا واتساپ یا ایتا به شماره 09104503300 پیام دهید.