এলগরিদম
গাউস-জর্ডান এলিমিনেশন পদ্ধতিতে অগমেন্টেড ম্যাট্রিক্সকে রিডিউসড রো-ইচেলন ফর্ম (RREF) এ রূপান্তর করা হয়। এটি প্রতিটি পিভট এলিমেন্টকে ১ করে এবং সেই কলামের বাকি সব উপাদানকে ০ করে দেয়। সমাধান সরাসরি পাওয়া যায়।
ধাপসমূহ:
- অগমেন্টেড ম্যাট্রিক্স
[A|b]ইনপুট নিন। - প্রতিটি কলাম
j = 0 to n-1এর জন্য:- পিভট রো খুঁজুন (নন-জিরো এলিমেন্ট) এবং সওয়াপ করুন।
- পিভট রোকে পিভট এলিমেন্ট দিয়ে ভাগ করে ১ করুন।
- অন্য সব রোতে পিভট কলামের উপাদান ০ করুন (রো অপারেশন)।
- সলিউশন ভেক্টর
x[i] = aug[i][n]এক্সট্র্যাক্ট করুন।
উদাহরণ কোড
#include <iostream>
#include <vector>
#include <iomanip>
using namespace std;
int main() {
cout << "ম্যাট্রিক্সের আকার (n): ";
int n; cin >> n;
vector<vector<double>> aug(n, vector<double>(n + 1));
cout << "অগমেন্টেড ম্যাট্রিক্স রো-ওয়াইজ লিখুন:\n";
for (int i = 0; i < n; i++)
for (int j = 0; j <= n; j++)
cin >> aug[i][j];
// Gauss-Jordan Elimination
for (int col = 0; col < n; col++) {
// Find pivot
int pivot = col;
for (int i = col + 1; i < n; i++)
if (abs(aug[i][col]) > abs(aug[pivot][col]))
pivot = i;
swap(aug[col], aug[pivot]);
// Normalize pivot row
double pivVal = aug[col][col];
if (abs(pivVal) < 1e-9) continue; // Singular
for (int j = col; j <= n; j++)
aug[col][j] /= pivVal;
// Eliminate other rows
for (int i = 0; i < n; i++) {
if (i == col) continue;
double factor = aug[i][col];
for (int j = col; j <= n; j++)
aug[i][j] -= factor * aug[col][j];
}
}
cout << "\nসমাধান:\n";
for (int i = 0; i < n; i++)
cout << "x" << i+1 << " = " << aug[i][n] << "\n";
return 0;
}
আউটপুট উদাহরণ
ইনপুট: ম্যাট্রিক্সের আকার: 3 অগমেন্টেড ম্যাট্রিক্স: 1 2 -4 2 7 6 -2 -5 0 -3 -5 -8 আউটপুট: সমাধান: x1 = -2.898305 x2 = 2.567797 x3 = 0.059322
ব্যাখ্যা
গাউস-জর্ডান এলিমিনেশন গাউস এলিমিনেশনের একটি এক্সটেনশন যেখানে ব্যাক-সাবস্টিটিউশন প্রয়োজন নেই। এটি সরাসরি রিডিউসড রো-ইচেলন ফর্মে আনে, যাতে সমাধান পাওয়া যায়। পিভটিং (pivoting) ব্যবহার করে न्यুমেরিক্যাল স্থিতিশীলতা নিশ্চিত করা হয়েছে।