计算方法实验(五):高斯列主元消去法
Gauss列主元消去法数学原理
高斯(Gauss)列主元消去法:对给定的nnn阶线性方程组Ax=bAx = bAx=b,首先进行列主元消元过程,然后进行回代过程,最后得到解或确定该线性方程组是奇异的。
如果系数矩阵的元素按绝对值在数量级方面相差很大,那么,在进行列主元消元过程前,先把系数矩阵的元素进行行平衡:系数矩阵的每行元素和相应的右端向量元素同除以该行元素绝对值最大的元素。这就是所谓的平衡技术。然后再进行列主元消元过程。
如果真正进行运算去确定相对主元,则称为显式相对Gauss列主元消去法;如果不进行运算,也能确定相对主元,则称为隐式相对Gauss列主元消去法。
显式相对Gauss列主元消去法:对给定的nnn阶线性方程组Ax=bAx = bAx=b,首先进行列主元消元过程,在消元过程中利用显式平衡技术,然后进行回代过程,最后得到解或确定该线性方程组是奇异的。
隐式相对Gauss列主元消去法:对给定的nnn阶线性方程组Ax=bAx = bAx=b,首先进行列主元消元过程,在消元过程中利用隐式平衡技术,然后进行回代过程,最后得到解或确定该线性方程组是奇异的。
Gauss列主元消去法
1对k=1,2,⋯,n−1k = 1,2,\cdots,n - 1k=1,2,⋯,n−1,做1.1—1.3,消元过程
1.1 寻找最小的正整数ppp,k≤p≤nk \leq p \leq nk≤p≤n和∣apk∣=maxk≤j≤n∣ajk∣\left| a_{\text{pk}} \right| = \max_{k \leq j \leq n}\left| a_{\text{jk}} \right|∣apk∣=maxk≤j≤n∣ajk∣。如果apk=0a_{\text{pk}} = 0apk=0,输出奇异标志,停机;
1.2 如果p≠kp \neq kp=k,那么交换p,kp,kp,k两行;
1.3 对i=k+1,⋯,ni = k + 1,\cdots,ni=k+1,⋯,n,记,记,记mik=aik/akkm_{\text{ik}} = a_{\text{ik}}/a_{\text{kk}}mik=aik/akk$,计算
{aij=aij−akjmiki=k+1,⋯,nj=k+1,⋯,nbi=bi−bkmiki=k+1,⋯,n\left\{ \begin{matrix} \ a_{\text{ij}} = a_{\text{ij}} - a_{\text{kj}}m_{\text{ik}} \\ \ i = k + 1,\cdots,n \\ \ j = k + 1,\cdots,n \\ \ b_{i} = b_{i} - b_{k}m_{\text{ik}} \\ \ i = k + 1,\cdots,n \\ \end{matrix} \right.\ ⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧ aij=aij−akjmik i=k+1,⋯,n j=k+1,⋯,n bi=bi−bkmik i=k+1,⋯,n
如果ann=0a_{\text{nn}} = 0ann=0输出奇异标志,停机;
置 xn=bn/annx_{n} = b_{n}/a_{\text{nn}}xn=bn/ann,回代过程
对k=n−1,⋯,2,1k = n - 1,\cdots,2,1k=n−1,⋯,2,1,置 xk=(bk−∑j=k+1nakjxj)/akkx_{k} = (b_{k} - \sum_{j = k + 1}^{n}{a_{\text{kj}}x_{j}})/a_{\text{kk}}xk=(bk−∑j=k+1nakjxj)/akk
程序流程
代码
#include <cmath>
#include <cstdio>
#include <iostream>
using namespace std;
#define N 10int n;
double a[N][N], b[N], x[N];int main() {scanf("%d", &n);for (int i = 1; i <= n; i++)for (int j = 1; j <= n; j++) scanf("%lf", &a[i][j]);for (int i = 1; i <= n; i++) scanf("%lf", &b[i]);for (int k = 1; k < n; k++) {int p = k;double maxabs = fabs(a[k][k]);for (int j = k + 1; j <= n; j++)if (fabs(a[j][k]) - maxabs > 0) {p = j;maxabs = fabs(a[j][k]);}if (a[p][k] == 0) {printf("Singular");return 0;}if (p != k) {double tmp;for (int j = 1; j <= n; j++) {tmp = a[p][j];a[p][j] = a[k][j];a[k][j] = tmp;}tmp = b[p];b[p] = b[k];b[k] = tmp;}for (int i = k + 1; i <= n; i++) {double m_ik = a[i][k] / a[k][k];for (int j = k + 1; j <= n; j++) a[i][j] -= a[k][j] * m_ik;b[i] -= b[k] * m_ik;}}if (a[n][n] == 0) {printf("Singular");return 0;}x[n] = b[n] / a[n][n];for (int k = n - 1; k >= 1; k--) {double sigma = 0.0;for (int j = k + 1; j <= n; j++) sigma += a[k][j] * x[j];x[k] = (b[k] - sigma) / a[k][k];}for (int i = 1; i <= n; i++) printf("%lf\t", x[i]);return 0;
}
计算方法实验(五):高斯列主元消去法相关推荐
- 高斯列主元消去法解线性方程组
最近在看惯导的东西,然后想要用C++解惯导控制方程,然后就重头把C++解方程组这方面的知识回顾了一下,首先就是高斯列主元消去法,这个方法还算实用,这里以3*3的矩阵为例,里面注释很详细,各位小白可以参 ...
- 高斯列主元消去法——C实现
1. 高斯消去法算法原理 消去法是求解线性方程组的一种方法,它对增广矩阵进行初等行变换得到一个可回代求解的矩阵,然后再进行回代求得一组解向量. 高斯列主元法在使用初等行变换消元之前增加了选主元的过程. ...
- 高斯列元素消去法c语言,【大神在哪里】高斯-列主元消去法
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #include main() { int k,i,j,my; int n=3; double m=1e-8,mx; double a[ ...
- matlab顺序消元法例题,求助,关于用matlab解列主元消去法的题
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 给定一个n阶线性方程组Ax=b,其中A的元素aij(i,j,=1,-,n)与阶数为:aij=(i+j-1)2, n=3,4,5,-,9; 这是我所编的程序 ...
- 数值分析原理课程实验——(高斯)Gauss列主元消去法
高斯(Gauss)列主元消去法 方法概要 待求问题 程序流程 程序代码 /*Matlab函数 function Result = Gauss(n, A, b)for k = 1:n-1max = ab ...
- 计算方法:列主元消去法,LU分解法, 雅可比迭代法,高斯塞德尔迭代法 解线性方程(C++)
Matrix.h包括矩阵类Matrix的定义,Matrix.cpp包括该类成员函数的实现,LinearEqu.h包括线性方程类LinearEqu的定义,继承自Matrix类,其中solve()方法为列 ...
- 列主元消去法例题详解_高斯列主元消元法解方程组的步骤
高斯列主元消元法求解线性方程组 AX=b 的简要步骤 ...
- MATLAB实现智能计算方法实验:实验五 Hopfield神经网络
资源链接 MATLAB实现智能计算方法课程所有实验代码资源链接为:MATLAB实现智能计算方法课程所有实验代码资源 实验汇总 MATLAB实现智能计算方法课程所有实验汇总博客链接为:MATLAB实现智 ...
- 北京科技大学 数值计算方法实验代码
前言: 数值计算方法实验可以使用Matlab.C/C++.Python.Java等语言进行编程,考虑到同学期数学实验课程使用Matlab进行,建议提前熟悉Matlab编程(也效率更高). 本文中各实验 ...
最新文章
- Hexo+码云+git快速搭建免费的静态Blog
- go 求两个时间相差的天数
- js原生图片拼图Demo
- mysql增加某人信息_mysql 增加用户
- python seaborn heatmap可视化相关性矩阵
- boot入门思想 spring_(第一讲)Spring Initializr-快速入门Spring Boot的最好选择
- Android自定义view之事件传递机制
- 无人驾驶车辆模型预测控制配套代码_代码详解——最简NMPC路径跟踪仿真代码...
- maven库的查询和配置
- emblog博客打开显示 数据库密码错误,请返回主页的解决办法!
- Allegro PCB 封装库
- SQL Server 2019 安装教程
- ubuntu 扫描局域网ip
- html5版堆糖,堆糖(Duitang)
- 没有十年网龄都不知道的事儿
- 手机APP开发常用工具有哪些
- 腾讯云容器团队内部Istio专题分享
- 我可以借助计算机在家里工作翻译,请帮我翻译下面句子
- 35+老测试员生涯回顾,揭秘无力吐槽的自动化真相…
- DISM 修复 Win10
热门文章
- np.meshgrid plt.contourf
- Odata数据展示_SAP刘梦_新浪博客
- Python虽然很火,为啥找工作这么难?
- 【转】Blogcn(中国博客网)宣布终止免费服务
- 66.android 导入项目报错Error:Execution failed for task ':app:validateDebugSigning'. Keystore file F:\myA
- VM虚拟机中的web服务内网穿透的设置,虚拟机连接主机的mysql(主机win10 虚拟机win10)
- KU040 slice内 路径分布 和 延时参数
- 02- pandas 数据库 (数据库)
- C语言输出整数部分和小数部分
- SMBLoris windows拒绝服务漏洞