เมทริกซ์ Singular คือเมทริกซ์ที่มี determinant เท่ากับศูนย์ ในขณะที่ Non-singular มี determinant ไม่ใช่ศูนย์ โปรแกรมนี้คำนวณ determinant ของเมทริกซ์ 3x3 เพื่อตรวจสอบ
สูตร Determinant 3x3
|M| = a(ei − fh) − b(di − fg) + c(dh − eg)
ตัวอย่าง
Input: {{4,10,1},{0,2,3},{1,4,-3}} → Non-singular
Input: {{0,0,0},{10,20,30},{1,4,-3}} → Singular (แถวแรกเป็นศูนย์)
อัลกอริทึม (Recursive Cofactor Expansion)
- ฟังก์ชัน
cofactor()สร้างเมทริกซ์ย่อยโดยตัดแถวและคอลัมน์ที่กำหนด - ฟังก์ชัน
check_singular()คำนวณ determinant แบบ recursive - ถ้า determinant ≠ 0 → Non-singular, มิฉะนั้น Singular
โค้ดตัวอย่าง
#include <stdio.h>
#define N 4
int cofactor(int matrix[N][N], int matrix2[N][N], int p, int q, int n) {
int i = 0, j = 0, row, col;
for (row = 0; row < n; row++) {
for (col = 0; col < n; col++) {
if (row != p && col != q) {
matrix2[i][j++] = matrix[row][col];
if (j == n - 1) { j = 0; i++; }
}
}
}
return 0;
}
int check_singular(int matrix[N][N], int n) {
int D = 0;
if (n == 1) return matrix[0][0];
int matrix2[N][N], sign = 1;
for (int f = 0; f < n; f++) {
cofactor(matrix, matrix2, 0, f, n);
D += sign * matrix[0][f] * check_singular(matrix2, n - 1);
sign = -sign;
}
return D;
}
int main() {
int matrix[N][N] = {{4,10,1},{0,2,3},{1,4,-3}};
if (check_singular(matrix, N))
printf("Matrix is Singular\n");
else
printf("Matrix is non-Singular\n");
return 0;
}
ผลลัพธ์
Matrix is non-Singular