在这篇文章中,不会有太多的讲解,主要是因为Sor迭代法和高斯-赛德尔(gauss-seidle)迭代法的程序只有迭代公式的一点点区别,当松弛因子为1的时候,Sor迭代法和高斯-赛德尔(gauss-seidle)迭代法是一致的。
高斯-赛德尔(gauss-seidle)迭代法
Sor迭代法
附上实现程序(Visual Studio 2019)
#include例题 程序输出结果:#include using namespace std; double a[8][8];//定义系数矩阵 double b[8];//定义b矩阵元素 double w;//定义松弛因子 double G_X1[8]; //定义每次迭代后的X1 double G_X2[8]; //定义每次迭代后的X2 double G_X3[8]; //定义每次迭代后的X3 double G_X4[8]; //定义每次迭代后的X4 double x1, x2, x3, x4;//定义初始向量 void Func_Sor(double x_1, double x_2, double x_3, double x_4, int m);//定义sor迭代法 int main() { int N;//定义迭代次数 cout << "请输入迭代次数:" << endl; cin >> N;//赋值迭代次数N for (int i = 1; i <= 4; i++) { cout << "请输入第" << i << "行的系数:" << endl; for (int j = 1; j <= 4; j++) { cin >> a[i][j]; } }//赋值系数矩阵 cout << "请输入松弛因子w:" << endl; cin >> w;//赋值松弛因子 cout << "请输入b矩阵" << endl; for (int j = 1; j <= 4; j++) { cin >> b[j]; } // 赋值b矩阵 cout << "请输入初始向量:" << endl; cin >> x1 >> x2 >> x3 >> x4; Func_Sor(x1, x2, x3, x4, N);//调用Func_Sor函数 cout << "---->>>迭代结果显示<<<----" << endl;//建立分隔符 cout << "迭代次数" << " x1" << " , x2" << " , x3 " << " , x4 " << endl;//建立输出结果的表头 for (int i = 1; i <= N; i++) //输出每次迭代的结果 { cout << setiosflags(ios::fixed) << setprecision(8);//输出结果保留8位小数 cout << " 第" << i << "次: " << G_X1[i] << " , " << G_X2[i] << " , " << G_X3[i] << " , " << G_X4[i] << endl; } return 0; } void Func_Sor(double x_1, double x_2, double x_3, double x_4, int m)//Sor迭代法解析 { G_X1[0] = x_1; G_X2[0] = x_2; G_X3[0] = x_3; G_X4[0] = x_4; for (int i = 0; i < m; i++) { G_X1[i + 1] = G_X1[i] + w * (b[1] - a[1][1] * G_X1[i] - a[1][2] * G_X2[i] - a[1][3] * G_X3[i] - a[1][4] * G_X4[i]) / a[1][1]; G_X2[i + 1] = G_X2[i] + w * (b[2] - a[2][1] * G_X1[i + 1] - a[2][2] * G_X2[i] - a[2][3] * G_X3[i] - a[2][4] * G_X4[i]) / a[2][2]; G_X3[i + 1] = G_X3[i] + w * (b[3] - a[3][1] * G_X1[i + 1] - a[3][2] * G_X2[i + 1] - a[3][3] * G_X3[i] - a[3][4] * G_X4[i]) / a[3][3]; G_X4[i + 1] = G_X4[i] + w * (b[4] - a[4][1] * G_X1[i + 1] - a[4][2] * G_X2[i + 1] - a[4][3] * G_X3[i] - a[4][4] * G_X4[i]) / a[4][4]; } }
特别注意:
C++学习日记#1——三元一次方程组进行高斯-赛德尔(gauss-seidle)迭代法求解https://blog.csdn.net/ALEX_2814/article/details/120886518?spm=1001.2014.3001.5502
和这篇文章都是固定系数矩阵阶数的,也就是说在不改变代码的前提下,《三元一次方程组进行高斯-赛德尔(gauss-seidle)迭代法求解》这篇文章中的程序只能适用于三元一次方程组和这篇文章的程序只能适用于四元一次方程组。



