矩陣分析-線性系統-2 高斯消元法、高斯-若爾當消元法

2023-10-12 01:18

本文主要是介绍矩陣分析-線性系統-2 高斯消元法、高斯-若爾當消元法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

http://www.cnblogs.com/pegasus/archive/2011/07/31/2123195.html  

1. 高斯消元法

高斯消元法(Gaussian elimination是求解線性方陣組的一種算法,它也可用來求矩陣的秩,以及求可逆方陣的逆矩陣。它通過逐步消除未知數來將原始線性系統轉化為另一個更簡單的等價的系統。它的實質是通過初等行變化(Elementary row operations),將線性方程組的增廣矩陣轉化為行階梯矩陣(row echelon form)。總結起來,如下步驟所示

 

以下面方程組為例,它的執行步驟為

                          image

1)構造增廣矩陣,即系數矩陣A增加上常數向量b(A|b)

                          image

2)通過以交換行、某行乘以非負常數和兩行相加這三種初等變化將原系統轉化為更簡單的三角形式(triangular form)

     注:這裡的初等變化可以通過系數矩陣A乘上初等矩陣E來實現

                         image

3)從而得到簡化的三角方陣組,注意它更容易解

                         image

4)這時可以使用向後替換算法(Algorithm for Back Substitution)求解得

    z=-4/-4=1,  y=4-2z=4-2=2,  x= (1-y-z)/2=(1-2-1)/2=-1

 

總結上面過程,高斯消元法其實就是下面非常簡單的過程

                            原線性方程組       ——>       高斯消元法     ——> 下三角或上三角形式的線性方程組           ——>  前向替換算法求解(對於上三角形式,采用後向替換算法)

image         \begin{matrix}l_{1,1} x_1 &   &             &            &             & = &    b_1 \\l_{2,1} x_1 & + & l_{2,2} x_2 &            &             & = &    b_2 \\     \vdots &   &      \vdots &     \ddots &             &   & \vdots \\l_{m,1} x_1 & + & l_{m,2} x_2 & + \dotsb + & l_{m,m} x_m & = &   b_m  \\\end{matrix}                 image        

2.高斯-若爾當消元法(Gauss-Jordan Elimination

相對於高斯消元法,高斯-若爾當消元法最後的得到線性方程組更容易求解它得到的是簡化行列式。其轉化後的增高矩陣形式如下,因此它可以直接求出方程的解,而無需使用替換算法。但是,此算法的效率較低。

                             image

 

例子如下:

image          解為image

 

3.實際應用中的高斯消元法

前面介紹了最基本的高斯消元法,現在看看應用於實際問題的實用算法。

3.1 誤差

因為實際應用中,我們總是利用計算機來分析線性系統,而計算機中以有限的數來近似無限的實數,因此產生舍入誤差(roundoff error),進而對解線性系統產生很多影響。

 

一個t位(即精度為t)以image為基的浮點數的表達形式為:imageimage對於一個實數x,其浮點近似值image為最接近x的浮點數,必要時進行近似image

例1:對2位以10為基的浮點算法,image

例2:同樣考慮imageimage

 

以下面系統為例,看看在高斯消元中采用浮點算法會產生什麼效果。

                                                                           image

當以精確解法時,通過將第一行乘以m=89/47,並從第二行中減去得到image,進而利用後向替換算法得x=1,y=-1。

當以3位以10為基的浮點算法時,乘子變為image,因為image因此第一步高斯消元後得

image。此時,因為不能將第2行第1列位置變為0,所以不能將其三角化。從而,我們只能接受將這個位置值賦為0,而不管其實際浮點值。因此,3位浮點高斯消元的結果為image後向算法計算結果為image

3.2 部分主元消元(Partial Pivoting)

盡管無法消除近似誤差的影響,可以采用一些技術來盡量減小這類機器誤差。部分主元消元法在高斯消元的每一步,都選擇列上最大值為軸(通過行變換將其移動)。

3.

这篇关于矩陣分析-線性系統-2 高斯消元法、高斯-若爾當消元法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/192188

相关文章

Python中的Walrus运算符分析示例详解

《Python中的Walrus运算符分析示例详解》Python中的Walrus运算符(:=)是Python3.8引入的一个新特性,允许在表达式中同时赋值和返回值,它的核心作用是减少重复计算,提升代码简... 目录1. 在循环中避免重复计算2. 在条件判断中同时赋值变量3. 在列表推导式或字典推导式中简化逻辑

Java程序进程起来了但是不打印日志的原因分析

《Java程序进程起来了但是不打印日志的原因分析》:本文主要介绍Java程序进程起来了但是不打印日志的原因分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java程序进程起来了但是不打印日志的原因1、日志配置问题2、日志文件权限问题3、日志文件路径问题4、程序

Java字符串操作技巧之语法、示例与应用场景分析

《Java字符串操作技巧之语法、示例与应用场景分析》在Java算法题和日常开发中,字符串处理是必备的核心技能,本文全面梳理Java中字符串的常用操作语法,结合代码示例、应用场景和避坑指南,可快速掌握字... 目录引言1. 基础操作1.1 创建字符串1.2 获取长度1.3 访问字符2. 字符串处理2.1 子字

Python 迭代器和生成器概念及场景分析

《Python迭代器和生成器概念及场景分析》yield是Python中实现惰性计算和协程的核心工具,结合send()、throw()、close()等方法,能够构建高效、灵活的数据流和控制流模型,这... 目录迭代器的介绍自定义迭代器省略的迭代器生产器的介绍yield的普通用法yield的高级用法yidle

C++ Sort函数使用场景分析

《C++Sort函数使用场景分析》sort函数是algorithm库下的一个函数,sort函数是不稳定的,即大小相同的元素在排序后相对顺序可能发生改变,如果某些场景需要保持相同元素间的相对顺序,可使... 目录C++ Sort函数详解一、sort函数调用的两种方式二、sort函数使用场景三、sort函数排序

kotlin中const 和val的区别及使用场景分析

《kotlin中const和val的区别及使用场景分析》在Kotlin中,const和val都是用来声明常量的,但它们的使用场景和功能有所不同,下面给大家介绍kotlin中const和val的区别,... 目录kotlin中const 和val的区别1. val:2. const:二 代码示例1 Java

Go标准库常见错误分析和解决办法

《Go标准库常见错误分析和解决办法》Go语言的标准库为开发者提供了丰富且高效的工具,涵盖了从网络编程到文件操作等各个方面,然而,标准库虽好,使用不当却可能适得其反,正所谓工欲善其事,必先利其器,本文将... 目录1. 使用了错误的time.Duration2. time.After导致的内存泄漏3. jsO

Spring事务中@Transactional注解不生效的原因分析与解决

《Spring事务中@Transactional注解不生效的原因分析与解决》在Spring框架中,@Transactional注解是管理数据库事务的核心方式,本文将深入分析事务自调用的底层原理,解释为... 目录1. 引言2. 事务自调用问题重现2.1 示例代码2.2 问题现象3. 为什么事务自调用会失效3

找不到Anaconda prompt终端的原因分析及解决方案

《找不到Anacondaprompt终端的原因分析及解决方案》因为anaconda还没有初始化,在安装anaconda的过程中,有一行是否要添加anaconda到菜单目录中,由于没有勾选,导致没有菜... 目录问题原因问http://www.chinasem.cn题解决安装了 Anaconda 却找不到 An

Spring定时任务只执行一次的原因分析与解决方案

《Spring定时任务只执行一次的原因分析与解决方案》在使用Spring的@Scheduled定时任务时,你是否遇到过任务只执行一次,后续不再触发的情况?这种情况可能由多种原因导致,如未启用调度、线程... 目录1. 问题背景2. Spring定时任务的基本用法3. 为什么定时任务只执行一次?3.1 未启用