Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม C

โปรแกรม C ตรวจสอบเมทริกซ์ Singular หรือ Non-singular

เมทริกซ์ 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)

  1. ฟังก์ชัน cofactor() สร้างเมทริกซ์ย่อยโดยตัดแถวและคอลัมน์ที่กำหนด
  2. ฟังก์ชัน check_singular() คำนวณ determinant แบบ recursive
  3. ถ้า 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