কম্পিউটার টিউটোরিয়াল

ম্যাট্রিক্সের ডিটারমিন্যান্ট বের করার C++ প্রোগ্রাম


বর্গ ম্যাট্রিক্সের ডিটারমিন্যান্ট (determinant) এর মান এর এলিমেন্টগুলো থেকে বের করা যায়। জ্যামিতিতে এটি লিনিয়ার ট্রান্সফরমেশনের স্কেলিং ফ্যাক্টর বোঝায়। ২x২ ম্যাট্রিক্সের ডিটারমিন্যান্ট: det = a*d - b*c। বড় ম্যাট্রিক্সের জন্য কোফ্যাক্টর এক্সপ্যানশন (cofactor expansion) বা রিকার্সিভ পদ্ধতি ব্যবহার করা হয়।

উদাহরণ

ম্যাট্রিক্স:
3 1
2 7
ডিটারমিন্যান্ট = (3*7) - (1*2) = 21 - 2 = 19

উদাহরণ কোড (রিকার্সিভ কোফ্যাক্টর মেথড)

#include <iostream>
#include <cmath>
using namespace std;

int determinant(int matrix[10][10], int n) {
    int det = 0;
    int submatrix[10][10];

    if (n == 2) {
        return (matrix[0][0] * matrix[1][1]) - (matrix[1][0] * matrix[0][1]);
    } else {
        for (int x = 0; x < n; x++) {
            int subi = 0;
            for (int i = 1; i < n; i++) {
                int subj = 0;
                for (int j = 0; j < n; j++) {
                    if (j == x) continue;
                    submatrix[subi][subj] = matrix[i][j];
                    subj++;
                }
                subi++;
            }
            det += pow(-1, x) * matrix[0][x] * determinant(submatrix, n - 1);
        }
    }
    return det;
}

int main() {
    int n, i, j;
    int matrix[10][10];

    cout << "ম্যাট্রিক্সের সাইজ দিন: ";
    cin >> n;
    cout << "ম্যাট্রিক্সের এলিমেন্টগুলো দিন:\n";
    for (i = 0; i < n; i++)
        for (j = 0; j < n; j++)
            cin >> matrix[i][j];

    cout << "ইনপুট ম্যাট্রিক্স:\n";
    for (i = 0; i < n; i++) {
        for (j = 0; j < n; j++)
            cout << matrix[i][j] << " ";
        cout << endl;
    }

    cout << "ডিটারমিন্যান্ট = " << determinant(matrix, n);
    return 0;
}

আউটপুট

ম্যাট্রিক্সের সাইজ দিন: 3
ম্যাট্রিক্সের এলিমেন্টগুলো দিন:
7 1 3
2 4 1
1 5 1
ইনপুট ম্যাট্রিক্স:
7 1 3
2 4 1
1 5 1
ডিটারমিন্যান্ট = 10

ব্যাখ্যা

বেস কেস (n == 2)

সরাসরি ফর্মুলা ad - bc দিয়ে রিটার্ন।

রিকার্সিভ কেস (n > 2)

প্রথম রোর প্রতিটি এলিমেন্ট matrix[0][x] এর জন্য কোফ্যাক্টর হিসাব করা হয়। সাব-ম্যাট্রিক্স বানাতে প্রথম রো এবং x-তম কলাম বাদ দিয়ে বাকি এলিমেন্টগুলো কপি করা হয়। তারপর pow(-1, x) * matrix[0][x] * determinant(submatrix, n-1) যোগ করা হয়। এটি লাপ্লাস এক্সপ্যানশন (Laplace expansion)।

নোট: এই মেথড O(n!) টাইম কমপ্লেক্সিটি দেয়। বড় ম্যাট্রিক্সের জন্য LU ডিকম্পোজিশন বা গাউস এলিমিনেশন দ্রুত।

  1. C++-এ ম্যাট্রিক্স লোয়ার ট্রায়্যাঙ্গুলার কিনা তা যাচাই করার প্রোগ্রাম

  2. C++-এ ইনভোলিউটরি ম্যাট্রিক্স যাচাই করার প্রোগ্রাম

  3. C++-এ আইডেমপটেন্ট ম্যাট্রিক্স যাচাই করার প্রোগ্রাম

  4. C++ প্রোগ্রাম: অ্যাডজেসেন্সি ম্যাট্রিক্স বাস্তবায়ন