Menu
Coddy logo textTech

פעולות מטריצה נפוצות

חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-C# של Coddy. שיעור 6 מתוך 66.

מטריצות נפוצות במתמטיקה ובמדעי המחשב. בואו נחקור כמה פעולות נפוצות על מערכים דו־ממדיים.

חברו שתי מטריצות:

int[][] AddMatrices(int[][] a, int[][] b)
{
    int rows = a.Length;
    int[][] result = new int[rows][];
    
    for (int i = 0; i < rows; i++)
    {
        result[i] = new int[a[i].Length];
        for (int j = 0; j < a[i].Length; j++)
        {
            result[i][j] = a[i][j] + b[i][j];
        }
    }
    return result;
}

שחלוף מטריצה (החלפת שורות ועמודות):

int[][] Transpose(int[][] matrix)
{
    int rows = matrix.Length;
    int cols = matrix[0].Length;
    
    int[][] result = new int[cols][];
    for (int i = 0; i < cols; i++)
    {
        result[i] = new int[rows];
        for (int j = 0; j < rows; j++)
        {
            result[i][j] = matrix[j][i];
        }
    }
    return result;
}

חשב את הסכום של כל שורה:

int[] RowSums(int[][] matrix)
{
    int rows = matrix.Length;
    int[] sums = new int[rows];
    
    for (int i = 0; i < rows; i++)
    {
        int sum = 0;
        for (int j = 0; j < matrix[i].Length; j++)
        {
            sum += matrix[i][j];
        }
        sums[i] = sum;
    }
    return sums;
}

הכפל שתי מטריצות זו בזו:

בכפל מטריצות, כל איבר result[i][j] מחושב על ידי לקיחת שורה i מהמטריצה הראשונה ועמודה j מהמטריצה השנייה, הכפלת האיברים המתאימים שלהן וסכימת המכפלות. בניסוח פורמלי: result[i][j] = sum of matrix1[i][k] * matrix2[k][j] עבור כל הערכים התקפים של k.
כדי שזה יעבוד, מספר העמודות ב-matrix1 חייב להיות שווה למספר השורות ב-matrix2. למטריצה המתקבלת יש ממדים [matrix1.rows × matrix2.cols].

int[][] MultiplyMatrices(int[][] a, int[][] b)
{
    int rows = a.Length;
    int cols = b[0].Length;
    int inner = b.Length;
    
    int[][] result = new int[rows][];
    for (int i = 0; i < rows; i++)
    {
        result[i] = new int[cols];
        for (int j = 0; j < cols; j++)
        {
            int sum = 0;
            for (int k = 0; k < inner; k++)
            {
                sum += a[i][k] * b[k][j];
            }
            result[i][j] = sum;
        }
    }
    return result;
}
challenge icon

אתגר

קשה

צרו מתודה בשם multiplyMatrices ש:

  1. מקבלת שתי מטריצות (מערכים משוננים דו־ממדיים) כפרמטרים: matrix1 ו-matrix2
  2. מכפילה אותן בהתאם לכללי כפל מטריצות
  3. מחזירה את המטריצה המתקבלת

כדי שכפל מטריצות יהיה תקין:

  • מספר העמודות ב-matrix1 חייב להיות שווה למספר השורות ב-matrix2
  • ממדי התוצאה יהיו: [matrix1.rows × matrix2.columns]

איך עובד כפל מטריצות:
כל איבר במיקום [i][j] בתוצאה מחושב על ידי לקיחת שורה i מתוך matrix1 ועמודה j מתוך matrix2, הכפלת האיברים המתאימים שלהן זה בזה וחיבור כל המכפלות:

result[i][j] = matrix1[i][0] * matrix2[0][j] + matrix1[i][1] * matrix2[1][j] + ...

במילים אחרות: result[i][j] = sum of (matrix1[i][k] * matrix2[k][j]) עבור כל k.

לדוגמה, אם matrix1 היא:

[1, 2]
[3, 4]

ו-matrix2 היא:

[5, 6]
[7, 8]

אז result[0][0] = 1*5 + 2*7 = 19, result[0][1] = 1*6 + 2*8 = 22, וכן הלאה. התוצאה צריכה להיות:

[19, 22]
[43, 50]

אם לא ניתן להכפיל את המטריצות, החזירו null.

נסו בעצמכם

public class MultiplyMatrices
{
    // ממשו את המתודה MultiplyMatrices
    public static int[][] multiplyMatrices(int[][] matrix1, int[][] matrix2)
    {
        // כתבו כאן את הקוד שלכם
        
    }
}
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה לוגיקה וזרימת תוכנית

תרגלו בעצמכם: קומפיילר C# אונליין