একটি ম্যাট্রিক্সের ডিটারমিন্যান্ট শুধু স্কোয়ার ম্যাট্রিক্সের জন্য ক্যালকুলেট করা যায় প্রথম রোয়ের কোফ্যাক্টরকে αντίস্থ কোফ্যাক্টরের ডিটারমিন্যান্ট দিয়ে গুণ করে এবং বारी বاری চিহ্ন পরিবর্তন করে যোগফল নিয়ে চূড়ান্ত ফলাফল পাওয়া যায়।
$$A = \begin{bmatrix}a & b & c\\d & e &f \\g & h &i \\ \end{bmatrix} |A| = a(ei-fh)-b(di-gf)+c(dh-eg)$$
প্রথমে determinantOfMatrix(int mat[N][N], int dimension) ফাংশন আছে যা ম্যাট্রিক্স এবং ম্যাট্রিক্সের ডাইমেনশন মান নেয়। যদি ম্যাট্রিক্স ১ ডাইমেনশনের হয় তবে [0][0] ম্যাট্রিক্স মান ফেরত দেয়। এই শর্তটি বেস কন্ডিশন হিসাবেও কাজ করে যেহেতু আমরা রিকার্সিভলি ম্যাট্রিক্স ইটারেট করি প্রতিটি রিকার্সিভ কললে ডাইমেনশন কমিয়ে।
int determinantOfMatrix(int mat[N][N], int dimension){
int Det = 0;
if (dimension == 1)
return mat[0][0];
তারপর cofactorMat[N][N] ডিক্লেয়ার করা হয় যেটি cofactor(int mat[N][N], int temp[N][N], int p, int q, int n) ফাংশনে পাস করা হবে যতক্ষণ না firstRow ডাইমেনশন চেয়ে কম। ম্যাট্রিক্সের ডিটারমিন্যান্ট Det ভেরিয়েবলে স্ট্রোর করা হয় প্রতিটি ফর লুপ ইটারেশনে চিহ্ন পরিবর্তন করে। এই det মেইন ফাংশনে ফেরত দিয়ে প্রিন্ট করা হয়।
int cofactorMat[N][N];
int sign = 1;
for (int firstRow = 0; firstRow < dimension; firstRow++){
cofactor(mat, cofactorMat, 0, firstRow, dimension);
Det += sign * mat[0][firstRow] * determinantOfMatrix(cofactorMat, dimension - 1);
sign = -sign;
}
return Det;
}
cofactor(int mat[N][N], int temp[N][N], int p,int q, int n) ফাংশন ম্যাট্রিক্স, কোফ্যাক্টর ম্যাট্রিক্স, 0, firstRow মান এবং ম্যাট্রিক্সের ডাইমেনশন প্যারামিটার হিসেবে নেয়। নেস্টেড ফর লুপ আমাদের ম্যাট্রিক্সে ইটারেট করতে সাহায্য করে এবং যেখানে p এবং q মান রো এবং কলাম মান সমান নয়, সেখানে মানগুলো temp ম্যাট্রিক্সে স্ট্রোর করা হয়।
void cofactor(int mat[N][N], int temp[N][N], int p,int q, int n){
int i = 0, j = 0;
for (int row = 0; row < n; row++){
for (int column = 0; column < n; column++){
if (row != p && column != q){
temp[i][j++] = mat[row][column];
রো একবার পূরণ হলে রো ইন্ডেক্স বাড়ানো হয় এবং কল ইন্ডেক্স রিসেট করা হয়।
if (j == n - 1){
j = 0;
i++;
}
শেষে display(int mat[N][N], int row, int col) আছে যা ম্যাট্রিক্স এবং রো ও কলাম সংখ্যা নেয় এবং ম্যাট্রিক্সকে 2D অ্যারে হিসেবে ইটারেট করে প্রতিটি রো ও কলামের মান প্রিন্ট করে।
void display(int mat[N][N], int row, int col){
for (int i = 0; i < row; i++){
for (int j = 0; j < col; j++)
cout<<mat[i][j]<<" ";
cout<<endl;
}
cout<<endl;
}
উদাহরণ
ম্যাট্রিক্সের ডিটারমিন্যান্ট বের করার ইমপ্লিমেন্টেশন:
#include <iostream>
using namespace std;
const int N = 3;
void cofactor(int mat[N][N], int temp[N][N], int p,int q, int n){
int i = 0, j = 0;
for (int row = 0; row < n; row++){
for (int column = 0; column < n; column++){
if (row != p && column != q){
temp[i][j++] = mat[row][column];
if (j == n - 1){
j = 0;
i++;
}
}
}
}
}
int determinantOfMatrix(int mat[N][N], int dimension){
int Det = 0;
if (dimension == 1)
return mat[0][0];
int cofactorMat[N][N];
int sign = 1;
for (int firstRow = 0; firstRow < dimension; firstRow++){
cofactor(mat, cofactorMat, 0, firstRow, dimension);
Det += sign * mat[0][firstRow] * determinantOfMatrix(cofactorMat, dimension - 1);
sign = -sign;
}
return Det;
}
void display(int mat[N][N], int row, int col){
for (int i = 0; i < row; i++){
for (int j = 0; j < col; j++)
cout<<mat[i][j]<<" ";
cout<<endl;
}
cout<<endl;
}
int main(){
int mat[3][3] = {
{ 1, 0, 2},
{ 3, 0, 0},
{ 2, 1, 4}};
cout<<"The matrix is "<<endl;
display(mat,3,3);
cout<<"Determinant of the matrix is "<<determinantOfMatrix(mat, N);
return 0;
}
আউটপুট
The matrix is 1 0 2 3 0 0 2 1 4 Determinant of the matrix is 6