การเขียนโปรแกรมคูณเมทริกซ์ ในภาษา C
การคูณเมทริกซ์ (Matrix multiplication) คือการดำเนินการของเมทริกซ์ที่สร้างเมทริกซ์ใหม่จากสองเมทริกซ์ที่มีอยู่ด้วยการคูณ ผลคูณของเมทริกซ์ A และ B สามารถเขียนได้ในรูป AB และในบทเรียนนี้ คุณจะได้เรียนรู้การเขียนโปรแกรมเพื่อคูณเมทริกซ์ในภาษา C
การคูณเมทริกซ์มีกฏอยู่คือจำนวนหลักของเมทริกซ์แรกจะต้องเท่ากับจำนวนแถวของเมทริกซ์ที่สองเท่านั้นจึงจะสามารถคูณกันได้ นี่จะทำให้เมทริกซ์ผลลัพธ์มีจำนวนแถวเท่ากับเมทริกซ์แรกและจำนวนหลักเท่ากับเมทริกซ์ที่สอง
การเขียนโปรแกรมคูณเมทริกซ์
มาเริ่มต้นเขียนโปรแกรมเพื่อคูณเมทริกซ์ในภาษา 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 การคูณเมทริกซ์ถือว่าเป็นการดำเนินการของเมทริกซ์ที่สำคัญที่สุด มันถูกใช้นำไปใช้ในด้านต่างๆ เช่น ทฤษฎีเครือข่าย การแก้สมการเชิงเส้น การแปลงระบบพิกัด และการสร้างแบบจำลองประชากร เป็นต้น