מטריצות ממלאות תפקיד חיוני בתחומים רבים ומגוונים, כולל גרפיקה ממוחשבת, קריפטוגרפיה ותקשורת אלחוטית. מטריצה היא מערך מלבני של מספרים המסודרים בשורות ובעמודות, המשמש לייצוג אובייקט מתמטי או תכונה שלו.
אחת הפעולות שאולי תצטרך לבצע בהן היא כפל מטריצה. זה מוצא שימושים בתחומים רבים כמו חישובי אווירודינמיקה, עיבוד אותות, עיבוד תמונה וניתוח סיסמי. אבל איך בדיוק מכפילים מטריצות?
כיצד להכפיל שתי מטריצות
אתה מייצג את סדר המטריצה כמכפלה של מספר השורות (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 למספרי קלט והצג את הפלט בהתאם. להכריז על רָאשִׁי פונקציה ובקש מהמשתמש להזין את מספר העמודות ומספר השורות עבור שתי המטריצות באמצעות הדפס() פוּנקצִיָה.
להשתמש ב scanf() פונקציה לקבלת קלט. %d הוא מפרט הפורמט העשרוני המבטיח שהתוכנית קוראת קלט כמספר.
#לִכלוֹל
#לִכלוֹלintרָאשִׁי()
{
int r1, r2, c1, c2;
printf("הזן את מספר השורות ל המטריצה הראשונה:\n");
scanf("%d", &r1);
printf("הזן את מספר העמודות ל המטריצה הראשונה:\n");
scanf("%d", &c1);
printf("הזן את מספר השורות ל המטריצה השנייה:\n");
scanf("%d", &r2);
printf("הזן את מספר העמודות ל המטריצה השנייה:\n");
scanf("%d", &c2);
בדוק שהכפל המטריצה אפשרי. אם מספר העמודות של המטריצה הראשונה אינו שווה למספר השורות של המטריצה השנייה, הצג שגיאה וצא.
if (c1 != r2) {
printf("לא ניתן להכפיל את המטריצות יחד");
יְצִיאָה(-1);
}
אם הכל טוב, הגדירו שני מערכים רב מימדיים, m1 ו m2, בגודל שהמשתמש סיפק. בקש מהמשתמש להזין את הרכיבים של שתי המטריצות בזה אחר זה. השתמש בקובץ מקונן ל לולאה כדי לקחת את הקלט עבור השורה והעמודה של המטריצה. הלולאה החיצונית של המטריצה חוזרת על שורות המטריצה והלולאה הפנימית על פני העמודה של המטריצה.
intm1[r1][c1], m2[r2][c2];
printf("הזן את הרכיבים של המטריצה הראשונה\n");ל (int אני = 0; i < r1; i++) {
ל (int j = 0; j < c1; j++) {
scanf("%d", &m1[i][j]);
}
}
printf("הזן את הרכיבים של המטריצה השנייה\n");
ל (int אני = 0; i < r2; i++) {
ל (int j = 0; j < c2; j++) {
scanf("%d",&m2[i][j]);
}
}
הגדר מטריצה שלישית, מול, בסדר r1 * c2 לאחסון התוצאה. השתמש בקובץ מקונן ל לולאה לביצוע הכפל. הלולאה החיצונית ביותר חוזרת על השורות, הלולאה הפנימית הבאה חוזרת על העמודות, והפנימית מבצעת את הכפל. השתמש בנוסחה mul[i][j] += m1[i][k] * m2[k][j] כדי להכפיל את מרכיבי המטריצה.
הנוסחה משתמשת באופרטור הקיצור += להוסיף mul[i][j] לביטוי המחושב ולאחסן אותו. זכור לאתחל את התוצאה לאפס לפני הוספה אליה.
intמול[r1][c2];ל (int אני = 0; i < r1; i++) {
ל (int j = 0; j < c2; j++) {
mul[i][j] = 0;
ל (int k = 0; k < c1; k++) {
mul[i][j] += m1[i][k] * m2[k][j];
}
}
}
הצג את המטריצה המוכפלת באמצעות לולאה מקוננת עבור החוזרת על פני השורות והעמודות של המטריצות שנוצרו. השתמש בתו השורה החדשה (\n) כדי להציג כל אחת מהשורות בשורה נפרדת. החזר 0 כדי לצאת מהפונקציה הראשית ומהתוכנית.
printf("המטריקס המוכפל הוא: \n"); ל (int אני = 0; i < r1; i++) {
ל (int j = 0; j < c2; j++) {
printf("%d\t", mul[i][j]);
}
printf("\n");
}
לַחֲזוֹר0;
}
הפלט של תוכנית הכפל המטריצה
אתה אמור לראות משהו כמו הפלט הבא כשאתה מפעיל את תוכנית הכפל המטריצה:
אם תזין קלט לא חוקי, הכפל המטריצה נכשל ותראה משהו כזה:
למטריצות שימושים רבים
תחומים שונים משתמשים במטריצות כמו מדע, מסחר, כלכלה, גיאולוגיה, רובוטיקה ואנימציה. תשתמש בעיקר במטריצות במתמטיקה כדי לפתור משוואות לינאריות ולייצג טרנספורמציות כגון סיבוב או תרגום. מטריצות יכולות לחשב את כמות ההשתקפות והשבירה וכן לפתור משוואות רשת AC במעגלים חשמליים.
מלבד יישומים חינוכיים, אתה יכול להשתמש במטריצות לניתוח נתוני סקר, נתוני הצבעה, חישוב רשימות פריטים וקבוצות נתונים אחרות.