考虑线性方程组

\[\mathrm{A}x=\mathrm{b}
\]

其中,\(\mathrm{A}=(a_{ij})_{n\times n}\),\(\mathrm{b}=[b_1,b_2,\cdots,b_n]^{\mathrm{T}}\)。在线性代数的课程中,我们已经学习过Gauss消元法,具体操作是将矩阵A转化为“阶梯型”矩阵。为方便起见,本文仅仅讨论系数矩阵非奇异的方程组,此时,目标是将矩阵A转化为上三角矩阵,再执行回代过程,即可给出方程组的解。本文将给出在计算机上的具体操作及实例代码。

一、基本Gauss消去法

我们仅仅讨论对矩阵第一列的操作,剩余的操作可以以此类推,因而不再赘述。

在执行Gauss消去法时,我们将第一列对角元以下的元素全部变为零。记第一列消元操作后的增广矩阵为\([\mathrm{A}^{(1)},\mathrm{b}^{(1)}]\),容易知道

\[[\mathrm{A}^{(1)},\mathrm{b}^{(1)}]=
\begin{bmatrix}
a_{11} & a_{22} & \cdots &a_{1n} & b_1 \\
0 & a_{22}^{(1)} &\cdots &a_{2n}^{(1)} & b_2^{(1)}\\
\vdots &\vdots & & \vdots &\vdots\\
0 & a_{n2}^{(1)} & &a_{nn}^{(1)} & b_n^{(1)}
\end{bmatrix}\]

其中

\[a_{ij}^{(1)}=a_{ij}-\frac{a_{i1}}{a_{11}}a_{1j},j=2,\cdots ,n
\]
\[a_{i1}^{(1)}=0
\]
\[b_i^{(1)}=b_i-\frac{a_{i1}}{a_{11}}b_1
\]

观察到重复出现的结构\(\frac{a_{_{i1}}}{a_{_{11}}}\),我们记它为\(l_{i1}\),称为消元因子,并将它存储在原来\(a_{i1}\)的位置。在计算的过程中,先计算消元因子并存储在相应位置,再执行后续的算法。

对于后续部分的运算,在第k步,只要对矩阵\(A^{(k-1)}(k:n,k:n)\)执行相同操作即可。

二、列主元Gauss消去法

在执行Gauss消元法的过程中,如果\(a_{kk}^{(k-1)}\)相对于其他元素绝对值较小,则会产生较大的舍入误差,影响计算精度,为此,我们引入了列主元Gauss消去法,基于交换矩阵的行不影响线性方程组的解。

记执行完k-1步消元后的增广矩阵为\([\mathrm{A}^{(k-1)},\mathrm{b}^{(k-1)}]\)。考虑第k列对角元及其以下的部分。选择绝对值最大的元所在行,与当前行执行行交换,再进行Gauss消元法。

三、计算实例

用列主元Gauss消去法解以下线性方程组:

\[\left\{
\begin{array}{}
0.5x_1+1.1x_2+3.1x_3=6,\\
2x_1+4.5x_2+3.6x_3=0.02,\\
5x_1+0.96x_2+6.5x_3=0.96.
\end{array}
\right.\]
#include <iostream>
#include <math.h>
using namespace std; int main()
{
double A_Extended[3][4]={0.5,1.1,3.1,6,2,4.5,3.6,0.02,5,0.96,6.5,0.96};
double X_solution[3];
for (int i=0;i<=2;i++)
{
int n=i;
for (int p=i+1;p<=2;p++)
{
if (fabs(A_Extended[p][i])>fabs(A_Extended[n][i]))
{
n=p;
}
} for (int p=i;p<=2+1;p++)
{
double k=A_Extended[n][p];
A_Extended[n][p]=A_Extended[i][p];
A_Extended[i][p]=k;
} for (int p=i+1;p<=2;p++)
{
A_Extended[p][i]=-A_Extended[p][i]/A_Extended[i][i];
for (int pco=i+1;pco<=2+1;pco++)
{
A_Extended[p][pco]=A_Extended[p][pco]+A_Extended[p][i]*A_Extended[i][pco];
}
}
}
X_solution[2]=A_Extended[2][3]/A_Extended[2][2];
for (int i=1;i>=0;i--)
{
double sum=0;
for (int k=2;k>i;k--)
{
sum=sum+A_Extended[i][k]*X_solution[k];
}
X_solution[i]=(A_Extended[i][3]-sum)/A_Extended[i][i];
} cout<<X_solution[0]<<" "<<X_solution[1]<<" "<<X_solution[2]<<endl;
return 0;
}

线性方程组的直接解法——Gauss消去法的更多相关文章

  1. (原创)列主元Gauss消去法的通用程序

    import numpy as np np.set_printoptions(precision=5) A = np.array([[31., -13., 0., 0., 0., -10., 0., ...

  2. C# 列主元素(Gauss)消去法 计算一元多次方程组

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  3. C# 顺序高斯(Gauss)消去法计算一元多次方程组

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  4. matlab 求解线性方程组之LU分解

    线性代数中的一个核心思想就是矩阵分解,既将一个复杂的矩阵分解为更简单的矩阵的乘积.常见的有如下分解: LU分解:A=LU,A是m×n矩阵,L是m×m下三角矩阵,U是m×n阶梯形矩阵 QR分解: 秩分解 ...

  5. 三对角线性方程组(tridiagonal systems of equations)的求解

    三对角线性方程组(tridiagonal systems of equations)   三对角线性方程组,对于熟悉数值分析的同学来说,并不陌生,它经常出现在微分方程的数值求解和三次样条函数的插值问题 ...

  6. 《Numerical Methods》-chaper7-解线性方程组的直接方法和最小二乘问题

    基于我们在线性代数中学习过的知识,我们知道解线性方程组本质上就是Gauss消元,也就是基于增广矩阵A的矩阵初等变换.关于数学层面的内容这里不做过多的介绍,这里的侧重点是从数值计算的角度来看这些常见的问 ...

  7. 线性方程组的求解(C++)

    1. 最佳求解方案 Most efficient way to solve a system of linear equations 求解形如 Ax=b 的最佳方式 将 A 分解为三角矩阵,A=M1⋅ ...

  8. OpenCascade Matrix

    OpenCascade Matrix eryar@163.com 摘要Abstract:本文对矩阵作简要介绍,并结合代码说明OpenCascade矩阵计算类的使用方法. 关键字Key Words:Op ...

  9. OpenFOAM 编程 | One-Dimensional Transient Heat Conduction

    0. 写在前面 本文中将对一维瞬态热传导问题进行数值求解,并基于OpenFOAM类库编写求解器.该问题参考自教科书\(^{[1]}\)示例 8.1. 1. 问题描述 一维瞬态热传导问题控制方程如下 \ ...

  10. 高斯消去、追赶法 matlab

    1. 分别用Gauss消去法.列主元Gauss消去法.三角分解方法求解方程组 程序: (1)Guess消去法: function x=GaussXQByOrder(A,b) %Gauss消去法 N = ...

随机推荐

  1. Java中的多线程的创建方式

    首先理清几个基本概念: 程序:为完成特定任务,用某种语言编写的一组指令的集合.即一段静态的代码(还没运行起来) 进程:是程序的一次执行过程,也就是说程序运行起来了,加载到了内存中,并占用了cpu的资源 ...

  2. MyBatis(入参的类型和日志记录)

    入参的类型是对象 1. 新增的参数是对象 2. 空值的处理,占位符 字段,jdbcType=VARCHAR          字符串 字段,jdbcType=DATE                  ...

  3. IDEA对数据库、表、记录的(增删改查可视化操作)、数据库安全性问题的演示

    对数据库的增删改查 新增数据库 修改数据库 删除数据库 对表的增删改查 新增表 修改表 删除表 对记录的增删改查 数据库安全性问题的演示 演示脏读 ​ 一个事物里面读到了另外一个事物没有提交的数据: ...

  4. java.lang.ClassNotFoundException: org.springframework.web.filter.CharacterEncodingFilter 增样将jar包导入

    2021-9-30-17:28 遇到的一个bug.以前遇到过,这次又遇到.就离谱,结果还忘记怎样解决了.这捣鼓一下,那捣鼓一下,又给搞好了.为了记录这次bug,又试图还原bug. 1.解决办法file ...

  5. Redis—问题(1)

    写在前面 Redis 是一种 NoSQL 数据库,包含多种数据结构.支持网络.基于内存.可选持久性的键值对存储数据库,在我们的日常开发中会经常使用 Redis 来解决许多问题,比如排行榜.消息队列系统 ...

  6. PX01关于手机屏SPI触摸调试学习笔记

    上位机工具:http://www.xk-image.com/download/blog/0002_TP调试/LcdTools20210605.rar 调试案例:http://www.xk-image. ...

  7. 【JavaWeb】学习笔记——JSP

    概念 全称:Java Server Pages, Java服务端页面 描述:一种动态的网页技术,可以在其中定义HTML.JS.CSS等静态内容,以及Java代码的动态内容 说明:JSP = HTML ...

  8. WPF 鼠标移动到图片变大,移开还原,单击触发事件效果

    <Grid>         <Canvas x:Name="LayoutRoot">             <Image Cursor=" ...

  9. CVE-2021-44832 log4j_2.17.0 RCE复现与吐槽

    先说一句,这傻x洞能给cve就离谱,大半夜给人喊起来浪费时间看了一个小时. 先说利用条件: 需要加载"特定"的配置文件信息,或者说实际利用中需要能够修改配置文件(你都能替换配置文件 ...

  10. 苹果 App Store 开始支持隐藏上架应用:只能通过链接下载

      据MacRumors报道,苹果公司最近宣布,正如其开发者网站上所概述的那样,App Store现在支持只能通过直接链接才能发现的隐藏应用.   图片来自 Apple 拥有不适合公开发布的应用的开发 ...