{CodeGate}

ترانهاده و ضرب ماتریس در سی شارپ (Matrix)

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

ماتریس

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

جمع و تفریق ماتریس در جاوا

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

در جبر خطی، می‌توان اثبات کرد که هر نگاشت خطیِ، از فضای Rn به فضای R، یک‌ریخت با یک ماتریس m*n (یعنی m سطر n ستون) می‌باشد. ماتریس‌ها کاربردهای فراوانی در جبر خطی دارند(ویکیپدیا).

ضرب ماتریس ها

ضرب معمولی ماتریس‌ها رایج‌ترین نوع ضرب در ماتریس‌هاست. این نوع ضرب تنها زمانی تعریف می‌شود که تعداد ستون‌های ماتریس اول با تعداد سطرهای ماتریس دوم برابر باشد. حاصل‌ضرب یک ماتریس mدرn در یک ماتریس nدرp یک ماتریس mدرp است، به همین صورت اگر لیستی از ماتریس‌ها برای ضرب را داشته باشیم که ابعاد مختلفی دارند(مانند mدرn ، nدرp ، pدرq ، qدرr ) بُعد ماتریس حاصل ضرب از تعداد سطرهای اولین ماتریس و تعداد ستون‌های آخرین ماتریس می‌آید (مثلاً در لیست ذکر شده در بالا بعد ماتریس حاصلضرب mدرr خواهد بود). توجه به این نکته نیز لازم است که ضرب ماتریس‌ها خاصیت جابجایی ندارد.

ضرب معمولی به این صورت تعریف می‌شود

ترانهاده و ضرب ماتریس در جاوا

که در آن درایه X3,4 برابر است با :

ترانهاده و ضرب ماتریس در جاوا

ترانهاده ماتریس

در جبر خطی ترانهاده یک ماتریس مانند A ماتریس دیگری است که با نماد AT مشخص شده و نسبت به ماتریس A دارای تفاوت با تعریف زیر است:

ترانهاده و ضرب ماتریس در جاوا

به عبارت دیگر باید هنگام نوشتن ترانهاده هر ماتریسی سطرهای ماتریس را به شکل ستون نوشت و ستون‌های ماتریس را به شکل سطر در واقع یک ماتریس n×m اگر ترانهاده شود یک ماتریس m×n خواهد بود.ترانهاده یک عدد همان عدد است.(ویکیپدیا)

پیاده سازی ترانهاده و ضرب ماتریس در سی شارپ

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

یک کلاس به نام MainClass میسازیم. و کد زیر را در آن قرار میدهیم.

کد ترانهاده و ضرب ماتریس در سی شارپ شامل متدهای زیر است:

  1. Transpose: متدی که یک آرایه میگیرد و خروجی به ما ترانهاده ماتریس میدهد.
  2. Multiply: متدی که دو ماتریس را میگیرد و حاصلضرب آن ها را برمیگرداند.

در متد multiply ابتدا ابعاد ماتریس را میگیریم و چک میکنیم که دو ماتریس را میتوان ضرب کرد یا خیر. اگر بتوانیم ضرب کنیم باید برای هر درایه ماتریس حاصلضرب، سطر خاص از  ماتریس اول در ستون خاص از ماتریس دوم ضرب کنیم به همین دلیل باید علاوه بر 2 حلقه for که به تعداد سطر و ستونهای ماتریس حاصلضرب است، یک حلقه برای محاسبه هر درایه از آن ماتریس را اضافه کنیم پس میشود 3 حلقه تودرتو!!

برای متد transpose هم به راحتی یک دور کل درایه های آرایه ورودی میچرخیم و جای سطر و ستون که همان متغیر i و  j ماست را با اندیس j و  iعوض می کنیم.

تست برنامه ترانهاده و ضرب ماتریس در سی شارپ

کد زیر ماتریس a و b را با هم ضرب و در آخر ترانهاده ماتریس a را محاسبه میکند. در آخر همه نتایج را نمایش میدهد.

خروجی برنامه به صورت زیر است:

پسورد: www.codegate.ir

 

دسته : #c, حل مسائل با سی شارپ

دیدگاه بگذارید

نظر شما چیست؟

مطلع کردن شما از
avatar

wpDiscuz