একটি ম্যাট্রিক্স M[r][c] দেওয়া আছে, 'r' নির্দেশ করে রো সংখ্যা এবং 'c' নির্দেশ করে কলাম সংখ্যা যাতে r = c একটি স্কোয়ার ম্যাট্রিক্স বানাচ্ছে। আমাদের যাচাই করতে হবে দেওয়া স্কোয়ার ম্যাট্রিক্সটি একটি ইনভোলিউটরি ম্যাট্রিক্স কিনা।
ইনভোলিউটরি ম্যাট্রিক্স (Involutory Matrix)
একটি ম্যাট্রিক্সকে ইনভোলিউটরি ম্যাট্রিক্স বলা হয় যদি এবং কেবল যদি, যখন একটি ম্যাট্রিক্স নিজের সাথে গুণ করা হয় এবং তার ফলাফল একটি আইডেন্টিটি ম্যাট্রিক্স হয়। একটি ম্যাট্রিক্স I আইডেন্টিটি ম্যাট্রিক্স যদি এবং কেবল যদি এর মেইন ডায়াগোনাল ১ এবং মেইন ডায়াগোনাল ছাড়া অন্যান্য এলিমেন্ট গুলো শূন্য। তাই, আমরা বলতে পারি একটি ম্যাট্রিক্স ইনভোলিউটরি ম্যাট্রিক্স যদি এবং কেবল যদি M*M=I, যেখানে M হল কিছু ম্যাট্রিক্স এবং I হল একটি আইডেন্টিটি ম্যাট্রিক্স।
নিচের উদাহরণে দেখানো আছে -

এখানে যখন আমরা ম্যাট্রিক্সকে নিজের সাথে গুণ করলাম ফলাফলটি আইডেন্টিটি ম্যাট্রিক্স আসলো; অতএব দিয়ে गये ম্যাট্রিক্সটি ইনভোলিউটরি ম্যাট্রিক্স।
উদাহরণ
ইনপুট: { {1, 0, 0}, {0, -1, 0}, {0, 0, -1} }
আউটপুট: yes
ইনপুট: { {3, 0, 0}, {0, 2, 0}, {0, 0, 3} }
আউটপুট: no
অ্যালগরিদম
শুরু
স্টেপ ১ -> #define size 3 ম্যাক্রো ডিফাইন করো
স্টেপ ২ -> ম্যাট্রিক্স মাল্টিপ্লিকেশনের ফাংশন ডিক্লেয়ার করো
void multiply(int arr[][size], int res[][size])
লুপ i = 0 থেকে i < size এবং i++ পর্যন্ত
লুপ j = 0 থেকে j < size এবং j++ পর্যন্ত
res[i][j] = 0 সেট করো
লুপ k = 0 থেকে k < size এবং k++ পর্যন্ত
res[i][j] += arr[i][k] * arr[k][j] সেট করো
এন্ড
এন্ড
এন্ড
স্টেপ ৩ -> ইনভোলিউটরি ম্যাট্রিক্স কিনা চেক করার ফাংশন ডিক্লেয়ার করো
bool check(int arr[size][size])
int res[size][size] ডিক্লেয়ার করো
multiply(arr, res) কল করো
লুপ i = 0 থেকে i < size এবং i++ পর্যন্ত
লুপ j = 0 থেকে j < size এবং j++ পর্যন্ত
IF (i == j && res[i][j] != 1)
return false
এন্ড
IF (i != j && res[i][j] != 0)
return false
এন্ড
এন্ড
এন্ড
Return true
স্টেপ ৪ -> main()-এ
int arr[size][size] = { { 1, 0, 0 }, { 0, -1, 0 }, { 0, 0, -1 } } ডিক্লেয়ার করো
IF (check(arr))
প্রিন্ট its an involutory matrix
এলস
প্রিন্ট its not an involutory matrix
স্টপ
উদাহরণ (C++ কোড)
#include <bits/stdc++.h>
#define size 3
using namespace std;
// ম্যাট্রিক্স মাল্টিপ্লিকেশন
void multiply(int arr[][size], int res[][size]) {
for (int i = 0; i < size; i++) {
for (int j = 0; j < size; j++) {
res[i][j] = 0;
for (int k = 0; k < size; k++)
res[i][j] += arr[i][k] * arr[k][j];
}
}
}
// ইনভোলিউটরি ম্যাট্রিক্স কিনা চেক করো
bool check(int arr[size][size]) {
int res[size][size];
multiply(arr, res);
for (int i = 0; i < size; i++) {
for (int j = 0; j < size; j++) {
if (i == j && res[i][j] != 1)
return false;
if (i != j && res[i][j] != 0)
return false;
}
}
return true;
}
int main() {
int arr[size][size] = { { 1, 0, 0 },
{ 0, -1, 0 },
{ 0, 0, -1 } };
if (check(arr))
cout << "its an involutory matrix";
else
cout << "its not an involutory matrix";
return 0;
}
আউটপুট
its an involutory matrix