การเขียนโปรแกรมคูณเมทริกซ์ ในภาษา C

16 December 2022

การคูณเมทริกซ์ (Matrix multiplication) คือการดำเนินการของเมทริกซ์ที่สร้างเมทริกซ์ใหม่จากสองเมทริกซ์ที่มีอยู่ด้วยการคูณ ผลคูณของเมทริกซ์ A และ B สามารถเขียนได้ในรูป AB และในบทเรียนนี้ คุณจะได้เรียนรู้การเขียนโปรแกรมเพื่อคูณเมทริกซ์ในภาษา C

การคูณเมทริกซ์มีกฏอยู่คือจำนวนหลักของเมทริกซ์แรกจะต้องเท่ากับจำนวนแถวของเมทริกซ์ที่สองเท่านั้นจึงจะสามารถคูณกันได้ นี่จะทำให้เมทริกซ์ผลลัพธ์มีจำนวนแถวเท่ากับเมทริกซ์แรกและจำนวนหลักเท่ากับเมทริกซ์ที่สอง

การเขียนโปรแกรมคูณเมทริกซ์

มาเริ่มต้นเขียนโปรแกรมเพื่อคูณเมทริกซ์ในภาษา C กัน ในการเขียนโปรแกรมนั้นเราสามารถใช้อาเรย์สองมิติสำหรับเก็บค่าของเมทริกซ์ได้ และเพื่อความเรียบง่ายเราจะกำหนดค่าของเมทริกซ์ไว้ในโปรแกรมเลย นี่เป็นตัวอย่าง

matrix_multiplication.c
#include <stdio.h>

int main()
{
    int a[4][3] = {
        {1, 0, 1},
        {2, 1, 1},
        {0, 1, 1},
        {1, 1, 2}
    };
    int b[3][3] = {
        {1, 2, 1},
        {2, 3, 1},
        {4, 2, 2}
    };
    int c[3][3];

    // Multiply matrices
    for (int i = 0; i < 4; i++) {
        for (int j = 0; j < 3; j++) {
            int sum = 0;
            for (int k = 0; k < 3; k++) {
                sum += a[i][k] * b[k][j];
            }
            c[i][j] = sum;
        }
    }

    // Display matrix A
    printf("A\n");
    for (int i = 0; i < 4; i++) {
        for (int j = 0; j < 3; j++) {
            printf("%d ", a[i][j]);
        }
        printf("\n");
    }

    // Display matrix B
    printf("\nB\n");
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++) {
            printf("%d ", b[i][j]);
        }
        printf("\n");
    }

    // Display matrix C
    printf("\nC=AB\n");
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++) {
            printf("%d ", c[i][j]);
        }
        printf("\n");
    }

    return 0;
}

นี่เป็นผลลัพธ์การทำงานของโปรแกรม

A
1 0 1
2 1 1
0 1 1
1 1 2

B
1 2 1
2 3 1
4 2 2

C=AB
5 4 3
8 9 5
6 5 3
11 9 6

ในตัวอย่างนี้ เราได้เขียนโปรแกรมภาษา C สำหรับคูณสองเมทริกซ์เข้าด้วยกัน โดยเมทริกซ์ A มีขนาด 4x3 และเมทริกซ์ B มีขนาด 3x3 จะเห็นว่าจำนวนหลักของเมทริกซ์แรกจะเท่ากับจำนวนแถวของเมทริกซ์ที่สองในการที่เมทริกซ์จะคูณกันได้

int a[4][3] = {
    {1, 0, 1},
    {2, 1, 1},
    {0, 1, 1},
    {1, 1, 2}
};
int b[3][3] = {
    {1, 2, 1},
    {2, 3, 1},
    {4, 2, 2}
};
int c[3][3];

นี่เป็นการกำหนดค่าของเมทริกซ์ในตัวแปรอาเรย์ เราได้ประกาศอาเรย์สองมิติที่มีขนาดเท่ากับจำนวนแถวและหลักของเมทริกซ์ A และ B ในตัวแปรชื่อ a และ b ตามลำดับ และผลลัพธ์การคูณจะถูกเก็บในตัวแปรอาเรย์ c สำหรับค่าของเมทริกซ์ C

// Multiply matrices
for (int i = 0; i < 4; i++) {
    for (int j = 0; j < 3; j++) {
        int sum = 0;
        for (int k = 0; k < 3; k++) {
            sum += a[i][k] * b[k][j];
        }
        c[i][j] = sum;
    }
}

ถัดมาเป็นการคำนวณเพื่อหาผลคูณของเมทริกซ์ เราได้ใช้คำสั่ง for loop เพื่อวนอ่านค่าในอาเรย์ a และ b จากนั้นนำมาคำนวณหาผลคูณและเก็บผลลัพธ์การคูณในตัวแปรอาเรย์ c โดยการคำนวณจะใช้สูตรการคูณของเมทริกซ์ที่แสดงดังรูปภาพต่อไปนี้

การคูณกันของเมทริกซ์

นี่สามารถอธิบายได้ว่า ผลลัพธ์การคูณของเมทริกซ์ที่ตำแหน่ง Ci,j จะมีค่าเท่ากับ ผลรวมของการคูณกันระหว่างค่าในแถวที่ i ของ A และค่าในหลักที่ j ของ B

// Display matrix C
printf("\nC=AB\n");
for (int i = 0; i < 3; i++) {
    for (int j = 0; j < 3; j++) {
        printf("%d ", c[i][j]);
    }
    printf("\n");
}

สุดท้ายเป็นการแสดงค่าของเมทริกซ์ทั้งสามออกทางหน้าจอโดยใช้คำสั่ง for loop วนตามขนาดของอาเรย์แต่ละตัวเพื่ออ่านค่าและแสดงออกทางหน้าจอ

ในบทเรียนนี้ คุณได้เรียนรู้การเขียนโปรแกรมเพื่อคูณเมทริกซ์ในภาษา C การคูณเมทริกซ์ถือว่าเป็นการดำเนินการของเมทริกซ์ที่สำคัญที่สุด มันถูกใช้นำไปใช้ในด้านต่างๆ เช่น ทฤษฎีเครือข่าย การแก้สมการเชิงเส้น การแปลงระบบพิกัด และการสร้างแบบจำลองประชากร เป็นต้น

บทความนี้เป็นประโยชน์หรือไม่? Yes · No