列主元高斯消去法和列主元三角分解法解线性方程
用列主元高斯消元法求线性代数方程组的解
课程设计任务书前 言回顾普通解方程组的方法,一般都是先逐个削去未知变量,最终得到只有一个未知变量的方程,解之,把得到的值回代到消去变量过程中得到的方程组,逐个求出未知变量。
这种解线性方程组的基本方法就是这里要介绍的高斯消去法。
数学上,高斯消元法(或译:高斯消去法),是线性代数中的一个算法,可用来为线性方程组求解,求出矩阵的秩,以及求出可逆方阵的逆矩阵。
当用于一个矩阵时,高斯消元法会产生出一个“行梯阵式”。
高斯消元法可以用在电脑中来解决数千条等式及未知数。
高斯消元法可以用来找出一个可逆矩阵的逆矩阵。
用关联矩阵表述网络拓扑结构,并根据厂站拓扑结构和网络拓扑结构等概念简化了电力系统的拓扑结构。
根据广义乘法和广义加法的运算规则,将改进的高斯消元算法应用于电力系统拓扑结构分析中,并引入稀疏、分块处理等技术提高了上述拓扑分析的效率。
采用上述高斯消元算法对山东电网220kV 以上的变电站进行拓扑结构分析,结果表明了运用该高斯消元法进行网络拓扑分析的正确性和有效性。
用列主元素法,选取每列的绝对值最大的元素作为消去对象并作为主元素。
然后换行使之变到主元位子上,在进行消元计算。
设)()(k k b X A ,确定第k 列主元所在位置k i ,在交换k i 行和k 行后,在进行消元,并用MATLAB 软件进行求解。
目录摘要....................................................................................... 错误!未定义书签。
第1章绪论 ......................................................................... 错误!未定义书签。
第2章高斯消元法的算法描述 (2)2.1高斯消元法的原理概述 (2)c231730658" 2.1.1高斯消元法的消元过程 (2)c231730658" 2.1.2高斯消元法的回带过程 (3)c231730658" 2.1.3高斯消元法的复杂度分析 (4)c231730658" 2.2列主高斯消元法原理简介 (5)c231730658" 2.2.1列主高斯消元法的消元过程 (6)c231730658" 2.2.2列主高斯消元法的回带过程 (6)c231730658" 2.2.3列主高斯消元法的算法描述 (6)c231730662"第3章高斯消元法的物理应用 (9)3.1c231730663"电网模型的描述 (9)c231730658" 3.2电网模型的问题分析 (9)c231730658"3.3求解计算 (11)c231730693"参考文献 (13)摘 要用列主元素高斯消去法法,选取每列的绝对值最大的元素作为消去对象并作为主元素。
列主元三角分解法例题解析
列主元三角分解法例题解析列主元三角分解法是一种用于求解线性方程组的方法。
它将系数矩阵A分解为一个下三角矩阵L和一个上三角矩阵U,使得A=LU。
在该分解过程中,每一步选取一个列主元,确保主元所在的列进行了交换,以避免出现除以零的情况。
接下来,我将通过一个例题来详细解析列主元三角分解法的具体步骤和计算过程。
假设有如下线性方程组:2x1+3x2-x3=94x1+4x2-3x3=12x1-x2+6x3=12首先,将方程组转化为矩阵形式:Ax=b。
A=[[2,3,-1],[4,4,-3],[2,-1,6]]b=[9,1,12]接下来,我们开始进行列主元三角分解的计算过程。
第一步:选取第一列的主元,并确保主元所在的行是当前列中绝对值最大的。
在第一列中,主元为4。
由于4所在的行已经是绝对值最大的行,因此不需要进行行交换。
第二步:通过高斯消元法,将主元所在列下方的元素消为零。
将第二行乘以2并减去第一行的两倍,得到新的第二行:[0,-2,1]将第三行乘以1并减去第一行的一倍,得到新的第三行:[0,-4,7]更新后的矩阵A为:[[2,3,-1],[0,-2,1],[0,-4,7]]第三步:重复上述过程,选取第二列的主元,并确保主元所在的行是当前列中绝对值最大的。
在第二列中,主元为-4。
由于-4所在的行已经是绝对值最大的行,因此不需要进行行交换。
第四步:通过高斯消元法,将主元所在列下方的元素消为零。
将第三行乘以2并加上第二行的两倍,得到新的第三行:[0,0,15]更新后的矩阵A为:[[2,3,-1],[0,-2,1],[0,0,15]]现在,我们已经得到了分解后的矩阵U:U=[[2,3,-1],[0,-2,1],[0,0,15]]接下来,我们需要求解下三角矩阵L。
L的主对角线元素都为1,而且L的非零元素是通过进行消元操作得到的。
根据之前的计算过程,可以得到L的非零元素:l21=2/4=0.5l31=2/2=1l32=4/2=2因此,L的形式为:L=[[1,0,0],[0.5,1,0],[1,2,1]]最后,我们可以将原始方程组写成LUx=b的形式,并求解出x的值。
多元变量的方程组求解
多元变量的方程组求解在许多实际问题中,常常需要求解由多个变量组成的方程组。
这些方程组一般无法用简单的代数方法求解,需要借助计算机等工具进行求解。
本文将介绍一些常见的多元变量方程组的求解方法。
一、高斯-约旦消元法高斯-约旦消元法是求解线性方程组的一种常见方法,其基本思想是通过多次消元,使方程组限制的范围不断缩小,最终求得方程组的解。
具体步骤如下:1.将方程组写成增广矩阵的形式;2.选定一个系数矩阵的元素作为主元,通常选择第一行第一列元素,即A[1][1];3.对于其他行的该列元素,减去主元所在行对应元素的倍数,使其变为0;4.重复2-3步骤,直到将矩阵化为上三角矩阵;5.从最后一行开始,依次计算出未知变量的值。
高斯-约旦消元法的复杂度为O(n^3),当方程组的规模较大时,求解速度会非常慢。
二、雅可比迭代法雅可比迭代法是通过迭代求解变量的值,直到收敛于方程组的解的方法,其基本思想是将方程组的每个变量下一次迭代时的值,视为其它变量的当前值,通过逐步迭代,求解出未知变量的值。
具体步骤如下:1.将方程组表示为矩阵形式:Ax=b;2.选择一个初值向量x0,设x^(k)为第k次迭代的结果;3.根据迭代公式x_i^(k+1)=[b_i-(sum(A_ij*x_j^(k)))/(A_ii)]/A_ii,计算x^(k+1),其中i表示第i个未知变量,j表示其它未知变量;4.重复3步骤,直到收敛于方程组的解。
雅可比迭代法适用于系数矩阵为对角占优矩阵的情况,当矩阵的条件数较大时,迭代次数可能会非常多,计算速度较慢。
三、列主元高斯消元法列主元高斯消元法是对高斯-约旦消元法的改进,其主要思想是在每次消元时,选择系数矩阵中绝对值最大的元素作为主元,以此来避免出现数值精度过低等问题。
具体步骤如下:1.将方程组写成增广矩阵的形式;2.选定一个未知数作为主元,使得该列元素的绝对值最大;3.将该列中主元所在行交换到最上面;4.对于其他行的该列元素,减去主元所在行对应元素的倍数,使其变为0;5.重复2-3-4步骤,直到将矩阵化为上三角矩阵;6.从最后一行开始,依次计算出未知变量的值。
Guass列选主元消去法和三角分解法
Guass列选主元消去法和三⾓分解法 最近数值计算学了Guass列主消元法和三⾓分解法解线性⽅程组,具体原理如下:1、Guass列选主元消去法对于AX =B1)、消元过程:将(A|B)进⾏变换为,其中是上三⾓矩阵。
即:k从1到n-1a、列选主元选取第k列中绝对值最⼤元素作为主元。
b、换⾏c、归⼀化d、消元2)、回代过程:由解出。
2、三⾓分解法(Doolittle分解)将A分解为如下形式由矩阵乘法原理a、计算U的第⼀⾏,再计算L的第⼀列b、设已求出U的1⾄r-1⾏,L的1⾄r-1列。
先计算U的第r⾏,再计算L的第r列。
a)计算U的r⾏b)计算L的r列C#代码: 代码说明:Guass列主消元法部分将计算出来的根仍然储存在增⼴矩阵的最后⼀列,⽽Doolittle分解,将分解后的结果也储存⾄原来的数组中,这样可以节约空间。
using System;using System.Windows.Forms;namespace Test{public partial class Form1 : Form{public Form1(){InitializeComponent();}private void Cannel_Button_Click(object sender, EventArgs e){this.textBox1.Clear();this.textBox2.Clear();this.textBox3.Clear();boBox1.SelectedIndex = -1;}public double[,] GetNum(string str, int n){string[] strnum = str.Split(' ');double[,] a = new double[n, n + 1];int k = 0;for (int i = 0; i < n; i++){for (int j = 0; j < strnum.Length / n; j++){a[i, j] = double.Parse((strnum[k]).ToString());k++;}}return a;}public void Gauss(double[,] a, int n){int i, j;SelectColE(a, n);for (i = n - 1; i >= 0; i--){for (j = i + 1; j < n; j++)a[i, n] -= a[i, j] * a[j, n];a[i, n] /= a[i, i];}}//选择列主元并进⾏消元public void SelectColE(double[,] a, int n){int i, j, k, maxRowE;double temp; //⽤于记录消元时的因数for (j = 0; j < n; j++){maxRowE = j;for (i = j; i < n; i++)if (System.Math.Abs(a[i, j]) > System.Math.Abs(a[maxRowE, j]))maxRowE = i;if (maxRowE != j)swapRow(a, j, maxRowE, n); //与最⼤主元所在⾏交换//消元for (i = j + 1; i < n; i++){temp = a[i, j] / a[j, j];for (k = j; k < n + 1; k++)a[i, k] -= a[j, k] * temp;}}return;}public void swapRow(double[,] a, int m, int maxRowE, int n){int k;double temp;for (k = m; k < n + 1; k++){temp = a[m, k];a[m, k] = a[maxRowE, k];a[maxRowE, k] = temp;}}public void Doolittle(double[,] a, int n){for (int i = 0; i < n; i++){if (i == 0){for (int j = i + 1; j < n; j++)a[j, 0] = a[j, 0] / a[0, 0];}else{double temp = 0, s = 0;for (int j = i; j < n; j++){for (int k = 0; k < i; k++){temp = temp + a[i, k] * a[k, j];}a[i, j] = a[i, j] - temp;}for (int j = i + 1; j < n; j++){for (int k = 0; k < i; k++){s = s + a[j, k] * a[k, i];}a[j, i] = (a[j, i] - s) / a[i, i];}}}}private void Exit_Button_Click(object sender, EventArgs e){this.Close();}private void Confirm_Button_Click(object sender, EventArgs e){if (this.textBox2.Text.Trim().ToString().Length == 0){this.textBox2.Text = this.textBox1.Text.Trim();}else{this.textBox2.Text = this.textBox2.Text + "\r\n" + this.textBox1.Text.Trim();}this.textBox1.Clear();}private void Calculate_Button_Click(object sender, EventArgs e){string str = this.textBox2.Text.Trim().ToString();string myString = str.Replace("\n", " ").Replace("\r", string.Empty);double[,] a = new double[this.textBox2.Lines.GetUpperBound(0) + 1, this.textBox2.Lines.GetUpperBound(0) + 2];a = GetNum(myString, this.textBox2.Lines.GetUpperBound(0) + 1);if (boBox1.Text == "Guass列主消元法"){Gauss(a, this.textBox2.Lines.GetUpperBound(0) + 1);for (int i = 0; i < this.textBox2.Lines.GetUpperBound(0) + 1; i++){this.textBox3.Text = this.textBox3.Text + "\r\nX" + (i + 1) + "=" + a[i, this.textBox2.Lines.GetUpperBound(0) + 1]; }}else if (boBox1.Text == "Doolittle三⾓分解法"){this.textBox3.Enabled = true;Doolittle(a, this.textBox2.Lines.GetUpperBound(0) + 1);bel3.Text = "分解后的结果:";this.textBox3.Clear();this.textBox3.Text += "L矩阵:\r\n";for (int i = 0; i < this.textBox2.Lines.GetUpperBound(0) + 1; i++) {for (int j = 0; j < this.textBox2.Lines.GetUpperBound(0) + 1; j++) {if (j < i){this.textBox3.Text += a[i, j].ToString() + "\t";}else if (i == j){this.textBox3.Text += "1\t";}else{this.textBox3.Text += "0\t";}}this.textBox3.Text += "\r\n";}this.textBox3.Text += "\r\nU矩阵:\r\n";for (int i = 0; i < this.textBox2.Lines.GetUpperBound(0) + 1; i++) {for (int j = 0; j < this.textBox2.Lines.GetUpperBound(0) + 1; j++) {if (j >= i){this.textBox3.Text += a[i, j].ToString() + "\t";}else{this.textBox3.Text += "0\t";}}this.textBox3.Text += "\r\n";}}}private void textBox1_KeyDown(object sender, KeyEventArgs e){if (e.KeyCode == Keys.Enter){if (this.textBox1.Text.Trim().ToString().Length == 0){Calculate_Button_Click(sender, e);}else{Confirm_Button_Click(sender, e);}}}private void button1_Click(object sender, EventArgs e){this.textBox2.Enabled = true;}}} 运⾏截图: ⾄此完毕。
数值分析--解线性方程组的直接方法
值 为A的特征值,x为A对应的特征向量,A的全体特征值
分 析
称为A的谱,计作 ( A),即 ( A) {i ,i 1,2,, n}, 则称
》
( A)
max
1in
|
i
|
为矩阵A的谱 半 径.
三、特殊矩阵
第5章 解线性方程组的直接方法
1) 对角矩阵
2) 三对角矩阵
3) 上三角矩阵
4) 上海森伯(Hessenberg)阵
分 析
1.00x 1.00y 2.00
》 解法1: 1.00105 x 1.00 y 1.00
(1.00 1.00105) y (2.00 1.00105)
1.00105 x 1.00 y 1.00
1.00
105
y
1.00
105
x 0.00,
y 1.00
第5章 解线性方程组的直接方法
1
Ly b y 3,Ux y x 1.
2
1
第5章 解线性方程组的直接方法
§3 高斯主元素消去法
若ak(kk) 0,或ak(kk)很接近于0,会导致其他元素数量级严重 增长和舍入误差的扩散,使得计算结果不可靠.
《例3’采用3位十进制,用消元法求解
数 值
1.00105 x 1.00y 1.00
L21L1 U2U11
L21L1
U
U 1
21
I
(因为上式右边为上三角矩阵,左边为单位下三角矩阵
从而上式两边都必须等于单位矩阵)
《 数
L1 L2 , U1 U2
1 1 1
值分例2
析
.例1中,A
0
4
-1,将A作LU分解。
范数-摆脱课本繁琐的公式,比较好懂
p
范数的特殊情况。 注:前三种范数都是p—范数的特殊情况。其中 前三种范数都是 范数的特殊情况
|| X ||∞ = lim || X || p
p →∞
计算方法三 计算方法三⑤
向量范数的连续性: 向量范数的连续性
5/35
定理3.3 设f(X)=||X||为Rn上的任一向量范数 则f(X) 定理 为 上的任一向量范数,则 的分量x 的连续函数. 为X的分量 1,x2,…,xn的连续函数 的分量
lim x i = xi (i = 1,2,..., n)
(k ) k →∞
则称向量X= (x1,x2,...,xn)T为向量序列 则称向量 , {X(k)}的极限,或者说向量序列 (k)}收敛 的极限, 的极限 或者说向量序列{X 收敛 于向量X, 于向量 ,记为
lim X
k →∞
(k )
=X 或 X
(k )
→ X (k → ∞)
计算方法三 计算方法三⑤
计算方法三 计算方法三⑤
x1 (k ) ( k ) x2 X = ………… M x (k ) n (k ) x1 x1 (k ) x2 ( k ) x2 X = → = M M x (k ) x n n
几种常用的矩阵范数: 几种常用的矩阵范数:
n
13/35
a11 a21 设 A= ⋅⋅⋅ a n1
a12 ⋅⋅⋅ a1n A 1 = max∑aij 列范数 1≤j≤n i=1 n a22 ⋅⋅⋅ a2n A ∞ = max∑aij 行范数 ⋅⋅⋅ ⋅⋅⋅ ⋅⋅⋅ 1≤i≤n j=1 T an2 ⋅⋅⋅ ann A 2 = λ (A A) max AF =
线性代数求解方法和技巧
线性代数求解方法和技巧线性代数是数学中重要的一个分支,研究向量空间、线性变换和线性方程组等内容。
在实际问题中,我们常常需要用线性代数的方法来解决问题,因此掌握线性代数的求解方法和技巧对于理解和应用数学是非常重要的。
首先,我们讨论线性方程组的求解方法。
线性方程组是由一组线性方程组成的方程组,其中每个方程的未知数的次数都为1。
对于n个未知数和m个方程的线性方程组,我们有以下几种常用的求解方法:1. 列主元消元法:这是最常用的线性方程组求解方法之一。
它的基本思想是通过行变换将线性方程组化为一个三角形式,进而求解得到方程组的解。
在进行行变换时,要选择合适的列主元,即选择主元元素绝对值最大的一列作为主元素。
2. 矩阵求逆法:对于一个可逆的n阶方阵A,我们可以通过求A的逆矩阵来求解线性方程组Ax=b。
具体地,我们首先通过高斯消元法将方程组化为三角形式,然后根据三角形式的矩阵求逆公式来求解x。
3. LU分解法:对于一个n阶非奇异矩阵A,我们可以将其分解为一个下三角矩阵L和一个上三角矩阵U的乘积,即A=LU。
接着,我们可以通过LU分解来求解线性方程组Ax=b。
具体地,我们首先通过LU分解将方程组化为Lc=b和Ux=c两个方程组,然后依次求解这两个方程组得到x的值。
除了以上的求解方法,还有一些线性方程组的特殊情况和对应的求解方法:1. 齐次线性方程组:如果线性方程组右边的常数项都为0,即b=0,那么我们称为齐次线性方程组。
对于齐次线性方程组,其解空间是一个向量空间。
我们可以通过高斯消元法来求解齐次线性方程组,先将其化为三角形式,然后确定自由未知量的个数,最后确定解空间的基底。
2. 奇异线性方程组:如果线性方程组的系数矩阵A是奇异矩阵,即det(A)=0,那么我们称为奇异线性方程组。
对于奇异线性方程组,其解可能不存在,或者存在无穷多解。
我们可以通过计算矩阵A的秩来确定线性方程组的解的情况。
另外,在实际问题中,我们可能会遇到大规模的线性方程组,这时候求解方法和技巧还需要考虑到计算效率的问题。
用列主元消去法解线性方程组
用列主元消去法解线性方程组
列主元消去法是一种解决线性方程组的有效方法,它可以有效地解决多元一次
方程组的求解问题。
列主元消去法是一种基于矩阵分解的算法,它将线性方程组转换为一系列的三
角形矩阵,从而解决线性方程组的求解问题。
它的基本思想是,首先将矩阵A分解为两个矩阵,即列主元矩阵P和三角矩阵U,然后将原方程组PA=LU转换为LUx=Pb,其中Pb是P矩阵乘以b向量的结果,最后求解LUx=Pb即可得到x向量,从而解决线性方程组的求解问题。
列主元消去法的优点在于它可以有效地解决多元一次方程组的求解问题,而且
它的计算量较小,可以在较短的时间内完成求解。
此外,它还可以有效地处理矩阵的奇异性,即当矩阵A的行列式为零时,它仍然可以有效地求解线性方程组。
列主元消去法在互联网领域的应用也很广泛,它可以用于解决复杂的数据挖掘
问题,如推荐系统、搜索引擎等,这些问题都可以用列主元消去法来解决。
此外,它还可以用于解决机器学习中的优化问题,如支持向量机、神经网络等,这些问题也可以用列主元消去法来解决。
总之,列主元消去法是一种有效的解决线性方程组的方法,它可以有效地解决
多元一次方程组的求解问题,而且它的计算量较小,可以在较短的时间内完成求解。
此外,它在互联网领域的应用也很广泛,可以用于解决复杂的数据挖掘问题和机器学习中的优化问题。
高等工程数学第二章习题及答案
第2章 线性代数方程组数值解法 研究n 阶线性方程组Ax b =的数值解法.()ij A a =是n n⨯矩阵且非奇异,12(,,,)Tn x x x x = ,12(,,,)Tn b b b b =两类数值方法:(1) 直接法:通过有限次的算术运算,若计算过程中没有舍入误差,可以求出精确解的方法.Ax b Gx d == 等价变换G 通常是对角矩阵、三角矩阵或者是一些结构简单的矩阵的乘积.(2) 迭代法:用某种极限过程去逐次逼近方程组的解的方法.(1)()i i Ax b x Bx k x Bx k +==+−−−−−→=+ 等价变换建立迭代格式,0,1,i =一、向量范数与矩阵范数 1. 向量范数【定义】 若对nK 上任一向量x ,对应一个非负实数x ,对任意,nx y R ∈及K α∈,满足如下条件(向量范数三公理) (1) 非负性:0x ≥,且0x =的充要条件是0x =;(2)齐次性:x xαα=;(3)三角不等式:x y x y+≤+.则称x为向量x的范数.常用的向量范数: (1) 1—范数11nii x x ==∑(2) 2—范数12221()ni i x x ==∑(3) ∞—范数1max ii nxx ∞≤≤=(4) 一般的p —范数11()pnpi pi xx ==∑2. 矩阵范数【定义】 若n nK ⨯上任一矩阵()ij n n A a ⨯=,对应一个非负实数A ,对任意的,n nA B K ⨯∈和K α∈,满足如下条件(矩阵范数公理):(1) 非负性:0A ≥,且0A =的充要条件是0A =;(2)齐次性:A Aαα=;(3)三角不等式:A B A B +≤+;(4)乘法不等式:AB A B≤.则称A为矩阵A的范数.矩阵范数与向量范数是相容的:Ax A x≤向量范数产生的从属范数或算子范数:10max maxx x AxA Ax x=≠==常见从属范数:(1) 1—范数111max ||nij j ni A a ≤≤==∑(2) ∞—范数11max ||nij i nj A a ∞≤≤==∑(3) 2—范数2A =谱半径1()max ||H i i n A A ρλ≤≤=,iλ为H A A 的特征值.H A 为A 的共轭转置. 注:矩阵A 的谱半径不超过A 的任一范数,即()A A ρ≤范数等价性定理:,s t x x为n R 上向量的任意两种范数,则存在常数12,0c c >,使得12,ns t s c x x c x x R ≤≤ ∀∈.注:矩阵范数有同样的结论. 【定理2.1】是任一向量范数,向量序列()k x 收敛于向量*x 的充要条件是()*0,k x x k -→ →∞二、 Gauss 消去法 1.顺序Gauss 消去法 将方程Ax b =写成如下形式11112211,121122222,11122,1n n n n n n n n nn n n n a x a x a x a a x a x a x a a x a x a x a ++++++=⎧⎪+++=⎪⎨⎪⎪+++=⎩其中记,1,1,2,,.i n i a b i n +==消元过程:第一次消元:设110a ≠,由第2,3,,n 个方程减去第一个方程乘以1111/(2,3,,)i i m a a i n == ,则将方程组中第一个未知数1x消去,得到同解方程11112211,1(1)(1)(1)22222,1(1)(1)(1)22,1n n n n n n n nn n n n a x a x a x a a x a x a a x a x a ++++++=⎧⎪ ++=⎪⎨⎪⎪ ++=⎩其中, (1)11,2,3,,;2,3,,,1ijij i j a a m a i n j n n =-==+ . 1111/i i m a a =,2,3,,i n = .第二次消元:设(1)220a ≠,.由第2,3,,n 个方程减去方程组中的第2个方程乘以(1)(1)2222/(3,4,,)i i m a a i n == ,则将方程组第2个未知数2x 消去,得到同解方程11112213311,1(1)(1)(1)(1)2222322,1(2)(2)(2)33333,1(2)(2)(2)33,1n n n n n n n n n nnn n n n a x a x a x a x a a x a a x a a x a x a a x a x a ++++++++=⎧⎪ +++=⎪⎪ ++=⎨⎪⎪⎪ ++=⎩其中(2)(1)(1)22, 3,4,,; 3,4,,,1ij ij i j a a m a i n j n n =-==+ . (1)(1)2222/i i m a a =,3,4,,i n = .经过1n -次消元后,原方程组变成等价方程组11112213311,1(1)(1)(1)(1)2222322,1(2)(2)(2)33333,1(1)(1),1n n n n n n n n n n n nn n n n a x a x a x a x a a x a a x a a x a x a a x a +++--+++++=⎧⎪ +++=⎪⎪ ++=⎨⎪⎪⎪ =⎩其中()(1)(1), 1,2,,k k k ij ij ik ij a a m a i k k n --=-=++ , 1,2,,,1j k k n n =+++ .(1)(1)/k k ik ik kkm a a --=,1,2,,i k k n =++ ;1,2,,1k n =- .回代过程:(1)(1),1(1)(1)(1),1,,1/[]/,1,2,,2,1.n n n n n m n i i i ii n i j j i j j i x a a x a a x a i n n --+---+=+⎧=⎪⎨=-=--⎪⎩∑计算量:按常规把乘除法的计算次数合在一起作为Gauss 消去法总的计算量,而略去加减法的计算次数. 在消去过程中,对固定的消去次数(1,2,,1)k k n =- ,有:除法(1)(1),,/,1,1,,k k ik i k k k m a a i k k n --= =++ 共计n k -次;乘法(1),,1,2,,;1,2,,,1k ik k j m a i k k n j k k n n - =++ =+++ 共计()(1)n k n k --+次.因此,消去过程总的计算量为1311[()(1)]3n k M n k n k n k n-==--++-≈∑ 回代过程的乘除法计算次数为21()2n n +.与消去法计算量相比可以略去不计.所以, Gauss 消去法总的计算量大约为313n .2. Gauss-Jordan 消去法Gauss-Jordan 消去法是Gauss 消去法的一种变形.此方法的第一次消元过程同Gauss 消去法一样,得到(1)(1)(1)(1)11112213311,1(1)(1)(1)(1)22223322,1(1)(1)(1)(1)32233333,1(1)(1)(1)(1)2233,1,,,,n n n n n n n n n nn nn n n n a x a x a x a x a a x a x a x a a x a x a x a a x a x a x a ++++⎧++++=⎪ +++=⎪ +++=⎨ +++= ⎪⎪⎪⎪⎩其中,(1)11,2,,,1jj a a j n n ==+ . 第二次消元:设(1)220a ≠,由第1,3,4,,n 个方程减去第2个方程乘以(1)(1)2222/(1,3,4,,)i i m a a i n == ,则得到同解方程组(2)(2)(2)11113311,1(1)(2)(2)(2)22223322,1(2)(2)(2)33333,1(2)(2)33,1,,,n n n n n n n n n nnn n n n a x a x a x a a x a x a x a a x a x a a x a x a +++++ +++= +++= ++= ++= (2),⎧⎪⎪⎪⎨⎪⎪⎪⎩继续类似的过程,在第k 次消元时,设(1)k kk a -,将第i 个方程减去第k 个方程乘以(1)(1)/k k ik ik kk m a a --=,这里1,3,4,1,1,,i k k n =-+ .经过1n -次消元,得到(2)1111,1(1)(2)2222,1(2)(2)33,1,,,n n n n n a x a a x a a x a +++⎧ =⎪ =⎪⎪ ⎨⎪⎪⎪ =⎩其中()(1)(1),1,2,,1,1,,k k k ij ij ik kj a a m a i k k n --=-=-+ ;1,2,,,1; 1,2,,1j n n k n =+=- .此时,求解回代过程为(1)(1),1/,1,2,,n i i i n iix a a i n --+= = 经统计,总的计算量约为312M n ≈次乘除法. 从表面上看Gauss-Jordan 消去法似乎比Gauss 消去法好,但从计算量上看Gauss -Jordan 消去法明显比Gauss消去法的计算量要大,这说明用Gauss-Jordan 消去法解线性方程组并不可取.但用此方法求矩阵的逆却很方便. 3.列选主元Gauss 消去法在介绍Gauss 消去法时,始终假设(1)0k kk a -≠,称(1)k kka -为主元.若(1)0k kka -=,显然消去过程无法进行.实际上,既使(1)0k kka -≠,但(1)k kka -很小时,用它作除数对实际计算结果也是很不利的.称这样的(1)k kka -为小主元.【例2.2】设计算机可保证10位有效数字,用消元法解方程1112120.3100.7,0.9,x x x x -⎧⨯+=⎪⎨ +=⎪⎩【解】经过第一次消元:第2个方程减去第1个方程乘以212111/m a a =得1112(1)(1)222230.3100.7x x a x a -⎧⨯+=⎪⎨ =⎪⎩其中(1)1222222111/0.333333333310a a a a =-=-⨯,(1)123323211113(/)0.233333333310a a a a a =-⋅=-⨯于是解得(1)(1)223221/0.7000000000,0.0000000000,x a a x ⎧==⎪⎨=⎪⎩而真解为120.2,0.7x x = =注:造成结果失真的主要因素是主元素11a太小,而且在消元过程中作了分母,为避免这个情况发生,应在消元之前,作行交换.【定义】 若 (1)(1)||max ||k k k r k ik k i na a --≤≤=,则称(1)||k k r k a - 为列主元素. k r 行为主元素行,这时可将第 k r行与第k 行进行交换,使(1)||k k r k a - 位于交换后的等价方程组的 (1)k kk a - 位置,然后再施实消去法,这种方法称为列选主元Gauss 消去法或部分主元Gauss 消去法.【例2.3】 应用列选主元Gauss 消去法解上述方程. 【解】 因为2111a a >,所以先交换第1行与第2行,得1211120.9,0.3100.7,x x x x -⎧+=⎪⎨⨯+=⎪⎩ 然后再应用Gauss 消去法,得到消元后的方程组为1220.9,0.7.x x x ⎧+=⎨=⎩回代求解,可以得到正确的结果.即120.2,0.7x x = =.三、三角分解法 设方程组Ax b =的系数矩阵A 的顺序主子式不为零.即1112121222110,1,2,,.kk k k k kka a a a a a k n a a a ∆=≠=在Gauss 消去法中,第一次消元时,相当于用单位下三角阵211131111010010n m L m m -⎡⎤⎢⎥- ⎢⎥⎢⎥=- ⎢⎥ ⎢⎥⎢⎥- ⎢⎥⎣⎦ ,左乘方程组Ax b =,得11A x b =,其中11121(1)(1)122211(1)200n n n nn a a a a a A L a a -(1)⎡⎤⎢⎥ ⎢⎥==⎢⎥ ⎢⎥⎢⎥ ⎣⎦ ,1(1)(1)111,11,1,1(,,,)Tn n n n b L b a a a -+++== .第二次消元时,相当于用单位下三角阵1232210101001n L m m - ⎡⎤⎢⎥ ⎢⎥⎢⎥= - ⎢⎥⎢⎥⎢⎥ - ⎢⎥⎣⎦0 ,左乘方程组11A x b =,得22A x b =其中11121(1)(1)22211(2)(2)221333(2)(2)300000n n n n nn a a a a a A L L A a a a a --⎡⎤ ⎢⎥ ⎢⎥⎢⎥== ⎢⎥⎢⎥ ⎢⎥ ⎢⎥⎣⎦ ,11(1)(2)(2)2211,12,13,1,1(,,,,).Tn n n n n b L L b a a a a --++++==经过1n -次消元,最后得到等价方程组11n n A x b --=其中11121(1)222111111221(1)n n n n n n nn a a a a a A L L L L A a (1)--------⎡⎤⎢⎥ ⎢⎥==⎢⎥⎢⎥⎢⎥ ⎣⎦1111(1)(1)112221,12,1,1(,,,)n Tn n n n n n n b L L L L b a a a --------+++==注意到1n A -是一个上三角阵,记111111221n n n U A L L L L A -------==则121()n A L L L U LU -==其中,121n L L L L -= . 不难验证21313212_1111n n nn m L m m m m m ⎡⎤⎢⎥ ⎢⎥⎢⎥= ⎢⎥ ⎢⎥⎢⎥ 1 ⎢⎥⎣⎦是单位下三角阵.于是解线性方程组Ax b =,就转化为解方程 LUx b =,若令Ux y =就得到一个与 Ax b =等价的方程组Ly b Ux y =⎧⎨=⎩【定理2.2】 若 A 为 n 阶方阵,且 A 的所有顺序主子式0k ∆≠,1,2,,k n = .则存在唯一的一个单位下三角矩阵 L 和一个上三角矩阵 U ,使A LU =.在上述过程中,若不假设A 的顺序主子式都不为零,只假设A 非奇异,那么Gauss 消去法将不可避免要应用两行对换的初等变换.第一次消元,将第1行与第1r 行交换,相当于将方程组Ax b =左乘矩阵11r P :1111r r P Ax P b=经第一次消元得11111111r r L P Ax L P b--=即系数矩阵为11111r A L P A-=,其中110111r P ⎡⎢ ⎢ 1= 1 0 1 ⎣0 0 ⎤⎥⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎦1 列 1r列 类似地,经1n -次消元,有121111111,22,11n n n n n r n n r r A L P L P L P A----------= .如果预先知道每一个(1,2,,1)iir P i n =- ,则在消元之前就全部作交换,得 1211,2,1,n n n r n r r A P P P A PA----== ,其中,1211,2,1,n n n r n r r P P P P ----= .即原方程变为PAx Pb =然后再消元,相当于对PA 做三角分解PA LU =由以上讨论,可得结论 【定理2.3】 若A 非奇异,则一定存在排列矩阵 P ,使得 PA 被分解为一个单位下三角阵和一个上三角1 行1行r阵的乘积,即PA LU =成立.这时,原方程组Ax b = 等价于 PAx Pb =,即等价于求解LUx Pb =令Ux y =则Ly Pb =实际求解时,先解方程组Ly Pb =,再根据 y 求解 Ux y =,即得原方程组Ax b =的解. 这种求解方法称为三角分解法.常用三角分解方法有以下几种. 1.Doolittle 分解方法 假设系数矩阵A 不需要进行行交换,且三角分解是唯一的. 记21121110n n l L l l ⎡⎤⎢⎥ ⎢⎥=⎢⎥ ⎢⎥ ⎢⎥⎣⎦ , 11121222n n nn u u u u u U u ⎡⎤⎢⎥ ⎢⎥=⎢⎥ ⎢⎥ 0 ⎣⎦ 于是有1112111121222212222112111110n n n n n n n n nn a a a u u u u u a a a l l l a a a ⎡⎤ ⎡⎤⎢⎥⎢⎥ ⎢⎥⎢⎥=⎢⎥⎢⎥ ⎢⎥⎢⎥ ⎢⎥⎢⎥ ⎣⎦⎣⎦ nn u ⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥0 ⎣⎦从前面讨论A 的LU 分解过程可看出,L 、U 的元素都是用有关的(1)k ij a -来表示的,而它们的计算较麻烦.现在给出直接从系数矩阵A ,通过比较等式的两边逐步把L 和U 构造出来的方法,而不必利用Gauss 消去法的中间结果(1)k ij a -.计算步骤: (1) 由L 阵的第1行分别乘U 阵的各列,先算出U 阵的第1行元素 11,1,2,,j j u a j n = = .然后,由L 阵的各行分别去乘U 阵的第1列,算出L 阵的第1列元素1111/,2,3,,i i l a a i n = = .(2)现假设已经算出U 阵的前1r -行元素,L 阵的前1r -列元素,下面来算U 阵的第r 行元素,L 阵的第r 列元素.由L 阵的第r 行分别乘U 阵的第j 列(,1,,)j r r n =+ ,得11r ij rk kj rjk a l u u -==+∑所以,得U 阵的第r 行元素11,,1,,r rj rj rk kj k u a l u j r r n-==- =+∑ .再由L 阵的第i 行(1,2,,)i r r n =++ 分别去乘U 阵的第r 列,得11r ir ik kr ir rrk a l u l u -==+∑,所以,得L 阵的第r 列元素11[]/,1,2,,.r ir ir ik kr rr k l a l u u i r r n -==- =++∑取1,2,,r n = 逐步计算,就可完成三角分解A LU =;(3)解与Ax b = 等价的方程组Ly b Ux y =⎧⎨=⎩逐次用向前代入过程先解Ly b = 得1111,2,3,,.i i i ij j j y b y b l y i n -==⎧⎪⎨=- =⎪⎩∑然后再用逐次向后回代过程解Ux y =得1/,()/,1,2,,2,1.n n nn n i i ij j ii j i x y u x y u x u i n n =+=⎧⎪⎨=- =--⎪⎩∑2.Crout 分解方法仍假设系数矩阵A 不需要进行行交换,且三角分解是唯一的.即ˆA L=ˆU .与Doolittle 分解方法的区别在111212122211n n n n nn a a a a a a a a a ⎡⎤ ⎢⎥ ⎢⎥=⎢⎥ ⎢⎥⎢⎥ ⎣⎦ 1122ˆˆl l ⎡⎤ 0⎢⎥ ⎢⎥⎢⎥ ⎢⎥⎢⎥⎣⎦ 122ˆ1ˆ10n u u ⎡⎤⎢⎥ ⎢⎥⎢⎥ ⎢⎥ 1 ⎣⎦ 比较两边,则可推导出与Doolittle 分解方法类似的公式,不过Crout 分解方法是先算ˆL 的第r 列,然后再算ˆU的第r 行.3.Cholesky 分解方法若 A 为对称正定矩阵,则有 ˆT U L =,即11()()TT T A LDL LD LD LL ===其中L 为下三角阵. 进一步展开为1121111211112122221222221212n n n n n n nn n n nn a a a l l l l a a a l l l l l l l a a a ⎡⎤⎡⎤ ⎢⎥⎢⎥ 0 ⎢⎥⎢⎥=⎢⎥⎢⎥ ⎢⎥⎢⎥ ⎢⎥ ⎢⎥⎣⎦⎣⎦ 0nn l ⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥ ⎣⎦ 比较两边对应元素,容易得到12121()r rr rr rk k l a l -==-∑ ,11()/r ir ir ik rk rrk l a l l l -==-∑ 1,2,,;1,2,,.r n i r r n ==++Cholesky 分解的优点:不用选主元. 由21rrr rk k a l ==∑ 可以看出||1,2,,.rk l k r ≤=这表明中间量rk l得以控制,因此不会产生由中间量放大使计算不稳定的现象. Cholesky 分解的缺点:需要作开方运算. 改进的Cholesky 分解: 改为使用分解T A LDL =即11121121121221222121111n n n n n n n n nn a a a d l l l d a a a l l d a a a ⎡⎤ 1 ⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥ 1 1 ⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥ ⎢⎥⎢⎥⎢⎥ ⎢⎥ ⎣⎦⎣⎦⎣⎦ 2n l ⎡⎤⎢⎥ ⎢⎥⎢⎥ ⎢⎥ 1⎣⎦其中21ˆl 1ˆn l 2ˆn l ˆnn l 1ˆn u12111()/r r rr rk k k r ir ir ik k rk rk d a l d l a l d l d-=-=⎧=-⎪⎪⎨⎪=-⎪⎩∑∑,1,2,,;1,2,,.r n i r r n ==++Cholesky 分解方法或平方根法:应用Cholesky 分解可将Ax b =分解为两个三角形方程组T Ly b L x y ⎧= ⎪⎨= ⎪⎩分别可解得111111/,()/.i i i ik k ii k y b l y b l y l i n -=⎧=⎪⎨=-, =2,3,,⎪⎩∑和1/,()/1,.n n nn n i i ki k ii k i x y l x y l x l i n n =+⎧=⎪⎨=-, =--2,,2,1⎪⎩∑改进的Cholesky 分解方法或改进的平方根法:应用改进的Cholesky 分解,将方程组Ax b =分解为下面两个方程组1,,T Ly b L x D y -= ⎧⎨= ⎩同理可解得1111,,2,3,,.i i i ik k k y b y b l y i n ==⎧=⎪⎨=- =⎪⎩∑和1/,/,1,2,,2,1.n n n n i i i ki k k i x y d x y d l x i n n =+⎧=⎪⎨=- =--⎪⎩∑ 4.解三对角方程组的追赶法若()ij n n A a ⨯=满足1||||,1,2,,.nii ij j j ia a i n =≠> =∑则称A 为严格对角占优矩阵.若A 满足1||||,1,2,,.nii ij j j ia a i n =≠≥ =∑且其中至少有一个严格不等式成立,则称A 为弱对角占优矩阵.现在考虑Ax d = 的求解,即11112222211111n n n n n n n n n b c x d a b c x d a b c x d d a b x -----⎡⎤⎡⎤⎡⎤ ⎢⎥⎢⎥⎢⎥ ⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥ = ⎢⎥⎢⎥⎢⎥ ⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦⎣⎦ 系数矩阵A 满足条件11||||0,||||||,,0,2,3,, 1.||||0,i i i i i n n b c b a c a c i n b a ⎧>>⎪≥+ ≠=-⎨⎪>>⎩采用Crout 分解方法11112222221111n n n n n n n b c a b c a b c a b βαβγαγα---⎡⎤ ⎡⎤⎢⎥ 1 ⎢⎥⎢⎥ ⎢⎥⎢⎥ = ⎢⎥⎢⎥ ⎢⎥ ⎢⎥ ⎢⎥⎢⎥⎣⎦ ⎣⎦ 1n β-⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥1 ⎢⎥⎢⎥ 1 ⎣⎦其中,,,i i i αβγ为待定系数.比较上式两边可得到111111,;,,2,3,,;,2,3,, 1.i i i i i i i i i b c a b i n c i n ααβγγβααβ-= == =+ == =-进而可导出1111111,2,3,,.,/,,2,3,,./(),2,3,, 1.i i i i i i ii i i i a i n b c b b i n c b i n γαβααββαβ--⎧= =⎪= =⎪⎨=- =⎪⎪=- =-⎩由此可看出,真正需要计算的是(1,2,,1)i n β=- ,而i α可由,i i b a 和1i β-产生.因此,实现了A 的Crout 分解后,求解Ax d =就等价于解方程组Ly dUx y =⎧⎨=⎩从而得到解三对角方程组的追赶法公式: (1) 计算i β的递推公式:1111/,/(),2,3,, 1.i i i i i c b c b i n ββαβ-⎧=⎪⎨=- =-⎪⎩(2) 解方程组Ly d =:11111/()/(),2,3,,.i i i i i i i y d b y d a y b a i n β--⎧=⎪⎨=-- =⎪⎩(3) 解方程组Ux y =:1,1,2,,2,1.n n i i i i x y x y x i n n β+⎧=⎪⎨=- =--⎪⎩追赶法的乘除法次数是66n -次.将计算121n βββ-→→→ 及12n y y y →→→ 的过程称之为“追”的过程,将计算方程组Ax d =的解121n n x x x x -→→→→ 的过程称之为“赶”的过程.四、迭代法 将Ax b =改写为一个等价的方程组 x Bx k =+建立迭代公式 (1)(),0,1,2,.i i x Bx k i +=+ =称矩阵B 为迭代矩阵.【定义】 如果对固定的矩阵B及向量k,对任意初始猜值向量(0)x ,迭代公式(1)()i i +()i()*lim i i x x →+∞=成立,其中*x 是一确定的向量,它不依赖于(0)x 的选取.则称此迭代公式是收敛的,否则称为发散的.如果迭代收敛,则应有**,x Bx k =+1. 收敛性()()*,0,1,2,i i x x i ε=- =为第i步迭代的误差向量.则有(1)(1)*()*()(),0,1,2,.x x B x x B i εε++=-=-==所以,容易推出()(0),0,1,2,,i i B i εε= =其中,(0)(0)*xxε=-为初始猜值的误差向量.设n nB K ⨯∈,lim 0i i B →+∞=⇔ ()1B ρ<.迭代法收敛基本定理: 下面三个命题是等价的 (1) 迭代法(1)()i i x Bx k +=+收敛;(2)()1B ρ<;(3) 至少存在一种矩阵的从属范数⋅,使1B <注:当条件()1B ρ<难以检验时,用1B 或B ∞等容易求出的范数,检验11B <或1B∞<来作为收敛的充分条件较为方便.常用迭代法如下. 2.Jacob 迭代 考察线性方程组Ax b =,设A 为非奇异的n 阶方阵,且对角线元素0ii a ≠(1,2,,)i n = .此时,可将矩阵A 写成如下形式A D L U =++,1122(,,,)nn D diag a a a = ,21313212000n n a L a a a a ⎡⎤⎢⎥ ⎢⎥⎢⎥= ⎢⎥ ⎢⎥⎢⎥ 0 ⎢⎥⎣⎦ ,12131232000n n a a a a a U ⎡⎤ ⎢⎥ ⎢⎥⎢⎥= 0 ⎢⎥ ⎢⎥⎢⎥ ⎢⎥⎣⎦ ,建立Jacobi 迭代公式(1)1()1(),i i x D L U x D b +--=-++迭代矩阵11()J B D L U I D A --=-+=-J B 的具体元素为112111122122221200n n J n n nn nn a a a a a a B a a a a a a ⎡⎤ - -⎢⎥⎢⎥⎢⎥- - ⎢⎥=⎢⎥⎢⎥ ⎢⎥⎢⎥- - 0 ⎢⎥⎣⎦ Jacobi 迭代法的分量形式如下1(1)()()111(),j n i i i jj jm m jm m m m j jj xb a x a x a -+==+=--∑∑1,2,,;0,1,2,.j n i = =3.Gauss-Seidel 迭代容易看出,在Jacobi 迭代法中,每次迭代用的是前一次迭代的全部分量()(1,2,,)i jx j n = .实际上,在计算(1)i j x +时,最新的分量(1)(1)(1)121,,,i i i j x x x +++- 已经算出,但没有被利用.事实上,如果Jacobi 迭代收敛,最新算出的分量一般都比前一次旧的分量更加逼近精确解,因此,若在求(1)i j x+时,利用刚刚计算出的新分量(1)(1)(1)121,,,i i i j x x x+++- ,对Jacobi 迭代加以修改,可得迭代公式1(1)(1)()111(),j ni i i jj jm m jm m m m j jj xb a x a x a -++==+=--∑∑1,2,,;0,1,2,.j n i = =矩阵形式(1)1()1()(),0,1,2,.i i x D L Ux D L b i +--=-++-+=1()G B D L U -=--+注:(1)两种迭代法均收敛时,Gauss-Seidt 迭代收敛速度更快一些.(2)但也有这样的方程组,对Jacobi 迭代法收敛,而对Gauss-Seidel 迭代法却是发散的. 【例2.4】 分别用Jacobi 迭代法和Gauss-Seidel 迭代法求解下面的方程组121232342,46,4 2.x x x x x x x ⎧- =⎪-+-=⎨⎪-+=⎩初始猜值取0(0,0,0)x =. 【解】 Jacobi 迭代公式为(1)()12(1)()()213(1)()321(2),41(6),0,1,2,41(2),4i i i i i i i x x x x x i x x +++⎧=+⎪⎪⎪=++=⎨⎪⎪=+⎪⎩迭代计算4次的结果如下 (1)(2)(3)(4)(0.5,1.5,0.5),(0.875,1.75,0.875),(0.938,1.938,0.938),(0.984,1.969,0.984).T T T T x x x x ====Gauss-Seidel 迭代公式为(1)()12(1)(1)()213(1)(1)321(2),41(6),0,1,2,41(2),4i i i i i i i x x x x x i x x +++++⎧=+⎪⎪⎪=++=⎨⎪⎪=+⎪⎩迭代计算4次的结果如下(1)(2)(3)(4)(0.5,1.625,0.9063),(0.9063,1.9532,0.9883),(0.9883,2.0,0.9985),(0.9985,1.999,0.9998).T T T T x x x x ====从这个例子可以看到,两种迭代法作出的向量序列(){}i x 逐步逼近方程组的精确解*(1,2,1)T x =,而且Gauss-Seidel 迭代法收敛速度较快.一般情况下,当这两种迭代法均收敛时,Gauss-Seidt 迭代收敛速度更3.超松弛迭代法为了加快迭代的收敛速度,可将Gauss-Seidel 迭代公式改写成1(1)()(1)()11(),j ni i i i jjj jm m jm m m m jjj xx b a x a x a -++===+--∑∑ 1,2,,;0,1,2,.j n i = =并记1(1)(1)()11(),j ni i i jj jm m jm m m m jjj rb a x a x a -++===--∑∑称 (1)i j r + 为 1i + 步迭代的第 j 个分量的误差向量.当迭代收敛时,显然有所有的误差向量(1)0(),1,2,,.i j r i j n +→→∞=为了获得更快的迭代公式,引入因子R ω∈,对误差向量 (1)i j r + 加以修正,得超松弛迭代法(简称SOR 方法)(1)()(1),0,1,2,.i i i j j j x x r i ω++=+ =即1(1)()(1)()1(),j ni i i i jjj jm mjm m m m jjjxx b a xa x a ω-++===+--∑∑1,2,,;0,1,2,.j n i = =适当选取因子ω,可望比Gauss-Seidel 迭代法收敛得更快.称ω为松弛因子.特别当1ω=时,SOR 方法就是Gauss-Seidel 迭代法.写成矩阵向量形式(1)1()1()[(1)](),j i x D L D U x D L b ωωωωω+--=+--++0,1,2,.i =迭代矩阵为1()[(1)].B D L D U ωωωω-=+--实际计算时,大部分是由计算经验或通过试算法来确定opt ω的近似值.所谓试算法就是从同一初始向量出发,取不同的松驰因子ω迭代相同次数(注意:迭代次数不应太少),然后比较其相应的误差向量()()i i r b Ax =-(或()(1)i i x x --),并取使其范数最小的松弛因子ω作为最佳松弛因子opt ω的近似值.实践证明,此方法虽然简单,但往往是行之有效的. 4.迭代收敛其它判别方法:用迭代法收敛基本定理来判断收敛性时,当n 较大时,迭代矩阵的谱半径计算比较困难,因此,人们试图建立直接利用矩阵元素的条件来判别迭代法的收敛定理. (1) 若方程组Ax b =中的系数矩阵A 是对称正定阵,则 Gauss-Seidel 迭代法收敛. 对于SOR 方法,当02ω<< 时迭代收敛(2)若A 为严格对角占优阵,则解方程组 Ax b = 的Jacobi 迭代法,Gauss -Seidel 迭代法均收敛. 对于SOR 方法,当01ω<< 时迭代收敛.【例2.5】 设线性方程组为121221,32,x x x x ⎧+=-⎪⎨+=⎪⎩建立收敛的Jacobi 迭代公式和Gauss -Seidel 迭代公式. 【解】 对方程组直接建立迭代公式,其Jacobi 迭代矩阵为0230J B -⎡⎤=⎢⎥- ⎣⎦,显见谱半径()1J B ρ=>,故Jacobi 迭代公式发散.同理Gauss -Seidel 迭代矩阵为0206G B -⎡⎤=⎢⎥ ⎣⎦,谱半径()61G B ρ=>,故Gauss -Seidel 选代公式也发散. 若交换原方程组两个方程的次序,得一等价方程组121232,21,x x x x ⎧+=⎪⎨+=-⎪⎩其系数矩阵显然对角占优,故对这一等价方程组建立的Jacobi 迭代公式,Gauss -Seidel 迭代公式皆收敛. (3)SOR 方法收敛的必要条件是 02ω<<【定理2.5】 如果A 是对称正定阵,且02ω<<,则解Ax b =的SOR 方法收敛.注:当(0,2)ω∈ 时,并不是对任意类型的矩阵A ,解线性方程组Ax b =的SOR 方法都是收敛的.当SOR 方法收敛时,通常希望选择一个最佳的值opt ω使SOR 方法的收敛速度最快.然而遗憾的是,目前尚无确定最佳超松弛因子opt ω的一般理论结果.实际计算时,大部分是由计算经验或通过试算法来确定opt ω的近似值.所谓试算法就是从同一初始向量出发,取不同的松驰因子ω迭代相同次数(注意:迭代次数不应太少),然后比较其相应的误差向量()()i i r b Ax =-(或()(1)i i x x --),并取使其范数最小的松弛因子ω作为最佳松弛因子opt ω的近似值.实践证明,此方法虽然简单,但往往是行之有效的.【例2.6】 求解线性方程组Ax b =,其中10.3000900.308980.30009100.4669110.274710.30898A - -- -0.46691 0= - -- 00.274711(5.32088,6.07624,8.80455,2.67600).T b ⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥ - ⎣⎦ =-分别利用Jacobi 迭代法,Gauss -Seidel 迭代法,SOR 迭代法求解. 【解】其结果列入下表中,方程组精确解(五位有效数字)为*(8.4877,6.4275, 4.7028,4.0066).T x =-Jacobi 迭代法计算结果i()1i x()2i x ()3i x ()4i x ()2||||i r0 012.3095 1 5.3209 6.0762 -8.8046 2.6760 5.3609 27.97113.5621 -5.2324 1.90143.631820 8.4872 6.4263 -4.7035 4.0041 0.0041 218.48606.4271 -4.7050 4.0063 0.0028Gauss-Seidel 迭代法计算结果i()1i x()2i x()3i x()4i x()2||||i r0 012.3095 1 5.3209 7.6730 -5.2220 2.8855 3.6202 28.51506.1933 -5.1201 3.90040.49098 8.4832 6.4228 -4.7064 4.0043 0.0078 98.48556.4252-4.70554.00550.0038SOR 迭代法计算结果(1.16ω=)i()1i x()2i x()3i x()4i x()2||||i r0 012.3095 1 6.1722 9.1970 -5.2320 3.6492 3.6659 29.69416.1177 -4.8999 4.43351.33136 8.4842 6.4253 -4.7005 4.4047 0.0051 78.48686.4288-4.70314.00650.0016计算结果表明,若求出精确到小数点后两位的近似解,Jacobi 迭代法需要21次,Gauss -Seidel 迭代法需要9次,而SOR 迭代法(选松弛因子 1.16ω=)仅需要7次,起到加速作用.5.误差分析 【定理2.6】设 *x 是方程 Ax b = 的惟一解,v ⋅ 是某一种向量范数,若对应的迭代矩阵其范数1v B <,则迭代法(1)(),0,1,2,.i i xBx k i +=+ = 收敛,且产生向量序列(){}i x 满足()*()(1)||||||||||||1||||i i i vv vvB x x x x B --≤--()*(1)(0)||||||||||||1||||i i vv vvB x x x x B -≤--【证明】 由迭代收敛基本定理的(3)知,迭代法(1)(),0,1,2,.i i x Bx k i +=+ =收敛到方程的解*x .于是,由迭代公式立即得到(1)*()*(1)()()(1)(),().i i i i i i x x B x x x x B x x ++--=--=-为书写方便把v 范数中v 略去,有估计式(1)*()*||||||||||||,i i x x B x x +-≤⋅-(1)()()(1)||||||||||||.i i i i x x B x x +--≤⋅-再利用向量范数不等式||||||||||||x y x y -≥-于是得第一个不等式()(1)(1)()()*(1)*()*||||||||||||||||||||(1||||)||||,i i i i i i i B x x x x x x x x B x x -++ -≥-≥--- ≥--再反复递推即第二个不等式.注:(1)若事先给出误差精度ε,利用第二个不等式可得到迭代次数的估计(1)(0)(1||||)ln ln ||||||||v v v B i B x x ε⎡⎤->⎢⎥-⎣⎦ (2)在||||v B 不太接近1的情况下,由第一个不等式,可用()(1)||||i i v x x ε--<作为控制迭代终止的条件,并取 ()i x 作为方程组 Ax b = 的近似解.但是在||||v B 很接近1时,此方法并不可靠.一般可取1,2,v =∞或F .【例2.7】 用Jacobi 迭代法解方程组123123123202324,812,231530.x x x x x x x x x ⎧++=⎪++=⎨⎪-+=⎩问Jacobi 迭代是否收敛?若收敛,取(0)(0,0,0)T x =,需要迭代多少次,才能保证各分量的误差绝对值小于610-?【解】 Jacobi 迭代的分量公式为(1)()()123(1)()()213(1)()()3121(2423)201(12),0,1,2,81(3022),15i i i i i i i i i x x x x x x i x x x +++⎧=--⎪⎪⎪=-- =⎨⎪⎪=-+⎪⎩Jacobi 迭代矩阵J B 为130102011088210155J B ⎡⎤ - -⎢⎥⎢⎥⎢⎥=- -⎢⎥⎢⎥⎢⎥- ⎢⎥⎣⎦,由5251||||max ,,1208153J B ∞⎧⎫==<⎨⎬⎩⎭知,Jacobi 迭代收敛. 因设(0)(0,0,0)Tx =,用迭代公式计算一次得(1)(1)(1)12363,, 2.52x x x = = =而(1)(0)|||| 2.x x ∞-=于是有6110(1)13ln ln 13.23i -⎡⎤⋅-⎢⎥>=⎢⎥⎢⎥⎣⎦所以,要保证各分量误差绝对值小于610-,需要迭代14次.【例2.8】 用Gauss -Seidel 迭代法解例2.11中的方程组,问迭代是否收敛?若收敛,取(0)(0,0,0)Tx =,需要迭代多少次,才能保证各分量误差的绝对值小于610-?【解】 Gauss -Seidel 迭代矩阵G B 为102403601()03025524000G B D L U - - ⎡⎤⎢⎥=-+= -⎢⎥⎢⎥ 38 -3⎣⎦显然1||||14G B =<,所以迭代收敛. Gauss -Seidel 迭代分量公式为(1)()()123(1)(1)()213(1)(1)(1)3121(2423),201(12),0,1,2,81(3022),15i i i i i i i i i x x x x x x i x x x ++++++⎧=--⎪⎪⎪=-- =⎨⎪⎪=-+⎪⎩因取(0)(0,0,0)T x =,故迭代一次得(1)(1)(1)1231.2, 1.35, 2.11x x x = = =于是有(1)(0)|||| 2.11x x ∞-=,计算得6110(1)14ln ln 10.2.114i -⎡⎤⋅-⎢⎥>=⎢⎥⎢⎥⎣⎦所在,要保证各分量误差绝对值小于610-,需要迭代11次.。
实验三 高斯消去法和三角分解法1
实验报告实验三 高斯消去法与矩阵的三角分解一、实验目的1、掌握列主元素消去法,并且能够用MATLAB 编写相关程序,实现高斯消去法的求解。
2、能够用矩阵理论理解与研究高斯消去法,通过对矩阵的初等变换实现高斯消去法。
3、学会矩阵的三角分解,并且能够用MATLAB 编写相关程序,实现矩阵的三角分解,解方程组。
二、上机内容⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡2822171310871234567112345611123451111234111112311111121111111764321x x x x x x1、用列主元素高斯消去法求解方程组。
2、用列主元消去法求解方程组(实现PA=LU) 要求输出: (1)计算解X;(2)L,U;(3)正整型数组IP(i),(i=1,···,n) (记录主行信息)。
三、实验原理1、列主元素消去法用高斯消去法求解方程组时,为了减小误差,在消去的过程中要避免用绝对值较小的主元素。
因此在高斯消去法的每一步应该在系数矩阵货消去后的低阶矩阵中选取绝对值较大的元素作为主元素,保持|m ik |<=1,以减小计算过程中的舍入误差对计算解的影响。
此方法为完全主元素消去法。
完全主元素消去法在选主元素时花费一定的计算机时间,因此实际计算中常用列主元消去法。
列主元消去法在每次选主元时,仅依次按列选取绝对值最大的元素作为主元素,且仅交换两行,再进行消元计算。
装订 线第k步计算如下:对于k=1,2,…,n-1(1)按列选主元:即确定t使(2)如果t≠k,则交换[A,b]第t行与第k行元素。
(3)消元计算(4)回代求解计算流程图回代求解 b=b/a (当a nn ≠0)b ←(b -∑a x )/adet=a nn *det输出计算解及行列式及detk=1,2,…,n-1输入n ,A,b,εdet=1按列主元|a i(k),k |=max|a ik |C 0=a i(k),k换行 a ik a i(k)j(j=k,…n ) b k b j(k), 消元计算 (i=k+1,…,n ) a ik=a ik -a kk *m ik a ij=a ij -a kj *m ik (j=k+1,…,n )|C 0|<εi k =kdet=a kk det否否是是k<=n-1输出det(A)=0停机停机2. 矩阵的三角分解法 (1)定理设 n n R A ⨯∈ 。
常见的线性代数求解方法
常见的线性代数求解方法
1.列主元消去法
列主元消去法是一种经典的求解线性方程组的方法。
它通过将
方程组转化为上三角矩阵的形式来求解。
这个方法的关键在于选取
主元的策略。
一种常见的选取主元的策略是选择当前列中绝对值最
大的元素作为主元,然后进行消去操作,直到将矩阵转化为上三角
矩阵。
2.高斯-约当消去法
高斯-约当消去法是另一种常见的线性方程组求解方法。
它通
过消去矩阵的下三角部分来将线性方程组转化为上三角矩阵的形式。
这个方法也需要选择主元,常见的选择策略是选取当前行中绝对值
最大的元素作为主元,然后进行消去操作。
3.LU分解法
LU分解法是将矩阵分解为一对矩阵的乘积的方法。
这个方法的思想是先将矩阵分解为一个下三角矩阵和一个上三角矩阵,然后通过求解上三角矩阵和下三角矩阵的两个方程组来求解原始的线性方程组。
4.Jacobi迭代法
Jacobi迭代法是一种迭代求解线性方程组的方法。
它通过将原始的线性方程组转化为一个对角矩阵和另一个矩阵的乘积的形式,然后通过迭代求解这个对角矩阵和另一个矩阵的方程组来逼近线性方程组的解。
5.Gauss-Seidel迭代法
Gauss-Seidel迭代法是另一种迭代求解线性方程组的方法。
它与Jacobi迭代法类似,但是在每一次迭代中,它使用前一次迭代得到的部分解来更新当前的解。
这个方法通常比Jacobi迭代法收敛得更快。
以上是一些常见的线性代数求解方法。
每种方法都有其特点和适用范围,我们可以根据具体情况选择合适的方法来求解线性方程组的问题。
线性方程组的几种求解方法
线性方程组的几种求解方法1.高斯消元法高斯消元法是求解线性方程组的一种常用方法。
该方法的基本思想是通过对方程组进行一系列简化操作,使得方程组的解易于求得。
首先将方程组表示为增广矩阵,然后通过一系列的行变换将增广矩阵化为行简化阶梯形,最后通过回代求解出方程组的解。
2.列主元高斯消元法列主元高斯消元法是在高斯消元法的基础上进行改进的方法。
在该方法中,每次选取主元时不再仅仅选择当前列的第一个非零元素,而是从当前列中选取绝对值最大的元素作为主元。
通过选取列主元,可以避免数值稳定性问题,提高计算精度。
3.LU分解法LU分解法是一种将线性方程组的系数矩阵分解为一个下三角矩阵L 和一个上三角矩阵U的方法。
首先进行列主元高斯消元法得到行阶梯形矩阵,然后对行阶梯形矩阵进行进一步的操作,得到L和U。
最后通过回代求解出方程组的解。
4.追赶法(三角分解法)追赶法也称为三角分解法,适用于系数矩阵是对角占优的三对角矩阵的线性方程组。
追赶法是一种直接求解法,将系数矩阵分解为一个下三角矩阵L和一个上三角矩阵U,然后通过简单的代数运算即可求得方程组的解。
5.雅可比迭代法雅可比迭代法是一种迭代法,适用于对称正定矩阵的线性方程组。
该方法的基本思想是通过不断迭代求解出方程组的解。
首先将方程组表示为x=Bx+f的形式,然后通过迭代计算不断逼近x的解。
6.高斯-赛德尔迭代法高斯-赛德尔迭代法是雅可比迭代法的改进方法。
该方法在每一次迭代时,使用已经更新的解来计算新的解。
相比于雅可比迭代法,高斯-赛德尔迭代法的收敛速度更快。
7.松弛因子迭代法松弛因子迭代法是一种对高斯-赛德尔迭代法的改进方法。
该方法在每一次迭代时,通过引入松弛因子来调节新解与旧解之间的关系。
可以通过选择合适的松弛因子来加快迭代速度。
以上是一些常用的线性方程组求解方法,不同的方法适用于不同类型的线性方程组。
在实际应用中,根据问题的特点和要求选择合适的求解方法可以提高计算的效率和精度。
用直接三角分解法解线性方程组
l21 a21 u11 2 1 2,l31 a31 u11 3 1 3, (2)r 2,u2i a2i l21u1i ,(i 2,3),
则 u22 a22 l u21 12 5 2 4 3, u23 a23 l21u13 8 2 7 6, l32 (a32 l31u12 ) / u22 2,
l 21 l n1
1 ln2
1
u22 u2n unn
Ax
b的
计
算
公
式
(
步
骤
)
:
1
u11 u12 u1n
1.分解计算
A aij
(1) u1i a1i, li1 ai1 / u11(i 2, , n)
(2)r 2,3, , n
l 21 l n1
1 ln2
换行
2 1 4
0 0 2
0 0 0
3 1 1
0 2 3
消元
2 1 4
0 0 0
0 0 2
3 1 1
3 1 1 0 1
3 1 1 0 1
换行
4 1 2
0 0 0
2 0 0
1 1 3
1 2 0
消元
4 1 2
0 0 0
2 0 0
1 1
1 0
2 6
3 0
4 12
于0,对非奇异矩阵A,若a11 0 ,则可以交换两行元素,此交换也 可以用置换阵与A相乘表示,因此有以下的PLU分解。
2、非奇异方阵的PLU分解
定理11 设n阶方阵A为非奇异矩阵,则存在n阶置矩阵P,n阶 单位下三角方阵L和n阶上三角方阵U使得PA=LU,此分解称为PLU
分解。
注:在实际计算时,把求LU分解与求置换阵P穿插进行。
3解线性方程组的直接法习题+答案
2 1 2 1 2
1 5 2 3 5
1
3
2
3
5
1 0 0
2 1 1
得
A
LU
,其中 L
1 2
1
0
,
U
0
5 2
3
2
1
3
1
0
0
3
2 5
姓名
第三章 线性方程组的直接解法
学号
班级
习题主要考察点:高斯消去法,LU 分解法,平方根法和追赶法解线性方程组。
要点:(1)利用列主元高斯消去法求解线性方程组
(2)矩阵的 Doolittle 分解
(3)利用系数矩阵的 Doolittle 分解求解线性方程组
例 1 用列主元消元法的方程组
2
x
1
3 x1
4 0 0
5 7
3 1 22 12 6
15
7
2
31
4 5 7 15 4 5 7 15
0 12 6 31 0 12 6 31
主元 0
3
1
7
消去
0
0
1
3
2 2 2
4 8
得等价的线性方程组为:
1 2 3 x1 2 2 7 2 x2 3 4 8 4 x 3 0
数值分析 第二章 学习小结
第2章线性方程组的解法--------学习小结本章学习体会本章主要学习的是线性方程组的解法。
而我们则主要学习了高斯消去法、直接三角分解法以及迭代法三种方法。
这三种方法的优缺点以及适用范围各有不同。
高斯消去法中,我们又学习了顺序高斯消去法以及列主元素高斯消去法。
顺序高斯消去法可以得到方程组的精确解,但要求系数矩阵的主对角线元素不为零,而且该方法的数值稳定性没有保证。
但列主元素高斯消去法因为方程顺序的调整,其有较好的数值稳定性。
直接三角分解法中,我们主要学习了Doolitte分解法与Crout分解法。
其思想主要是:令系数矩阵A=UL,其中L为下三角矩阵,U是上三角矩阵,为求AX=b 的解,则引进Ly=b,Ux=y 两个方程,以求X得解向量。
这种方法计算量较小,但是条件苛刻,且不具有数值稳定性。
迭代法(逐次逼近法)是从一个初始向量出发,按照一定的计算格式,构造一个向量的无穷序列,其极限才是所求问题的精确解,只经过有限次运算得不到精确解。
该方法要求迭代收敛,而且只经过有限次迭代,减少了运算次数,但是该方法无法得到方程组的精确解。
二、本章知识梳理针对解线性方程组,求解线性方程组的方法可分为两大类:直接法和迭代法,直接法(精确法):指在没有舍入误差的情况下经过有限次运算就能得到精确解。
迭代法(逐次逼近法):从一个初始向量出发,按照一定的计算格式,构造一个向量的无穷序列,其极限才是所求问题的精确解,只经过有限次运算得不到精确解。
我们以前用的是克莱姆法则,对于计算机来说,这种方法运算量比较大,因此我们学习了几种减少运算次数的方法,有高斯消去法、直接三角分解法,同时针对病态方程组,也提出了几种不同的解法。
Gauss消去法Gauss消去法由消元和回代两个过程组成,消元过程是指针对方程组的增广矩阵,做有限次初等行变化,使它系数矩阵变为上三角矩阵。
顺序Gauss消去法消元过程:对于K=1,2,3…,n-1执行如果,则算法失效,停止计算;否则转(2)对于计算回代过程:综上:顺序Gauss消去法的数值稳定性是没有保证的。
4-线性方程组的解法
17
定理 1 矩阵 A 可以三角分解的条件如下:
1. 若矩阵 A 的所有顺序主子式不等于零; 2. 若矩阵 A 对称正定; 3. 若矩阵 A 严格对角占优,即:
akk akj , k 1, 2, n 。
j k
18
2 2 1 A 4 5 4 例 3 已知矩阵 ,检验 A 是否满足三角分解的条件, 2 4 3
n n n n a11 a1 a b k 1n 1 n n n akk akn bk n n ann bn
7
消元公式:
(0) aij aij , bi(0) bi , ( i , j 1, 2, ..., n) For k 1, 2, ..., n 1 (k ) ( k 1) ( k 1) aij aij lik akj b( k ) b( k 1) l b( k 1) i i ik k ( k 1) ( k 1) akk ; i , j k 1, ..., n lik aik
利用增广矩阵的初等行变换法表示为:
1 1 2 2 1 1 2 2 1 1 2 2 2 1 1 2 1 3 2 1 3 2 A b 4 1 2 1 3 6 7 3 1
k 1
1
ai1 lik uk1 li1u11 ,
k 1
1
即: li1 ai1 u11 i 2, 3,, n .
这是 U 的第一行和 L 的第一列。
22
设: U 的前 m 1 行和 L 前 m 1 列均已算出,那么:
amj lmk ukj lmk ukj lmmumj ,
线性代数方程组的解法
线性代数方程组的解法关键词:线性代数方程组;高斯消元法;列主元消元法;三角分解法;杜立特尔分解法;迭代法;雅可比迭代法;高斯-赛德尔迭代法1引言目前,解线性代数方程组在计算机上常用的的方法大致把它分为两类:“直接法”与“迭代法”.在线性代数中曾指出阶线性代数方程组有唯一的解,并且可以用克拉默法则求方程组的解,初次看来问题已经解决,但从使用效果看并不是这样的.因为求阶线性代数方程组,如果用克拉默法则,需要计算个阶行列式,每个阶行列式为项之和,每项又是个元素的乘积,所以计算中仅乘法次数就高达次,当较大时,它的计算量是非常惊人的.因为现在所碰到的很多问题都需要很大的计算量,故需要好用的算法来求解.先来回顾一下回代过程和迭代过程.(1)是一个三角形方程组,当有唯一解时,可以用反推的方式求解,也就是先从第个方程解得, (2)然后代入第个方程,可得到, (3)如此继续下去,假设已得到,, , ,代进第个方程即得的计算, (4)上述求解的过程叫做回代过程.定义1[1] (向量的范数) 若向量的某个实值函数满足1.是非负的,即且的充要条件是 ;2.是齐次的,即 ;3.三角不等式,即对,总是有.那么上向量的范数(或模)就是 .下面给几个最常遇到的向量范数.向量的“1”范数:(5)向量的“2”范数:(6)向量的范数:(7)例1设求 , , .解由式(5),(6)及(7)知.定义2若矩阵的某个实值函数满足1.是非负的,即且的充要条件是 ;2.是齐次的,即 ;3.三角不等式,即对总有;1.矩阵的乘法不等式,即对总有,那么称为上矩阵的范数(或模).表 1是矩阵几个常用算子范数的定义与算式.表 1范数名称记号定义计算公式“1”范数(又名列模)“2”范数(又名谱模)“”范数(又名行模)的极限就是方程组的解向量,这时候在给定允许的误差内,只要适当的大,就可以作为方程组在满足精度要求条件下的近似解.这种求近似解的方法就是解线性方程组的一类基本的迭代解法,其中称为迭代矩阵,公式(9)称迭代公式(或迭代过程),由迭代公式得到的序列叫做迭代序列.如果迭代的序列是收敛的,则称为迭代法收敛;如果迭代的序列是不收敛,则称它是迭代法发散.定理3设 .如果约化主元素,则可以利用高斯消元的方法把方程组约化成三角形方程组来求解,其计算公式如下:(1)消元计算:对依次计算(2)回代计算:3用高斯消元法与列主元消元法解线性代数方程组(重点)!3.1 高斯消元法解方程组用高斯消元的方法求线性代数方程组的解的整个计算过程可分为两个环节,也就是利用按照次序消去未知数的方法,把原来的方程组转化成跟它同解的三角形方程组(这个转化的过程叫消元过程),再通过回代过程求三角形方程组的解,最终得到原来方程组的解.其中按照方程的顺进行消元的高斯消元法,又叫顺序消元法.3.2列主元消元法解方程组列主元消元法实际上是一种行交换的消元法,它跟顺序消元法比较而言,主要特点是在进行第次消元前,不管的值是否等于零,都在子块的第一列中选择一个元,使,并将中的第行元与第行元互相变换(相当于交换同解方程组中的第个方程),然后再进行消元计算得到结果.注:列主元素法的精度虽然稍低于全主元素法[1],但它计算简单,相对比全主元素法它的工作的量大大减少,并且从计算经验和理论分析都可以表明,它与全主元素法同样拥有很好的值稳定性,列主元素法是求解中小型浓密型方程组的最好的方法之一.4用三角分解法解线性代数方程组4.1 矩阵的三角分解定义4把一个阶矩阵分解成两个三角矩阵相乘的形式称为矩阵的三角分解.常见的矩阵三角分解是其中是下三角形的矩阵,是上三角形的矩阵.定理5[1](矩阵三角分解基本定理)设 .若的顺序主子式,那么存在唯一的杜利特尔分解其中是单位下三角形矩阵,为非奇异的上三角形矩阵.如果是单位下三角形的矩阵,是上三角形的矩阵,那么把这种分解法称为杜利特尔分解法,其中杜利特尔分解法是这种三角分解的一种特例,下面主要介绍利用杜利特尔分解法来求方程组的解.4.2 用杜利特尔分解法解线性代数方程组用杜利特尔分解法解方程组的步骤可以把它归纳为(1)实现分解,也就是1.按算式(11)(12)依次计算的第一行元与的第一列元;1.对按算式(13)(14)依次计算的第行元与的第列元.(2)求解三角形方程组,即按算式依次计算 .(3)求解三角形方程组,即按算式依次计算.利用杜利特尔分解法解方程组与高斯消元法是相似的,它重要的优点是:在利用分解,解有相同的系数矩阵的方程组时,用杜利特尔分解法非常方便,只用两个式子就可以得到方程组的解.5用迭代法解线性代数方程组用迭代法求方程组的解,需要考虑迭代过程的收敛性,在下面的讨论中,都假设方程组的系数矩阵的对角阵是不为零的.5.1 用雅可比迭代法解方程组对于一般线性方程组,如果从第个方程解出,就可以把它转化成等价的方程组. (15)从而可以得到对应的迭代公式(16)这就是解一般方程组的分量形式的雅可比(Jacobi)迭代公式.如果把它改成(17)并把系数矩阵表示成(18)其中则可以看出式的左右两端分别是向量和的第个分量,故因为可逆,所以于是就可以得到是雅可比迭代的公式.其中(称为雅可比迭代矩阵), .5.2 用高斯-赛德尔迭代法解方程组高斯-赛德尔迭代法也是常用的迭代法,设线性代数方程组为,则高斯-赛德尔迭代法的迭代公式为(19)其中迭代法(19)就称为高斯-赛德尔迭代法.通过雅可比迭代法类似的途径,就可以得到矩阵的表达式其中(称为高斯-赛德尔迭代矩阵), .高斯-赛德尔迭代法与雅可比迭代法都有算式简单、容易在计算机上实现等优点,但是用计算机来计算时,雅可比迭代法需要两组工作单元用来寄存与的量,而高斯赛-德尔迭代法只需一组工作单元存放或的分量.对于给定的线性方程组,用这两种方法求解可能都收敛或者都不收敛,也可能一个收敛另一个不收敛,两种方法的收敛速度也不一样.5.3 迭代法的收敛条件与误差分析定义6[1]矩阵全部的特征值的模的最大值,叫做矩阵的谱半径,记作 ,即.定理7[1]对任意初始向量迭代过程收敛的充要条件是;当时,越小,那么其收敛的速度是越快的.由定理7可知,用雅可比迭代法求解时,其迭代的过程是收敛的,而用高斯-赛德尔迭代法来求解,其迭代的过程是发散的.在不同条件下,收敛的速度是不同的,对同一矩阵,一种方法是收敛的,一种方法发散.第 7 页。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
列主元高斯消去法和列主元三角分解法解线性方程计算方法实验报告1【课题名称】用列主元高斯消去法和列主元三角分解法解线性方程【目的和意义】高斯消去法是一个古老的求解线性方程组的方法,但由它改进得到的选主元的高斯消去法则是目前计算机上常用的解低阶稠密矩阵方程组的有效方法。
用高斯消去法解线性方程组的基本思想时用矩阵行的初等变换将系数矩阵A 约化为具有简单形式的矩阵(上三角矩阵、单位矩阵等),而三角形方程组则可以直接回带求解用高斯消去法解线性方程组b Ax =(其中A ∈Rn ×n )的计算量为:乘除法运算步骤为32(1)(1)(21)(1)(1)262233n n n n n n n n n n nMD n ----+=+++=+-,加减运算步骤为(1)(21)(1)(1)(1)(25)6226n n n n n n n n n n AS -----+=++=。
相比之下,传统的克莱姆法则则较为繁琐,如求解20阶线性方程组,克莱姆法则大约要19510⨯次乘法,而用高斯消去法只需要3060次乘除法。
在高斯消去法运算的过程中,如果出现abs(A(i,i))等于零或过小的情况,则会导致矩阵元素数量级严重增长和舍入误差的扩散,使得最后的计算结果不可靠,所以目前计算机上常用的解低阶稠密矩阵方程的快速有效的方法时列主元高斯消去法,从而使计算结果更加精确。
2、列主元三角分解法高斯消去法的消去过程,实质上是将A 分解为两个三角矩阵的乘积A=LU ,并求解Ly=b 的过程。
回带过程就是求解上三角方程组Ux=y 。
所以在实际的运算中,矩阵L 和U 可以直接计算出,而不需要任何中间步骤,从而在计算过程中将高斯消去法的步骤进行了进一步的简略,大大提高了运算速度,这就是三角分解法采用选主元的方式与列主元高斯消去法一样,也是为了避免除数过小,从而保证了计算的精确度【计算公式】1、 列主元高斯消去法设有线性方程组Ax=b ,其中设A 为非奇异矩阵。
方程组的增广矩阵为1112112122221[,]nn l a a a a b aa ab ⎡⎤⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎢⎥a b LL M L LM MM M M M M M M第1步(k=1):首先在A 的第一列中选取绝对值最大的元素1l a ,作为第一步的主元素:然后交换(A ,b )的第1行与第l 行元素,再进行消元计算。
设列主元素消去法已经完成第1步到第k-1步的按列选主元,交换两行,消元计算得到与原方程组等价的方程组 A(k)x=b(k)111max 0l i i na a ≤≤=≠(1)(1)(1)(1)(1)1112111(2)(2)(2)(2)22222()(()1)()()()()()1,1()(,)()[,][,] k k kk nkknkn k k k k k kk kn k k k k n k k k n nn a a a a b a a a b a a b a b b a a a +++⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥→=⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦A b A b L M LM OM M M LM M M M MMM L第k 步计算如下: 对于k=1,2,…,n-1 (1)按列选主元:即确定t 使(2)如果t ≠k ,则交换[A ,b]第t 行与第k 行元素。
(3)消元计算消元乘数mik 满足:(4)回代求解()()max 0k k tkikk i na a≤≤=≠,(1,,)ikik ik kka a m i k n a ←=-=+L , (,1,,), (1,,)ijij ik kj i i ik k a a m a i j k n b b m b i k n ←+=+⎧⎨←+=+⎩L L ⎪⎪⎩⎪⎪⎨⎧--=-←←∑+=)1,,2,1(,)(1Λn n i a x a b x a b x ii n i j j ij i i nnn n2、 列主元三角分解法 对方程组的增广矩阵 经过k-1步分解后,可变成如下形式:第k 步分解,为了避免用绝对值很小的数kku 作除数,引进量1111 (,1,,;1,2,,) ()/ (1,2,,;1,2,,)k kj kj km mj m k ik ik im mk kkm u a l u j k k n k n l a l u u i k k n k n -=-=⎧=-=+=⎪⎪⎨⎪=-=++=⎪⎩∑∑L L L L11(,1,,)k i ik im mk m s a l u i k k n -==-=+∑L ,于是有kku =ks 。
如果 ,则将矩阵的第t 行与第k 行元素互换,将(i ,j )位置的新元素仍记为jjl 或jja ,然后再做第k 步分解,这时[,]A A b =11121,11111222,122221,11,1,1,211,11,2121,112,112,1k k k k k k kj n k k j n k k k i i i k n n kkkj kn k ik ij in i nknjk k k j k n n nnk k n a a a b A a u u u u u u y l l l l l l l l l l l u u u u u y u u u u y a a b a a b l a -------------⎡→⎣L L L L L L M M M LM M M L L M M L MM M L L M M M M M L L MM L LL M M M L⎤⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎦max tik i ns s ≤≤=【列主元高斯消去法程序流程图】【列主元高斯消去法Matlab 主程序】function()/ 1,2,,)1 (1,2,,),kkk k t ik i k iku s s s l s s i k k n l i k k n ===++≤=++L L 即交换前的,(且x=gauss1(A,b,c) %列主元法高斯消去法解线性方程Ax=bif(length(A)~=length(b)) %判断输入的方程组是否有误disp('输入方程有误!')return;enddisp('原方程为AX=b:') %显示方程组Abdisp('------------------------')n=length(A);fork=1:n-1 %找列主元[p,q]=max(abs(A(k:n,k))); %找出第k列中的最大值,其下标为[p,q]q=q+k-1; %q在A(k:n,k)中的行号转换为在A中的行号if abs(p)<cdisp('列元素太小,det(A)≈0');break;elseif q>ktemp1=A(k,:);%列主元所在行不是当前行,将当前行与列主A(k,:)=A(q,:);元所在行交换(包括b) A(q,:)=temp1;temp2=b(k,:);b(k,:)=b(q,:);b(q,:)=temp2;end%消元for i=k+1:nm(i,k)=A(i,k)/A(k,k); %A(k, k)将A(i,k)消为0所乘系数A(i,k:n)=A(i,k:n)-m(i,k)*A(k,k:n); %第i行消元处理b(i)=b(i)-m(i,k)*b(k); %b消元处理endenddisp('消元后所得到的上三角阵是')A %显示消元后的系数矩阵b(n)=b(n)/A(n,n);%回代求解for i=n-1:-1:1b(i)=(b(i)-sum(A(i,i+1:n)*b(i+1:n)))/A(i, i);endclear x;disp('AX=b的解x是')x=b;【调用函数解题】【列主元三角分解法程序流程图】【列主元三角分解法Matlab主程序】①自己编的程序:function x=PLU(A,b,eps) %定义函数列主元三角分解法函数if (length(A)~=length(b)) %判断输入的方程组是否有误 disp('输入方程有误!')return;enddisp('原方程为AX=b:') %显示方程组Abdisp('------------------------')n=length(A);A=[A b]; %将A与b合并,得到增广矩阵for r=1:nif r==1for i=1:n[c d]=max(abs(A(:,1))); %选取最大列向量,并做行交换 if c<=eps %最大值小于e,主元太小,程序结束break;elseendd=d+1-1;p=A(1,:);A(1,:)=A(d,:);A(d,:)=p;A(1,i)=A(1,i);endA(1,2:n)=A(1,2:n);A(2:n,1)=A(2:n,1)/A(1,1); %求u(1,i)elseu(r,r)=A(r,r)-A(r,1:r-1)*A(1:r-1,r); %按照方程求取u(r,i) if abs(u(r,r))<=eps %如果u(r,r)小于e,则交换行p=A(r,:);A(r,:)=A(r+1,:);A(r+1,:)=p;elseendfor i=r:nA(r,i)=A(r,i)-A(r,1:r-1)*A(1:r-1,i); %根据公式求解,并把结果存在矩阵A中endfor i=r+1:nA(i,r)=(A(i,r)-A(i,1:r-1)*A(1:r-1,r))/A(r,r); %根据公式求解,并把结果存在矩阵A中endendendy(1)=A(1,n+1);for i=2:nh=0;for k=1:i-1h=h+A(i,k)*y(k);endy(i)=A(i,n+1)-h; %根据公式求解y(i)endx(n)=y(n)/A(n,n);for i=n-1:-1:1h=0;for k=i+1:nh=h+A(i,k)*x(k);endx(i)=(y(i)-h)/A(i,i); %根据公式求解x(i)endAdisp('AX=b的解x是')x=x'; %输出方程的解②可直接得到P,L,U并解出方程解的的程序(查阅资料得子函数PLU1,其作用是将矩阵A分解成L乘以U的形式。
PLU2为调用PLU1解题的程序,是自己编的)(Ⅰ).function [l,u,p]=PLU1(A) %定义子函数,其功能为列主元三角分解系数矩阵A[m,n]=size(A); %判断系数矩阵是否为方阵if m~=nerror('矩阵不是方阵')returnendif det(A)==0 %判断系数矩阵能否被三角分解error('矩阵不能被三角分解')endu=A;p=eye(m);l=eye(m); %将系数矩阵三角分解,分别求出P,L,Ufor i=1:mfor j=i:mt(j)=u(j,i);for k=1:i-1t(j)=t(j)-u(j,k)*u(k,i);endenda=i;b=abs(t(i));for j=i+1:mif b<abs(t(j))b=abs(t(j));a=j;endendif a~=ifor j=1:mc=u(i,j);u(i,j)=u(a,j);u(a,j)=c;endfor j=1:mc=p(i,j);p(i,j)=p(a,j);p(a,j)=c;endc=t(a);t(a)=t(i);t(i)=c;endu(i,i)=t(i);for j=i+1:mu(j,i)=t(j)/t(i);endfor j=i+1:mfor k=1:i-1u(i,j)=u(i,j)-u(i,k)*u(k,j);endendendl=tril(u,-1)+eye(m);u=triu(u,0)(Ⅱ).function x=PLU2(A,b) %定义列主元三角分解法的函数[l,u,p]=PLU1(A) %调用PLU分解系数矩阵Am=length(A); %由于A左乘p,故b也要左乘pv=b;for q=1:mb(q)=sum(p(q,1:m)*v(1:m,1));endb(1)=b(1) %求解方程Ly=bfor i=2:1:mb(i)=(b(i)-sum(l(i,1:i-1)*b(1:i-1)));endb(m)=b(m)/u(m,m); %求解方程Ux=yfor i=m-1:-1:1b(i)=(b(i)-sum(u(i,i+1:m)*b(i+1:m)))/u(i,i);endclear x;disp('AX=b的解x是')x=b;【调用函数解题】①②【编程疑难】这是第一次用matlab编程,对matlab的语句还不是非常熟悉,因此在编程过程中,出现了许多错误提示。