مهارت های ریاضی خود را با این الگوریتم اساسی تقویت کنید.
ماتریس ها در بسیاری از زمینه های مختلف از جمله گرافیک کامپیوتری، رمزنگاری و ارتباطات بی سیم نقش حیاتی دارند. ماتریس یک آرایه مستطیلی از اعداد است که در ردیفها و ستونها مرتب شدهاند و برای نمایش یک شی ریاضی یا ویژگی آن استفاده میشود.
یکی از عملیاتی که ممکن است لازم باشد روی آنها انجام دهید ضرب ماتریس است. این در بسیاری از زمینه ها مانند محاسبات آیرودینامیک، پردازش سیگنال، پردازش تصویر و تجزیه و تحلیل لرزه ای کاربرد دارد. اما دقیقاً چگونه ماتریس ها را ضرب می کنید؟
چگونه دو ماتریس را ضرب کنیم
شما ترتیب یک ماتریس را به عنوان حاصل ضرب تعداد سطرها (m) و تعداد ستون ها (n) نشان می دهید. برای ضرب دو ماتریس، تعداد ستون های ماتریس اول باید برابر با ردیف های ماتریس دوم باشد.
اگر دو ماتریس دارید، ماتریس A از مرتبه m × n و B از مرتبه n × p، ترتیب ماتریس حاصل m × p خواهد بود. برای مثال، فرض کنید یک ماتریس A حاوی دو سطر (m) و سه ستون (n) و یک ماتریس B حاوی سه سطر (n) و دو ستون (p) دارید. ماتریس حاصل از دو سطر و دو ستون تشکیل شده است:
شما دو ماتریس را با استفاده از حاصل ضرب نقطه ای ضرب می کنید. برای بدست آوردن مقدار عنصر اول ماتریس حاصل، عناصر ردیف اول ماتریس اول و ردیف اول ماتریس دوم را به صورت عنصر به عنصر ضرب و اضافه کنید:
(1، 2، 3) • (7، 9، 11) = 1×7 + 2×9 + 3×11 = 58
به همین ترتیب، برای عنصر دوم، ردیف اول ماتریس اول و ستون دوم ماتریس دوم را به صورت زیر ضرب کنید:
(1، 2، 3) • (8، 10، 12) = 1×8 + 2×10 + 3×12 = 64
برای عنصر سوم، ردیف دوم ماتریس اول و ستون اول ماتریس دوم را به صورت زیر ضرب کنید:
(4، 5، 6) • (7، 9، 11) = 4×7 + 5×9 + 6×11 = 139
برای عنصر چهارم، ردیف دوم ماتریس اول و ستون دوم ماتریس دوم را به صورت زیر ضرب کنید:
(4، 5، 6) • (8، 10، 12) = 4×8 + 5×10 + 6×12 = 154
بنابراین، ماتریس حاصل به صورت زیر است:
شما می توانید برنامه های مختلفی را برای عملیات های مختلف بر روی ماتریس ها کاوش کرده و بسازید:
- جمع و تفریق دو ماتریس
- یافتن جابجایی یک ماتریس
- بررسی اینکه آیا دو ماتریس یکسان هستند یا خیر
الگوریتمی برای ضرب دو ماتریس
برای ساختن برنامه ضرب هر دو ماتریس از این الگوریتم پیروی کنید:
- برنامه را شروع کنید.
- سطرها و ستون های ماتریس اول را وارد کنید.
- سطرها و ستون های ماتریس دوم را وارد کنید.
- اگر ماتریس ها برای ضرب ناسازگار هستند، خطا را چاپ کرده و خارج شوید.
- یک ماتریس تعریف کنید و اعداد را در ماتریس اول وارد کنید.
- ماتریس دیگری تعریف کنید و عدد را در ماتریس دوم وارد کنید.
- یک ماتریس برای ذخیره حاصل ضرب دو ماتریس تعریف کنید.
- یک حلقه برای تکرار روی ردیف ماتریس اول تنظیم کنید.
- یک حلقه داخلی برای تکرار روی ستون ماتریس دوم تنظیم کنید.
- یک حلقه داخلی دیگر را برای تکرار روی ستون ماتریس اول تنظیم کنید.
- با استفاده از فرمول mul[i][j] += m1[i][k] * m2[k][j] عناصر را ضرب و جمع کنید و حاصل ضرب را در ماتریس حاصل ذخیره کنید.
- ماتریس حاصل را نمایش دهید.
- از برنامه خارج شوید.
نحوه انجام ضرب ماتریس با استفاده از C
کل کد منبع برای ضرب ماتریس با استفاده از C در این مخزن GitHub وجود دارد و استفاده از آن رایگان است.
کتابخانه stdio را به اعداد ورودی وارد کنید و خروجی را مطابق با آن نمایش دهید. تابع main را اعلام کنید و از کاربر بخواهید با استفاده از تابع print() تعداد ستون ها و تعداد ردیف ها را برای هر دو ماتریس وارد کند.
برای دریافت ورودی از تابع scanf() استفاده کنید. %d مشخص کننده فرمت اعشاری است که تضمین می کند برنامه ورودی را به عنوان یک عدد می خواند.
#include <stdio.h>
#include <stdlib.h>
int main()
{
int r1, r2, c1, c2;
printf("Enter the number of rows for the first matrix:\n");
scanf("%d", &r1);
printf("Enter the number of columns for the first matrix:\n");
scanf("%d", &c1);
printf("Enter the number of rows for the second matrix:\n");
scanf("%d", &r2);
printf("Enter the number of columns for the second matrix:\n");
scanf("%d", &c2);
بررسی کنید که ضرب ماتریس ممکن است. اگر تعداد ستونهای ماتریس اول با تعداد ردیفهای ماتریس دوم برابر نیست، یک خطا نمایش داده و خارج شوید.
if (c1 != r2) {
printf("The matrices cannot be multiplied together");
exit(-1);
}
اگر همه چیز خوب است، دو آرایه چند بعدی m1 و m2 را با اندازه ای که کاربر ارائه کرده است تعریف کنید. از کاربر بخواهید عناصر هر دو ماتریس را یکی یکی وارد کند. از یک حلقه for تو در تو برای گرفتن ورودی برای سطر و ستون ماتریس استفاده کنید. حلقه for خارجی روی ردیف های ماتریس و حلقه داخلی روی ستون ماتریس تکرار می شود.
int m1[r1][c1], m2[r2][c2];
printf("Enter the elements of the first matrix\n");
for (int i = 0; i < r1; i++) {
for (int j = 0; j < c1; j++) {
scanf("%d", &m1[i][j]);
}
}
printf("Enter the elements of the second matrix\n");
for (int i = 0; i < r2; i++) {
for (int j = 0; j < c2; j++) {
scanf("%d",&m2[i][j]);
}
}
یک ماتریس سوم، mul، به ترتیب r1 * c2 برای ذخیره نتیجه تعریف کنید. برای انجام ضرب از یک حلقه for تو در تو استفاده کنید. بیرونی ترین حلقه for روی ردیف ها، حلقه داخلی بعدی روی ستون ها تکرار می شود و داخلی ترین حلقه ضرب را انجام می دهد. از فرمول mul[i][j] += m1[i][k] * m2[k][j] برای ضرب عناصر ماتریس استفاده کنید.
این فرمول از عملگر خلاصه += برای اضافه کردن mul[i][j] به عبارت محاسبه شده و ذخیره آن استفاده می کند. به یاد داشته باشید که قبل از اضافه کردن نتیجه به آن، مقدار اولیه را صفر کنید.
int mul[r1][c2];
for (int i = 0; i < r1; i++) {
for (int j = 0; j < c2; j++) {
mul[i][j] = 0;
for (int k = 0; k < c1; k++) {
mul[i][j] += m1[i][k] * m2[k][j];
}
}
}
ماتریس ضرب شده را با استفاده از یک حلقه for تو در تو که روی سطرها و ستون های ماتریس های حاصل تکرار می شود، نمایش دهید. از کاراکتر خط جدید (\n) برای نمایش هر یک از سطرها در یک خط جداگانه استفاده کنید. 0 را برگردانید تا از تابع اصلی و برنامه خارج شوید.
printf("The multiplied matrix is: \n");
for (int i = 0; i < r1; i++) {
for (int j = 0; j < c2; j++) {
printf("%d\t", mul[i][j]);
}
printf("\n");
}
return 0;
}
خروجی برنامه ضرب ماتریس
هنگام اجرای برنامه ضرب ماتریس باید چیزی شبیه خروجی زیر مشاهده کنید:
اگر ورودی نامعتبر وارد کنید، ضرب ماتریس با شکست مواجه می شود و چیزی شبیه به این را خواهید دید:
ماتریس ها کاربردهای زیادی دارند
رشته های مختلف از ماتریس هایی مانند علم، تجارت، اقتصاد، زمین شناسی، رباتیک و انیمیشن استفاده می کنند. شما عمدتاً از ماتریس ها در ریاضیات برای حل معادلات خطی و نمایش تبدیل هایی مانند چرخش یا ترجمه استفاده می کنید. ماتریس ها می توانند میزان بازتاب و شکست و همچنین حل معادلات شبکه AC در مدارهای الکتریکی را محاسبه کنند.
جدا از کاربردهای آموزشی، میتوانید از ماتریسها برای تجزیه و تحلیل دادههای نظرسنجی، دادههای رأیگیری، محاسبه فهرستهای آیتمها و سایر مجموعههای داده استفاده کنید.