Phương pháp Gauss-Seidel là phương pháp lặp để giải hệ phương trình tuyến tính. Đây là chương trình C++ triển khai phương pháp Gauss-Seidel.
Thuật toán
Bắt đầu
Nhập kích thước ma trận p và các phần tử của nó.
Nhập giá trị ban đầu của x và số lần lặp q.
Khi q > 0
Vòng lặp i = 0 đến p-1
Khởi tạo n[i] = (b[i] / a[i][i]).
Vòng lặp j = 0 đến p-1
Nếu (j == i)
n[i] = n[i] - ((a[i][j] / a[i][i]) * m[j]).
m[i] = n[i].
Giảm q.
/*
a[i][j] = ma trận đầu vào.
b[i] = mảng chứa giá trị vế phải của phương trình.
m[i] = lưu giá trị ban đầu của x.
*/
Trả về 0
Kết thúc
Ví dụ mã nguồn
#include <iostream>
#include <conio.h>
using namespace std;
int main(void) {
float a[10][10], b[10], m[10], n[10];
int p = 0, q = 0, i = 0, j = 0;
cout << "Nhập kích thước mảng 2D: ";
cin >> p;
for (i = 0; i < p; i++) {
for (j = 0; j < p; j++) {
cout << "a[" << i << ", " << j << " ]=";
cin >> a[i][j];
}
}
cout << "\nNhập giá trị vế phải của phương trình\n";
for (i = 0; i < p; i++) {
cout << "b[" << i << "] = ";
cin >> b[i];
}
cout << "Nhập giá trị ban đầu của x\n";
for (i = 0; i < p; i++) {
cout << "x:[" << i << "]=";
cin >> m[i];
}
cout << "\nNhập số lần lặp: ";
cin >> q;
while (q > 0) {
for (i = 0; i < p; i++) {
n[i] = (b[i] / a[i][i]);
for (j = 0; j < p; j++) {
if (j == i)
continue;
n[i] = n[i] - ((a[i][j] / a[i][i]) * m[j]);
m[i] = n[i];
}
cout << "x" << i+1 << "=" << n[i] << " ";
}
cout << "\n";
q--;
}
return 0;
}
Kết quả
Nhập kích thước mảng 2D: 2 a[0, 0]=1 a[0, 1]=2 a[1, 0]=3 a[1, 1]=4 Nhập giá trị vế phải của phương trình b[0]=1 b[1]=2 Nhập giá trị ban đầu của x x:[0]=0 x:[1]=0 Nhập số lần lặp: 3 x1 = 1. x2 = -0.25 x1 = 1.5 x2 = -0.625 x1 = 2.25 x2 = -1.1875