在这篇文章中,不会有太多的讲解,主要是因为Sor迭代法和高斯-赛德尔(gauss-seidle)迭代法的程序只有迭代公式的一点点区别,当松弛因子为1的时候,Sor迭代法和高斯-赛德尔(gauss-seidle)迭代法是一致的。

高斯-赛德尔(gauss-seidle)迭代法

Sor迭代法

附上实现程序(Visual Studio 2019)

#include <iostream>
#include <iomanip> 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;//赋值迭代次数Nfor (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+1] - a[4][4] * G_X4[i]) / a[4][4];}
}

例题

程序输出结果:

 特别注意:

C++学习日记#1——三元一次方程组进行高斯-赛德尔(gauss-seidle)迭代法求解C++学习日记#1——三元一次方程组进行高斯-赛德尔(gauss-seidle)迭代法求解_ALEX_2814的博客-CSDN博客

和这篇文章都是固定系数矩阵阶数的,也就是说在不改变代码的前提下,《三元一次方程组进行高斯-赛德尔(gauss-seidle)迭代法求解》这篇文章中的程序只能适用于三元一次方程组和这篇文章的程序只能适用于四元一次方程组。


———————————————————2021.11.12———————————————————

将该程序推向n阶系数矩阵,sor迭代法求解

附上实现程序(Visual Studio 2019)

#include <iostream>
#include <iomanip> using namespace std;double a[100][100];//定义系数3阶矩阵系数
void Func_Gauss(int N, int n);//定义高斯迭代法
double b[100];//定义b矩阵元素
double x[100][100];//定义迭代后的值(p.s 前面的括号值为迭代次数,后面括号值为x1,x2,....xn
double w;//定义松弛因子int main()
{int N; //定义迭代次数N  cout << "请输入迭代次数N" << endl;cin >> N;int n; //系数矩阵的阶数 cout << "请输入系数矩阵的阶数n" << endl;cin >> n;for (int i = 1; i <= n; i++){cout << "请依次输入系数矩阵A第" << i << "行系数" << endl;for (int j = 1; j <= n; j++){cin >> a[i][j];}}cout << "对应的b矩阵" << endl;for (int j = 1; j <= n; j++){cin >> b[j];}cout << "请输入初始向量" << endl;for (int j = 1; j <= n; j++){cin >> x[0][j];}cout << "请输入松弛因子w:" << endl;cin >> w;Func_Gauss(N, n);//调用高斯迭代函数cout << "---->>>迭代结果显示<<<----" << endl;//建立分隔符cout << setiosflags(ios::fixed) << setprecision(8);//输出结果保留8位小数for (int i = 1; i <= N; i++){cout << "第" << i << "次" << "   ";for (int j = 1; j <= n - 1; j++){cout << x[i][j] << " , ";}cout << x[i][n];cout << endl;}return 0;
}
void Func_Gauss(int N, int n)
//高斯迭代法解析
{for (int i = 0; i < N; i++)//进行迭代循环{for (int j = 1; j <= n; j++)//进行x1,..xn求值{double sum_n = 0;//重置更新值求和为0double sum_o = 0;//重置值求和0for (int k = 0; k <= j - 1; k++)//进行更新值求和{x[i + 1][0] = 0;a[j][0] = 0;//系数矩阵添加第0列,元素均为0;解向量添加第0解,为0;//为了迭代求解x1时,能有更新值求和,便于将x1迭代与其他x值迭代归纳在一起sum_n += a[j][k] * x[i + 1][k];}for (int p = j; p <= n + 1; p++)//进行旧值求和{a[j][n + 1] = 0;x[i][n + 1] = 0;//系数矩阵添加第n+1列,元素均为0;解向量添加第n+1解,为0;//为了迭代求解xn时,能有旧值求和,便于将xn迭代与其他x值迭代归纳在一起sum_o += a[j][p] * x[i][p];}x[i + 1][j] = x[i][j] + w * (b[j] - (sum_n + sum_o)) / a[j][j];}}
}

程序输出结果:

p.s

回顾改进的时候发现了以前的程序有点小问题,主要是在迭代求解x4时,没有x3没有使用更新后的值。现已修改。

C++学习日记#1.1——四元一次方程组进行Sor松弛迭代法求解(现已推向n元一次方程组进行Sor松弛迭代法求解)相关推荐

  1. 【Python学习日记】 第四天

    2015年9月3日开始第四天的学习. 主要学习的内容有函数进阶模块的字节编译部分.学习Pygame(安装,并写第一个脚本) 开始学习Pygame,以后在有三天以上的假期时候,学习新的库的使用.这次学习 ...

  2. Python学习日记-第十四天-面向对象练习

    前言 今天主要是针对昨天学习的面向对象,进行两个练习. 一个是添加家具的练习 另一个是士兵开枪的练习 练习1: 添加家具 需求: 1.   房子 house 有户型,总面积和家具名称列表 ·新房子没有 ...

  3. Python学习日记(三十四) Mysql数据库篇 二

    外键(Foreign Key) 如果今天有一张表上面有很多职务的信息 我们可以通过使用外键的方式去将两张表产生关联 这样的好处能够节省空间,比方说你今天的职务名称很长,在一张表中就要重复的去写这个职务 ...

  4. Python学习日记(二十四) 继承

    继承 什么是继承?就是一个派生类(derived class)继承基类(base class)的字段和方法.一个类可以被多个类继承;在python中,一个类可以继承多个类. 父类可以称为基类和超类,而 ...

  5. Python学习日记-第二十四天-飞机大战(敌机出场设计)

    系列文章目录 ·使用定时器添加敌机 ·设计Enemy 类 前言 昨天因为有事,所以没有及时更新 一.使用定时器添加敌机 游戏启动后,每隔一秒会出现一架敌机 每架敌机向屏幕下方飞行,飞行速度各不相同 每 ...

  6. Mybatis学习日记(四)——动态SQL第一部分

    Mybatis的强大特性之一是它的动态SQL,在进行项目开发的时候,我们对数据库的操作不可能全部是定式的,当对数据库的操作根据不同情况发生变化时,就可以用到Mybatis的动态SQL.而Mybatis ...

  7. 智能车学习日记【四】————环岛

    智能车学习日记[四]----环岛 文章目录 智能车学习日记[四]----环岛 前言 一.环岛分状态(以左环岛为例) 二.每个状态思路 状态1和状态2: 状态3: 状态4: 状态5: 状态6: 状态7: ...

  8. 安卓开发学习日记第四天_会爬就会跑_莫韵乐的欢乐笔记

    安卓开发学习日记第四天_会爬就会跑 前情提要 安卓开发学习日记第一天Android Studio3.6安装 安卓开发学习日记第二天_破坏陷阱卡之sync的坑 安卓开发学习日记第三天_新手怪button ...

  9. 安卓开发学习日记第四天番外篇_用Kotlin炒冷饭——越炒越小_莫韵乐的欢乐笔记

    安卓开发学习日记第四天番外篇--用Kotlin炒冷饭--越炒越小 前情提要 安卓开发学习日记第一天_Android Studio3.6安装 安卓开发学习日记第二天_破坏陷阱卡之sync的坑 安卓开发学 ...

最新文章

  1. linux 加载 iso,Linux iso文件加载和解包的用法
  2. mysql没有开启binlog能恢复数据吗_神了!一个妹子 rm -rf 把公司整个数据库删没了......
  3. 指定module_一个缺失已久的特性 — module模块
  4. jQuery以JSONP的访问调用一个WCF REST服务
  5. treeset java_Java TreeSet add()方法与示例
  6. (35)FPGA打两拍、打三拍设计(第7天)
  7. 第二百零一天 how can I坚持
  8. 颜色空间直方图matlab,使用Matlab绘制图像的rgb颜色空间和Lab颜色空间分量图和分量直方图 | 学步园...
  9. jQuery事件命名空间多事件绑定自定义事件js 命名空间 javascript命名空间
  10. jdbc、jpa、spring data jpa、hibernate、mybatis之间的关系及区别
  11. Windows 系统的默认字体是什么?应用的默认字体是什么?
  12. 企业数字化转型战略权威指南
  13. mandriva urpm类命令
  14. php 相似文章,php 比较两篇文章的相似度的方法
  15. EXCEL的VBA宏密码破解
  16. EXPDP命令行选项
  17. 碳足迹审核的计算有几种方法?
  18. 我的vim的vimrc配置文件,保存用 - 飞在天空的鱼 - 博客频道
  19. [Azure][Event hub]Kafka无法同时连接到同一个namespace下的两个Event hub
  20. PaddleOCR 文字检测部分源码学习(8)-损失函数(4)

热门文章

  1. [about phd]读博=
  2. Day34-Java面试系列(一)-Java基础(下)
  3. 根据单选框的选择来决定下拉框的禁用与否
  4. 小工具:用C++读取TGA并输出数据到文本
  5. 新建STM32工程报错 warning: At end of source: #12-D: parsing restarts here after previous syntax error
  6. Mysql之一台服务器上装多个mysql-yellowcong
  7. [HNOI 2014]米特运输
  8. 【贪玩巴斯】带你一起攻克英语语法长难句—— 第一章——简单句详解 2021年12月2日
  9. FPM(FastCGI Process Manager)
  10. Effective C++ 条款08:别让异常逃离析构函数