বর্গ ম্যাট্রিক্সের ডিটারমিন্যান্ট (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 ডিকম্পোজিশন বা গাউস এলিমিনেশন দ্রুত।