Algorithm

সি ( C ) প্রোগ্রাম ব্যবহার করে কোন N x N সাইজের বর্গ ম্যাট্রিক্স এর নির্ণায়ক এর মান বের করার পদ্ধতি ।

কোন
বর্গ ম্যাট্রিক্স এর নির্ণায়ক বলতে ঐ ম্যাট্রিক্স এর মান কে বুঝায় । সি
প্রোগ্রামে রিকার্শন ব্যাবহার করে খুব সহজেই আমরা কোন বর্গ ম্যাট্রিক্স এর
নির্ণায়ক বের করতে পারি ।

আজকের
আর্টিকেলটাকে আমি দুইটা মুল অংশে ভাগ করেছি । প্রথম অংশটুকুতে থিওরির
বর্ননা করা হবে । পরের অংশটুকুতে কোডিং নিয়ে আলোচনা করা হবে ।

থিওরি অংশ :

 

আমরা জানি কোন ম্যাট্রিক্স এর মান নির্ণয় করতে হলে ঐ ম্যাট্রিক্স কে অবশ্যই বর্গ ম্যাট্রিক্স হতে হবে ।
তারপর , কোন বর্গ ম্যাট্রিক্স এর মান নির্ণয় করতে হলে আমরা নিম্নরূপ সূত্র ব্যবহার করতে পারি ।
এখানে
সবশেষে প্রাপ্ত ২×২ সাইজের ম্যাট্রিক্স এর মান আমরা খুব সহজেই বের করতে
পারব । সুতরাং  2×2  সাইজের এরে টাই হবে আমাদের রিকার্শন এর এর টার্মিনেশন
পয়েন্ট ।
প্রয়োগ :
ওপরের
সূত্র থেকে দেখা যাচ্ছে আমাদের প্রতিবারে একটা করে key ইলিমেন্ট সিলেক্ট
করতে হচ্ছে এবং ঐ  key এর কলাম আর রো বাদ দিয়ে গঠিত বর্গম্যাট্রিক্স এ আবার
একই কাজ পুনরায় করতে হচ্ছে । এখান থেকে দেখা যাচ্ছে আমরা একই ধরনের কাজ
ততবার করছি যতক্ষন না পর্যন্ত আমরা 2×2  সাইজের বর্গ মআট্রিক্স পাচ্ছি ।
2×2 সাইজের ম্যাট্রিক্স পাওয়ার পরে আমরা

সূত্রের প্রয়োগ করে মান বের করে ফেলতে পারব , এবং এই মানটার সাথে পূর্বে প্রাপ্ত সহগুনক গুলো গুন দিব
সুতরাং আমাদের কিছুই করতে হচ্ছে না । শুধু আমরা একটা সহগুনক চিহ্নসহ সিলেক্ট করবো এবং এ সহগটার রো আর কলাম বাদে বাকি
ইলিমেন্ট গুলো আবার একই ফাংশনে প্যারামিটার হিসেবে পাঠাবো । যদি কোন
প্যারামিটারে ম্যাট্রিক্স এর সাইজ 2×2 হয় তবে আমরা রিকারশন টার্মিনেশন করবো
রিটার্ন করে । মনে রাখতে হবে চিহ্নের ব্যপারে েবিশেষ সতর্ক থাকা লাগবে ।
কোড :
নিচের
কোডের অংশে আমরা প্রথমে একটা array নিয়েছি । এটার নাম দিয়েছি
secondaryMatrix এবং যার সাইজ  Main matrix এর সমান । আমরা কি করবে মেইন
থেকে প্রাপ্ত সাব ম্যাট্রিক্স কে এখানে কপি করব । মানে সহগ এর রো কলাম বাদে
যে ম্যাট্রিক্স টা থাকে তাকে
কাপি করব এখানে k ভেরিয়েবল এর মাধ্যমে আমরা সহগ কলাম সিলেক্শন করেছি । সহগের রো প্রত্যেক কপি ম্যাট্রিক্সেই প্রথম রো ।
  /*Part referance 1*/
 
    int secondaryMatrix[100][100]={0};
    int k,s=0,i,j;
    long long sum=0;
    for(k=0;k<n;k++)
    {
    for(i=1;i<n;i++)
    {
        for(j=0;j<n;j++)
        {
            if(j!=k)
            {
                secondaryMatrix[i-1][s]=arr[i][j];
                s++;
 
            }
        }
 
        s=0;
    }
    int p = pow(-1,k+2)*arr[0][k];
    /*End of part ref 1*/
int p = pow(-1,k+2)*arr[0][k] এর মাধ্যমে আমরা চিহ্নকে এসাইন করেছি ।
পরবর্তী কোড:     sum+=(long long)p*det(secondaryMatrix,n-1);
এর মাধ্যমে আমরা রিকার্সিভ ভাবে ফাংশন কল করেছি । প্যারামিটার সাপ্লাই
করেছি কপি করা ম্যাট্রিক্সটা এবং সোর্স ম্যাট্রিক্স এর সাইজ থেকে এক কম
আকার ।
    if(n==2)
    {
        int minimalDet = arr[0][0]*arr[1][1]-arr[0][1]*arr[1][0];
        return minimalDet;
    }
এই অংশটিুকু আমাদের 2×2 আকারের ম্যাট্রিক্স মান বের করে রিটার্ন করবে । এবং এর মাধ্যমেই রিকার্শন টার্মিনেট হবে ।
সূতরাং এবার সম্পূর্ন কোডটা দেখা যাক ,
/*
Sharif Hasan – CSE, PUST
Aug 27,2019 05:03 PM
*/
#include<stdio.h>
#include<math.h>
int l=0;

long long det(int arr[][100],int n)
{
if(n==2)
{
int minimalDet = arr[0][0]*arr[1][1]-arr[0][1]*arr[1][0];
return minimalDet;
}

/*Part referance 1*/

int secondaryMatrix[100][100]={0};
int k,s=0,i,j;
long long sum=0;
for(k=0;k<n;k++)
{
for(i=1;i<n;i++)
{
for(j=0;j<n;j++)
{
if(j!=k)
{
secondaryMatrix[i-1][s]=arr[i][j];
s++;

}
}

s=0;
}
int p = pow(-1,k+2)*arr[0][k];
/*End of part ref 1*/
sum+=(long long)p*det(secondaryMatrix,n-1);
}
return sum;
}

int main()
{
int arr[100][100];
int n,i,j;
printf(“Size of the matrix N: “);
scanf(“%d”,&n);
printf(“nElements of the NxN matrix: n”);
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
scanf(“%d”,&arr[i][j]);
}
}
printf(“%d”,det(arr,n));
return 0;
}

আরও বুঝার জন্য : 
   https://en.wikipedia.org/wiki/Determinant 
   https://www.mathsisfun.com/algebra/matrix-determinant.html
   https://www.geeksforgeeks.org/determinant-of-a-matrix/

কোডটা প্রথমে বুঝতে একটু সমস্য হতে পারে । তাই থিওরি সাথে কোডটা খাতায় এ্যাকে এ্যাকে করলে সমসআ অনেকখানি দুর হবে । বাকি সমস্যার জন্য তো কমেন্ট বক্স আছেই ।  Happy coding .
Tags

Related Articles

Leave a Reply

Your email address will not be published. Required fields are marked *

Close
Close