高斯消元法求解方程组
- 引子
- 高斯消元法简介
- 引例
- 求解过程
- 编程实现高斯消元法C
1. 引子
1. 高斯消元法简介
数学上,高斯消元法(Gaussian Elimination),是线性代数规划中的一个算法,可用来为线性方程组求解。
2. 引例
求解如下方程组:
\begin{cases}2x + 3y + z = 4 \\x - 2y + 4z = -5 \\3x + 8y - 2z = 13 \\\end{cases}
2. 求解过程
可以将方程组和矩阵联系起来。如下:
\begin{cases}2x + 3y + z = 11 & (1)\\x - 2y + 3z = 6 & (2)\\3x + 8y - 2z = 13 & (3)\\\end{cases}
\begin{pmatrix}2 & 3 & 1 & 11 \\1 & -2 & 3 & 6 \\ \tag {增广矩阵}3 & 8 & -2 & 13 \\\end{pmatrix}
令 (1)−2(2)(1) - 2(2)、3−3(2)3 - 3(2) 得:
\begin{cases}x - 2y + 3z = 6 & (4)\\7y - 5z = -1 & (5)\\14y - 11z = -5 & (6)\\\end{cases}
\begin{pmatrix}1 & -2 & 3 & 6 \\0 & 7 & -5 & -1 \\0 & 14 & -11 & -5 \\\end{pmatrix}
令 (6)−2(7)(6)-2(7) 得:
\begin{cases}x - 2y + 3z = 6 & (7) \\7y - 5z = -1 & (8) \\-z = -3 & (9) \\\end{cases}
\begin{pmatrix}1 & -2 & 3 & 6 \\0 & 7 & -5 & -1 \\ \tag{行阶梯形矩阵}0 & 0 & -1 & -3 \\\end{pmatrix}
还可以进一步简化:
\begin{cases}x - 2y + 3z = 6 & (7) \\[2ex]y - \cfrac 57 z = -\cfrac 17 & (8) \\[2ex]z = 3 & (9) \\\end{cases}
\begin{pmatrix}1 & -2 & 3 & 6 \\[2ex]0 & 1 & -\frac57 & -\frac17 \\[2ex] \tag{行最简形矩阵}0 & 0 & 1 & 3 \\\end{pmatrix}
(7)+2(8)(7)+2(8)、(8)+57(9)(8)+\cfrac57(9) 继续进行化简:
\begin{cases}x = 1 & (7) \\y = 2 & (8) \\z = 3 & (9) \\\end{cases}
\begin{pmatrix}1 & 0 & 0 & 1 \\0 & 1 & 0 & 2 \\ \tag{标准形}0 & 0 & 1 & 3 \\\end{pmatrix}
可见,当增广矩阵简化为标准形后,解即为矩阵最后一列的值。因此,我们可以脱离原方程组,对矩阵进行化简,得到方程组的解。
3. 编程实现高斯消元法(C#)
using System.Collections.Generic;using System.Linq;namespace GaussianEliminationLib{public static class GaussianElimination{public static List<double> Resolve(IEnumerable<IEnumerable<double>> equationSet){// 存储方程组矩阵List<List<double>> equationSetList = new List<List<double>>();foreach(IEnumerable<double> equation in equationSet){equationSetList.Add(equation.ToList());}for (int i = 0; i < equationSetList.Count; ++i){// 化简成行最简形Simplitify(equationSetList, i, i);}// 化简成标准形return SimplitifyAgain(equationSetList);}private static void Simplitify(List<List<double>> equationSet, int rowStart, int colStart){// 选择当前列最大行int pivotRow = FindPivotRow(equationSet, rowStart, colStart);SwapRows(equationSet, rowStart, pivotRow);int cols = equationSet[rowStart].Count;double maxValue = equationSet[rowStart][colStart];for (int i = rowStart; i < equationSet.Count; ++i){for (int j = colStart; j < cols; ++j){equationSet[i][j] /= maxValue;}}for (int i = rowStart + 1; i < equationSet.Count; ++i){double primer = equationSet[i][colStart];for (int j = colStart; j < cols; ++j){equationSet[i][j] -= primer * equationSet[rowStart][j];}}}private static List<double> SimplitifyAgain(List<List<double>> equationSet){int solutionsCount = equationSet.Count;List<double> solutions = new List<double>(solutionsCount);for (int i = 0; i < equationSet.Count; ++i){solutions.Add(0.0);}for (int i = equationSet.Count - 1; i >= 0; --i){double value = 0.0;for (int j = 0; j < solutionsCount; ++j){value += solutions[j] * equationSet[i][j];}solutions[i] = equationSet[i][equationSet.Count] - value;}return solutions;}private static int FindPivotRow(List<List<double>> equationSet, int rowStart, int col){int row = rowStart;double value = equationSet[rowStart][col];for (int i = rowStart; i < equationSet.Count(); ++i){if (value < equationSet[i][col]){row = i;value = equationSet[i][col];}}return row;} private static void SwapRows(List<List<double>> equationSet, int currentRow, int pivotRow){List<double> row = equationSet[currentRow];equationSet[currentRow] = equationSet[pivotRow];equationSet[pivotRow] = row;}}}
高斯消元法求解方程组相关推荐
- 高斯消元法求解方程组(要有python基础和线性代数的基础)
本人这学期开的是一门数值分析课,老师要求用python写出实现某些算法的代码,当遇到第一个高斯消元法,印象深刻的是这个编程与以往的编程不一样,从这几点来讲:首先,我是在上这门课之前就将python的基 ...
- 高斯消元法解矩阵方程c语言,c++高斯消元法求解线性方程组
//高斯消元法求解方程组 #include #include using namespace std; #define MaxNum 10 int array[MaxNum][MaxNum] = { ...
- C++ 数学与算法系列之高斯消元法求解线性方程组
1. 前言 什么是消元法? 消元法是指将多个方程式组成的方程组中的若干个变量通过有限次地变换,消去方程式中的变量,通过简化方程式,从而获取结果的一种解题方法. 消元法主要有代入消元法.加减消元法.整体 ...
- 计算方法——C语言实现——全主元高斯消元法求解非线性方程
最近在上计算方法这门课,要求是用MATLAB做练习题,但是我觉得C语言也很棒棒啊~ 题目: 高斯消元法是线性方程组的直接解法,可能会造成很大的失真,尤其是高斯顺序消元法,对方法进行改进,使每次都选取绝 ...
- 利用稀疏格式矩阵求解方程组以及机器学习训练速度对比
本文要点: 1.几个稀疏矩阵的应用场景 2.scipy得到稀疏格式矩阵后专用的方程组求解器 3.用稀疏格式求解方程组的速度对比 4.稀疏矩阵与原矩阵内存大小对比 5.python稀疏格式与array格 ...
- Python 克莱姆法则求解方程组
克莱姆法则求解方程组 请用克莱姆法则解下面的线性方程2x2系统: 编写程序,用户输入数字a.b.c.d.e和f,然后显示x和y的结果.如果ad-bc为零,呈现"The equation ha ...
- python线性方程组求解_python求解方程组的三种方法
python求解方程组的三种方法: Numpy求解方程组x + 2y = 3 4x + 5y = 6 当然我们可以手动写出解析解,然后写一个函数来求解,这实际上只是用 Python 来单纯做" ...
- 运用雅可比(Jacobi)和高斯-赛德尔(GS公式)求解方程组
实验名称: 运用雅克比和高斯赛德尔公式求解方程组 实验目的: a. 比较两种方法的收敛速度 b. 验证收敛条件的正确性 实验内容 1.比较两种方法的收敛速度 Jacobi公式原理 xi(k+1)=1a ...
- 追赶法求解方程组备忘
本篇内容为数值分析中,用追赶法求解方程组的方法,备忘如下: 1. 原理部分 追赶法求解的矩阵格式一般如下: a1 c1 0 0 b2 a2 c2 0 0 b3 a3 c3 0 0 b4 a4 如果矩阵 ...
最新文章
- 高逼格的 SQL 写法:行行比较
- 对话中小企业信息化甲乙方(2)
- 干货 | 机器学习正在面临哪些主要挑战?
- 做百度AI工程师,还要会“相牛”?
- 数据仓库与联机分析处理笔记
- linux里用cmake安装的软件要怎么卸载?
- 边缘计算对于基础架构和运营领导者意味着什么
- uml 流程图符号 含义
- go mod机制详解
- 人脸识别的又一滥用案例:大数据杀熟,买房多付30W
- Excel学习笔记4||数据处理函数ROUND、INT、TRUNC、MAX、MIN、ROW、COLUMN
- 路由器功能及构成——网络层
- 使用yum报错:There are no enabled repos. Run “yum repolist all“ to see the repos you have.
- 资深运维也不知道的那些事
- 彩虹秒赞7.8源码破解版(去域名授权) 彩虹云任务系统无任何限制
- 【转】伽马校正(Gamma Correction)
- 啊!啊!啊!IEEE754移码偏移值的127!
- 《数据库概论》实验(3)-交互式SQL--简单查询
- Synology NAS群晖DS218play 运行内存测试
- mysql职业生涯规划书_计算机应用职业生涯规划书.pdf