এলগরিদম
গাউস-সাইডেল মেথড একটি ইটারেটিভ পদ্ধতি লিনিয়ার সমীকরণ সিস্টেম Ax = b সমাধানের জন্য। এটি প্রতিটি ইটারেশনে ভেরিয়েবলগুলিকে আপডেট করে, নতুন মানটা उसी ইটারেশনে ব্যবহার করে (গাউস-জ্যাকোবির বিপরীতে)।
ধাপসমূহ:
- ম্যাট্রিক্স
A, ভেক্টরb, আর আপসামানিক গেসx(0)ইনপুট নিন। - প্রতিটি ইটারেশনে প্রতিটি ভেরিয়েবল
xiআপডেট করুন:xi(k+1) = (bi - Σj≠i aijxj(k+1)) / aii - নির্দিষ্ট ইটারেশন বা কনভারজেন্স না হওয়া পর্যন্ত চালান।
উদাহরণ কোড
#include <iostream>
#include <vector>
#include <iomanip>
using namespace std;
int main() {
cout << "ম্যাট্রিক্সের আকার (n): ";
int n; cin >> n;
vector<vector<double>> a(n, vector<double>(n));
vector<double> b(n), x(n), x_new(n);
cout << "ম্যাট্রিক্স A এর উপাদান:\n";
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
cin >> a[i][j];
cout << "ভেক্টর b এর উপাদান:\n";
for (int i = 0; i < n; i++) cin >> b[i];
cout << "আরম্ভিক গেস x:\n";
for (int i = 0; i < n; i++) cin >> x[i];
cout << "ইটারেশন সংখ্যা: ";
int iter; cin >> iter;
cout << fixed << setprecision(6);
for (int it = 1; it <= iter; it++) {
for (int i = 0; i < n; i++) {
double sum = b[i];
for (int j = 0; j < n; j++) {
if (j != i) sum -= a[i][j] * x[j];
}
x_new[i] = sum / a[i][i];
}
x = x_new;
cout << "ইটারেশন " << it << ": ";
for (int i = 0; i < n; i++)
cout << "x" << i+1 << "=" << x[i] << " ";
cout << "\n";
}
return 0;
}
আউটপুট উদাহরণ
ইনপুট: ম্যাট্রিক্সের আকার: 2 A: 1 2 3 4 b: 1 2 আরম্ভিক গেস: 0 0 ইটারেশন: 3 আউটপুট: ইটারেশন 1: x1=1.000000 x2=-0.250000 ইটারেশন 2: x1=1.500000 x2=-0.625000 ইটারেশন 3: x1=2.250000 x2=-1.187500
ব্যাখ্যা
গাউস-সাইডেল মেথডে প্রতিটি ভেরিয়েবল আপডেট होतेই তা পরবর্তী ভেরিয়েবল ক্যালকুলেশনে ব্যবহার করা হয়, যা কনভারজেন্স ত্বরান্বিত করে। ম্যাট্রিক্স ডায়গোনালি ডোমিন্যান্ট হলে কনভার্জ করে।