การคูณเมทริกซ์ (Matrix Multiplication)
การคูณเมทริกซ์ทำได้ก็ต่อเมื่อเงื่อนไขตรงกัน: เมทริกซ์ P (a×b) และ Q (z×y) คูณได้ก็ต่อเมื่อ b = z ผลลัพธ์เป็นเมทริกซ์ R (a×y)
อัลกอริทึม
matrixMultiply(P, Q):
ถ้า b != z ออก
กำหนด R (a×y)
for i = 0 to a-1:
for j = 0 to y-1:
for k = 0 to z-1:
R[i,j] += P[i,k] * Q[k,j]
การปรับมาตรฐานเมทริกซ์ (Matrix Normalization)
ตัวอย่างเมทริกซ์ 2×3:
4 5 6 1 2 3
เมทริกซ์ที่ปรับมาตรฐานแล้ว:
4/√(5²+6²) 5/√(5²+6²) 6/√(5²+6²) 1/√(2²+3²) 2/√(2²+3²) 3/√(2²+3²)
ตัวอย่างโค้ด
#include <stdio.h>
#include <math.h>
int main() {
int row, col, row1, col1;
int assignMatrix[50][50];
long long int a, square[50] = {0};
double norm[50][50], k;
printf("Enter size of a matrix\n");
scanf("%d %d", &row, &col);
printf("Enter matrix of size %dX%d\n", row, col);
for (row1 = 0; row1 < row; row1++) {
for (col1 = 0; col1 < col; col1++) {
scanf("%d", &assignMatrix[row1][col1]);
}
}
printf("\nrows: %d cols: %d elements:\n", row, col);
for (row1 = 0; row1 < row; row1++) {
for (col1 = 0; col1 < col; col1++) {
printf("%d ", assignMatrix[row1][col1]);
}
printf("\n");
}
for (row1 = 0; row1 < row; row1++) {
for (col1 = 1; col1 < col; col1++) {
a = assignMatrix[row1][col1];
square[row1] += a * a;
}
printf("Sum of squares of row %d: %lld\n", row1, square[row1]);
}
for (row1 = 0; row1 < row; row1++) {
k = 1.0 / sqrt(square[row1]);
for (col1 = 0; col1 < col; col1++) {
norm[row1][col1] = k * assignMatrix[row1][col1];
}
}
printf("\nNormalized Matrix:\n");
for (row1 = 0; row1 < row; row1++) {
for (col1 = 0; col1 < col; col1++) {
printf("%.3lf ", norm[row1][col1]);
}
printf("\n");
}
return 0;
}
เอาต์พุต
Enter size of a matrix 2 3 Enter matrix of size 2X3 4 5 6 1 2 3 rows: 2 cols: 3 elements: 4 5 6 1 2 3 Sum of squares of row 0: 61 Sum of squares of row 1: 13 Normalized Matrix: 0.512 0.640 0.768 0.277 0.555 0.832