ضرب و تقسیم در متلب

چاپ

بعد از انجام جمع و تفریق، به ضرب و تقسیم می رسیم. در بخش های زیر به طرق مختلف به ضرب و تقسیم در متلب می پردازیم.

انجام ضرب و تقسیم اسکالر در نرم افزار متلب

اسکالر یک اصطلاح فنی برای اعداد معمولی است.

هنگامی که یک عدد معمولی را در یک بردار یا در یک ماتریس ضرب کنیم، تمام عناصر آن بردار یا ماتریس، در آن عدد، ضرب می شوند. 

برای امتحان کردن این موضوع، عبارت 3*[a= [1,2;3,4 را در متلب تایپ کنید و کلید Enter را فشار دهید. نتیجه ی زیر حاصل خواهد شد:

 

در مثال بالا ابتدا ماتریس [3,4;1,2] ایجاد می شود و سپس هر عنصر این ماتریس در 3 ضرب شده و نتیجه در متغیر a ذخیره می شود. 

تقسیم نیز به همین منوال کار می کند. برای آشنا شدن با نحوه ی کارکردن تقسیم، عبارت 3 / [b=[6,9;12,15 را تایپ کنید و کلید Enter را فشار دهید. نتیجه ی زیر ظاهر خواهد شد:


در مثال بالا ابتدا ماتریس [12,15;6,9] ایجاد می شود و سپس هر عنصر این ماتریس بر عدد 3 تقسیم می شود و در آخر نتیجه در متغیر b ذخیره می شود.

متلب از از هردوی تقسیم از سمت راست و تقسیم از سمت چپ پشتیبانی می کند. 

تقسیم از سمت راست به این معنی است که قسمت سمت چپ بر قسمت سمت راست تقسیم می شود( همان کاری که اغلب مردم در محاسبه انجام می دهند). 

تقسیم از سمت چپ به این معنی است که قسمت سمت راست بر قسمت سمت چپ تقسیم می شود. 

هنگام کار کردن با اعداد اسکالر(اعداد معمولی)، چه از تقسیم سمت راست و چه از تقسیم سمت چپ استفاده کنید، مهم نیست. برای اینکه این حقیقت را مشاهده کنید، عبارت [c= 3\[6,9;12,15 را در متلب وارد کنید و کلید Enter را فشار دهید. (توجه کنید که از بک اسلش: \ برای تقسیم از سمت چپ استفاده کنید). خواهید دید که همان نتیجه ی قبلی به دست می آید:


ضرب کردن ماتریس ها  در متلب

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

ضرب دو بردار در متلب

بردارها، ماتریس هایی هستند که دارای یک سطر یا یک ستون هستند.  به یاد بیاورید که برای ایجاد یک بردار سطری، مقادیر را با کاما از یکدیگر جدا می کردیم مانند [1,2] و برای ایجاد یک بردار ستونی، از یک سمی کالن استفاده می کریم مانند [3;4]شما همچنین می توانید برای ایجاد یک بردار سطری یا ستونی، از علامت پریم() نیز استفاده کنید. ( منظور همان علامت کوتیشن است). بعنوان مثال عبارت ’[3,4] برابر با [3;4] می باشد. (به کاربرد کاماها و سمی کالن ها توجه داشته باشید).

هنگامی که می خواهید یک بردار را در یک بردار دیگر ضرب کنید، باید یک بردار سطری و یک بردار ستونی داشته باشید.برای امتحان کردن این موضوع عبارت [d =[1,2]*[3;4 را در متلب وارد کنید و کلید Enter را فشار دهید. خواهید که در خروجی مقدار 11 نمایش داده خواهد شد. 

روش انجام دادن ضرب نیز به این صورت است که عنصر اول از بردار سطری را در عنصر اول از بردار ستونی ضرب می کنیم و سپس عنصر دوم از بردار سطری را در عنصر دوم از بردار ستونی ضرب می کنیم (و الی آخر). حالا آنها را با هم جمع می کنیم. در آخر نتیجه به صورت d = 1*3+2*4 خواهد بود. به این روش ضرب کردن، ضرب داخلی نیز گفته می شود.  

این امکان نیز وجود دارد تا با استفاده از متلب، ضرب خارجی را نیز انجام دهیم. در این مورد هر عنصر در اولین بردار، در عناصر دومین بردار ضرب می شود(ضرب فنی ماتریس ها) و سپس نتیجه ی هر ضرب، در یک درایه قرار می گیرد. و در آخر یک ماتریس 2x2 به صورت [4 * 2, 4 * 1; 3 * 2, 3 * 1] خواهیم داشت. ساده ترین راه این کار این است که یک مثال را مشاهده کنیم. برای انجام این کار در متلب عبارت ([e = bsxfun(@times, [1, 2],[3; 4 را تایپ کنید و سپس کلید Enter را فشار دهید. نتیجه به صورت زیر خواهد بود:

تابع ()bsxfun عملیات عنصر به عنصر را انجام می دهد. برای کار کردن این تابع، باید یک آرگومان به آن بدهیم که نوع عملیات ریاضی را تعیین می کند.  همان طور که در مثال بالا مشاهده می کنید، از آرگومان times@  استفاده شده است. این آرگومان، عملیات ضرب را برای ما انجام می دهد. همچنین در دو آرگومان بعدی، یک بردار سطری و یک بردار ستونی مشخص شده اند. 

خروجی ما یک ماتریس 2x2 است به طوری که درایه ی سطر 1 و ستون 1، از آن برابر است با 3*1 ( یعنی ضرب اولین درایه ی سطر اول در اولین درایه ی ستون اول).به همین ترتیب درایه ی سطر 1 و ستون 2 برابر است با 3*2( یعنی ضرب دومین درایه ی سطر اول در اولین درایه ی ستون اول). ضرب دومین سطر نیز درست مانند اولین سطر می باشد.

 یک راه دیگر برای به دست آوردن ضرب خارجی، عبارت است از اینکه اطمینان حاصل کنید که بردار ستونی در ابتدای جمله باشد، بعنوان مثال عبارت [e = [3; 4] * [1, 2 را تایپ کنید، خروجی به صورت زیر خواهد بود:



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

 هنگام ضرب کردن یک ماتریس در یک بردار، ترتیب قرار گرفتن بردار مورد نظر، مهم می باشد. بردارهای سطری قبل از ماتریس قرار می گیرند اما بردارهای ستونی بعد از ماتریس قرار می گیرند. برای اینکه مشاهده کنید که این روش برای بردارهای سطری چگونه کار می کند، عبارت [f = [1, 2] * [3, 4; 5, 6 را در متلب تایپ کنید و کلید Enter را فشار دهید. خروجی به صورت زیر خواهد بود:

عنصر اول به صورت 5*2 + 3*1 محاسبه می شود و عنصر دوم نیز به صورت 6*2 + 4*1 محاسبه می شود.اما توجه کنید که تعداد سطرهای ماتریس باید با تعداد ستون های بردار برابر باشد. به طور کلی، ضرب دو ماتریس AB وقتی تعریف شده است که تعداد ستون های A برابر با تعداد سطرهای B باشد. برای اینکه ببینید روش ذکر شده چطور کار می کند، عبارت [g = [1, 2, 3] * [4, 5; 6, 7; 8, 9 را در متلب وارد کنید و کلید Enter را فشار دهید. نتیجه به صورت زیر خواهد بود:

 در این مورد، تعداد عناصر به وجود آمده در خروجی، به ماتریس مورد نظر بستگی دارد. بعنوان مثال اگر که در ضرب یک بردار در یک ماتریس، ماتریس در هر سطر سه عنصر داشته باشد، خروجی نیز دارای سه عنصر خواهد بود. برای اینکه این قاعده را در عمل مشاهده کنید، عبارت [h = [1, 2, 3] * [4, 5, 6; 7, 8, 9; 10, 11, 12 را تایپ کنید و کلید Enter را فشار دهید. خروجی به صورت زیر خواهد بود:

 کار کردن با یک بردار ستونی ساده تر از کار کردن با یک بردار سطری است، تنها تفاوت این دو در این است که بردار و ماتریس جابه جا می شوند. بعنوان مثال اگر عبارت [i = [4, 5, 6; 7, 8, 9; 10, 11, 12] * [1; 2; 3 را تایپ کنید و کلید Enter را فشار دهید، نتیجه ی زیر حاصل خواهد شد:

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

همان طور که مشاهده می کنید، ترتیب ضرب ها متفاوت می باشد، زیرا ما داریم از یک بردار ستونی به جای یک بردار سطری استفاده می کنیم. 


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

 هنگام کار کردن با ماتریس ها، تعداد ستون های اولین ماتریس باید برابر با تعداد سطرهای ماتریس دوم باشد. بعنوان مثال اگر که اولین ماتریس سه ستون داشته باشد، دومین ماتریس باید دارای سه سطر باشد. برای مشاهده ی این موضوع، عبارت  [j = [1, 2, 3; 4, 5, 6] * [7, 8; 9, 10; 11, 12 را در متلب وارد کنید و کلید Enter را فشار دهید. نتیجه ی زیر حاصل خواهد شد:

 خروجی اولین سطر و اولین ستون، برابر است با 11*3 + 9*2 + 7*1. به همین ترتیب ضرب سطر اول در ستون دوم برابر است با 12*3 + 10*2 + 8*1

یاد آوری: هنگام ضرب کردن دو ماتریس، ترتیب بسیار مهم می باشد. اگر دو ماتریس داشته باشید و ترتیب آنها را عوض کنید، مشاهده می کنید که نتیجه عوض خواهد شد. بعنوان مثال، اگر در مثال بالا، ترتیب دو ماتریس را به صورت [k = [7, 8; 9, 10; 11, 12] * [1, 2, 3; 4, 5, 6 عوض کنید، و کلید Enter را فشار دهید، نتیجه ی متفاوت زیر حاصل خواهد شد:


در این مورد، نتیجه ی ضرب اولین ردیف در اولین ستون برابر است با 4*8 + 1*7 . به همین ترتیب، نتیجه ی ضرب اولین ردیف در دومین ستون برابر است با 5*8 + 2*7


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

 همانند ضرب ماتریس ها، تقسیم ماتریس ها نیز به روش های مختلفی انجام می شود. در بخش های زیر، به تمام حالت های تقسیم ماتریس ها خواهیم پرداخت.


تقسیم یک بردار بر یک عدد(اسکالر)

این امکان وجود دارد که یک بردار را بر یک عدد تقسیم کنیم و یک نتیجه را به دست بیاوریم. بعنوان مثال، عبارت m = [2, 4, 6] / 2 را در متلب تایپ کنید و کلید Enter را فشار دهید، نتیجه ی زیر حاصل خواهد شد:

 همان طور که مشاهده می کنید، هر یک از عناصر بردار، بر عدد 2 تقسیم می شوند. توجه داشته باشید که این تقسیم، تقسیم از سمت راست می باشد. اما اگر به جای آن از، تقسیم از سمت چپ استفاده کنید(m = [2, 4, 6] \ 2) یک نتیجه ی غیر قابل استفاده حاصل خواهد شد. اما اگر از عبارت  [m = 2 \ [2, 4, 6 استفاده کنید، همان نتیجه ی اول به دست خواهد آمد. 


تقسیم یک ماتریس بر یک بردار

هنگام تقسیم کردن یک ماتریس بر یک بردار، به صورت عنصر به عنصر، باید از تابع ()bsxfun به همراه آرگومان rdivide@(برای تقسیم از سمت راست) استفاده کنید. برای مشاهده ی نحوه ی کارکرد این توابع، عبارت ([n = bsxfun(@rdivide, [2, 4; 6, 8], [2, 4 را در متلب تایپ کنید و کلید Enter را فشار دهید. نتیجه ی زیر حاصل خواهد شد:

 در این مورد، عنصر سطر اول و ستون اول به صورت 2/2 محاسبه می شود. و همچنین عنصر قرار گرفته در سطر دوم و ستون اول به صورت 6/2 محاسبه می شود. 


تقسیم دو ماتریس در متلب

هنگام تقسیم دو ماتریس، ابعاد دو ماتریس باید با یکدیگر برابر باشند. بعنوان مثال، شما نمی توانید یک ماتریس 3x2 را بر یک ماتریس 2x3 تقسیم کنید. برای اینکه این موضوع را مشاهده کنید، عبارت [o = [2, 4; 6, 8] / [1, 2; 3, 4 را در متلب تایپ کنید و کلید Enter را فشار دهید. نتیجه ی زیر حاصل خواهد شد:

انجام دادن عمل تقسیم از سمت چپ، برای دو ماتریس نیز امکان پذیر است. برای اینکه نتیجه ی تقسیم همان ماتریس های قبلی، از سمت چپ را مشاهده کنید، عبارت [p = [2, 4; 6, 8] \ [1, 2;3, 4 را در متلب تایپ کنید و کلید Enter را فشار دهید. نتیجه ی زیر حاصل خواهد شد:

یاد آوری: دانستن این نکته ضروری است که تقسیم ماتریس ها، به معنای تقسیمی نیست که اکثر مردم فکر می کنند. درواقع عمل تقسیم ماتریس ها به معنی ضرب یک ماتریس در معکوس ماتریس دیگری است. بعنوان مثال اگر از ماتریس های این بخش استفاده کنیم، با تایپ عبارت ([q = [2, 4; 6, 8] * inv([1,2; 3, 4 و فشردن کلید Enter همان نتیجه را به دست خواهیم آورد. برای انجام دادن تقسیم از سمت راست، عبارت را به صورت [r = inv([2, 4; 6, 8]) * [1, 2; 3, 4 بازنویسی کنید و سپس کلید Enter را فشار دهید. تابع ()inv همواره معکوس ماتریسی که به آن داده ایم را برمی گرداند. اما تابع ()inv از لحاظ محاسباتی ناکارآمد است. و برای اینکه سرعت اجرای اسکریپت شما افزایش یابد، تقسیم کردن بهتر می باشد. 

شما می توانید از تابع ()inv در طرق مختلفی استفاده کنید. بعنوان مثال در ضرب کردن یک ماتریس در معکوس خودش می توانید از این تابع استفاده کنید. بعنوان مثال با تایپ کردن عبارت ([s = [1, 2; 3, 4] * inv([1, 2; 3, 4 یک ماتریس همانی حاصل خواهد شد. 

نکته: برای تقسیم عنصر به عنصر، باید از تابع ()bsxfun استفاده کنید. بعنوان مثال برای انجام دادن تقسیم از سمت چپ بر روی ماتریس های قبلی، عبارت ([t = bsxfun(@ldivide,[2, 4; 6, 8], [1, 2; 3, 4 را تایپ کنید و کلید Enter را فشار دهید. نتیجه برابر است با: