5.2 Gauss列主元消去法

合集下载

Gauss列主元素消去法实验

Gauss列主元素消去法实验

Lab06.Gauss 列主元素消去法实验【实验目的和要求】1.使学生深入理解并掌握Gauss 消去法和Gauss 列主元素消去法步骤; 2.通过对Gauss 消去法和Gauss 列主元素消去法的程序设计,以提高学生程序设计的能力;3.对具体问题,分别用Gauss 消去法和Gauss 列主元素消去法求解。

通过对结果的分析比较,使学生感受Gauss 列主元素消去法优点。

【实验内容】1.根据Matlab 语言特点,描述Gauss 消去法和Gauss 列主元素消去法步骤。

2.编写用不选主元的直接三角分解法解线性方程组Ax=b 的M 文件。

要求输出Ax=b 中矩阵A 及向量b ,A=LU 分解的L 与U ,det A 及解向量x 。

3.编写用Gauss 列主元素消去法解线性方程组Ax=b 的M 文件。

要求输出Ax=b 中矩阵A 及向量b 、PA=LU 分解的L 与U 、det A 及解向量x ,交换顺序。

4.给定方程组(1) ⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡=⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡--11134.981.4987.023.116.427.199.103.601.3321x x x(2) ⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡----15900001.582012151********.23107104321x x x x 先用编写的程序计算,再将(1)中的系数3.01改为3.00,0.987改为0.990;将(2)中的系数2.099999改为2.1,5.900001改为9.5,再用Gauss 列主元素消去法解,并将两次计算的结果进行比较。

【实验仪器与软件】1.CPU 主频在1GHz 以上,内存在128Mb 以上的PC ;2.Matlab 6.0及以上版本。

实验讲评:实验成绩:评阅教师:200 年 月 日Lab06.Gauss 列主元素消去法实验第一题:1、算法描述:Ⅰ、Gauss 消去法由书上定理5可知 设Ax=b ,其中A ∈R^(n(1)如果()0(1,2,....,1)k kka k n ≠=-,则可通过高斯消去法将Ax=b 约化为等价的 角形线性方程组,且计算公式为:① 消元计算(k=1,2,….,n-1)()()(1)()()(1)()()/,1,...,,,,1,...,,,1,...,.k k ik ik kk k k k ij ij ik kj k k k iiik k m a a i k n a a m a i j k n b b m b i k n ++==+=-=+=-=+② 回带公式()()()()()1/,()/,1,...,2,1.n n n n nn ni i i i iii j ii j i x b a x ba x a i n =+==-=-∑(2)如果A 为非奇异矩阵,则可通过高斯消去法将方程组Ax=b 约化方程组为上三角矩阵以上消元和回代过程总的乘除法次数为332333nn nn +-≈,加减法次数为32353263nnn n+-≈以上过程就叫高斯消去法。

Gauss消去法和gauss列组消元法

Gauss消去法和gauss列组消元法

一:实验题目:编程实现《计算机数值方法》习题二(p59)的2、3题。

二:实验代码:高斯消去法:#include<iostream>#include<cmath>using namespace std;float x[100];float a[100][100];//定义一个足够大的全局二维数组//高斯消元法void gauss(int m,int n){int i,j,k,p;k=m;p=n;for(i=0;i<m;++i)//找到对比列{for(j=i+1;j<m;++j)//找到要消元的列{if(a[j][i]!=0){// a[j][i]=0;for(int p=i+1;p<n;++p)//找到两列之后进行相减消元{a[j][p]=a[j][p]-a[i][p]*(a[j][i]/a[i][i]);}}}}x[k-1]=a[k-1][p-1]/a[k-1][p-2]; //最后一个解for(i=k-2;i>=0;i--) //其他的解{float total=a[i][p-1];for(j=p-1;j>i;j--){total=total-x[j]*a[i][j];}x[i]=total/a[i][i];}for(i=0;i<k;i++) //把求出来的解一个一个输出cout<<"x"<<i+1<<"="<<x[i]<<" "<<endl;}int main(){int m,n,i,j;/* float **a;cin>>m>>n;a=new float *[n]; //动态数组for(i=0; i<n; i++){a[i]=new float [m];}*/// float x[100];cout<<"请输入行列式的大小"<<endl;cin>>m>>n;cout<<"请输入每行每列的元素"<<endl;for(i=0;i<m;++i){for(j=0;j<n;++j){cin>>a[i][j];}}//cin>>x[i];gauss(m,n);//调用高斯算法system("pause");return 0;}高斯列组元素消去法:#include <iostream>#include <math.h>using namespace std;//列组消去法void gauss2(int **a,float *x,int n){int k,Pr,i,j;float t,total;for(k=0;k<n-1;k++){Pr=k;for(i=k+1;i<n;i++){if(fabs(a[i][k])>fabs(a[Pr][k])) Pr=i;}if(Pr>k)for(j=k;j<n+1;j++){t=a[k][j];a[k][j]=a[Pr][j];a[Pr][j]=t;}for(i=k+1;i<n;i++){t=a[i][k];for(j=k;j<n+1;j++)a[i][j]=a[i][j]-(t*a[k][j])/a[k][k];}}x[n-1]=a[n-1][n]/a[n-1][n-1];for(i=n-2;i>=0;i--){total=a[i][n];for(j=n-1;j>i;j--)total=total-x[j]*a[i][j];x[i]=total/a[i][i];}for(i=0;i<n;i++)cout<<"x"<<i+1<<"="<<x[i]<<" "<<endl; }int main(){int i,j,m,n;int **a;cin>>m>>n;a=new int *[n]; //动态数组for(i=0; i<n; i++)a[i]=new int [m];cout<<"\n请输入方程的系数:"<<endl;for(i=0;i<m;i++)for(j=0;j<n;j++){cin>>a[i][j];}float x[30];gauss2(a,x,m); //a解的数组,m解delete []a;cout<<endl;return 0; }三:实验结果;高斯消去法:高斯列组消去法:。

Guass列选主元消去法和三角分解法

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;}}} 运⾏截图: ⾄此完毕。

Gauss消去法、 矩阵分解

Gauss消去法、 矩阵分解
全主元消去法
(k) max a 定义 k k i , j n i , j .
此时交换 A 和 b 的行及 A 的列,使主元位置的元素 的绝对值具有给出的最大值 k , 然后进行第 k 步消元过程
<< 第14页/共42页 >>
注意:因为有列的交换,因此未知量的
次序有改变,待求解过程结束后必须还原。
x1 x2 2
精确解为 x1 10.000 / 9.999, x2 9.998 / 9.999. 下面我们用三位浮点十进制数求解: (1) 按Gauss逐步消元法
103 0.100 x1 101 0.100 x2 101 0.100 105 0.100 x2 105 0.100
>>
<< 第7页/共42页
(k) ( k 1) aij aij
1) ai(,k k 1
其中
bi( k ) bi( k 1)
a
( k 1) k 1, k 1
( k 1) ak 1 j ,
i, j k ,
n,
1) ai(,kk 1 ( k 1) ak 1, k 1
lk 1,1 l , H k k 2,1 l 1 n,1
( 2) ( 2) ( 2) ( 2) a22 x2 a23 x3 a24 x4 b2 ,
a x3 a x4 b ,
( 3) 33 ( 3) 34 ( 3) 3 ( 3) ( 3) ( 3) a43 x3 a44 x4 b4 .
(3)
其中
( 3) ( 2) ( 2) aij aij li 2 a2 j ,
我们得到

列主元素消去法

列主元素消去法

列主元素消去法列主元素消去法(Gauss-Jordan 消元法)是一种线性代数中常用的消元方法,用于求解线性方程组的解。

这种方法的基本思想是,将线性方程组的增广矩阵通过一系列的初等变换,化为一个阶梯矩阵或行简化阶梯矩阵,从而得到线性方程组的解。

具体步骤如下:构造增广矩阵,即将系数矩阵和常数矩阵组合成一个矩阵。

将增广矩阵转化为一个上三角矩阵(也叫阶梯矩阵)。

反向消元,将阶梯矩阵转化为一个行简化阶梯矩阵。

根据简化矩阵求解方程组。

这种方法的优点是计算简单、容易理解,且可避免误差的积累。

但是,如果矩阵的规模较大,运算量会很大,计算时间较长。

此时可以使用更高效的算法,如LU分解、QR分解等。

假设有一个 $n$ 个未知量和 $n$ 个方程的线性方程组,可以写成矩阵形式如下:$Ax = b$其中,$A$ 是一个 $n \times n$ 的系数矩阵,$x$ 是一个 $n \times 1$ 的未知量向量,$b$ 是一个 $n \times 1$ 的常数向量。

为了求解 $x$,可以将方程组的增广矩阵表示如下:$\begin{bmatrix} a_{11} & a_{12} & a_{13} & \cdots & a_{1n} & b_{1} \ a_{21} & a_{22} & a_{23} & \cdots & a_{2n} & b_{2} \ \vdots & \vdots & \vdots & \ddots & \vdots & \vdots \ a_{n1} & a_{n2} & a_{n3} & \cdots & a_{nn} & b_{n} \end{bmatrix}$ 其中,$a_{ij}$ 表示矩阵的第 $i$ 行第 $j$ 列的元素。

列主元素Gauss消去法Jacobi迭代法原理及计算方法

列主元素Gauss消去法Jacobi迭代法原理及计算方法

一、 列主元素Gauss 消去法、Jacobi 迭代法原理及计算方法1. 列主元素Gauss 消去法:1.1 Gauss 消去法基本原理设有方程组Ax b =,设A 是可逆矩阵。

高斯消去法的基本思想就是将矩阵的初等行变换作用于方程组的增广矩阵[]B A b = ,将其中的A 变换成一个上三角矩阵,然后求解这个三角形方程组。

1.2 列主元Gauss 消去法计算步骤将方程组用增广矩阵[]()(1)ijn n B A b a ⨯+== 表示。

1). 消元过程对1,2,,1k n =-(1) 选主元,找{},1,,k i k k n ∈+ 使得 ,max k i k ik k i na a ≤≤= (2) 如果,0k i k a =,则矩阵A 奇异,程序结束;否则执行(3)。

(3) 如果k i k ≠,则交换第k 行与第k i 行对应元素位置,k kj i j a a ↔,,,1j k n =+ 。

(4) 消元,对,,i k n = ,计算/,ik ik kk l a a =对1,,1j k n =++ ,计算.ij ij ik kj a a l a =-2). 回代过程(1) 若0,nn a =则矩阵奇异,程序结束;否则执行(2)。

(2) ,1/;n n n nn x a a +=对1,,2,1i n =- ,计算,11/n i i n ij j ii j i x a a x a +=+⎛⎫=- ⎪⎝⎭∑2. Jacobi 迭代法2.1 Jacobi 迭代法基本原理Jacobi 迭代法的基本思想是对n 元线性方程组b Ax =,.,n n R b R A ∈∈将其变形为等价方程组f Bx x +=,其中.,,n n n n R x R f R B ∈∈∈⨯B 成为迭代矩阵。

从某一取定的初始向量)0(x 出发,按照一个适当的迭代公式 ,逐次计算出向量f Bx x k k +=+)()1( ( 1,0=k ),使得向量序列}{)(k x 收敛于方程组的精确解.(1)输入1,,,,)0(=k n xb A ε,. (2) )(1,1)0()1(∑≠=-=n j i i j ij i iii x a b a x )1,0(n i = (3)判断 ε≤--≤≤)0()1(10max i i n i x x ,若是,输出1)1(2)1(1,,n x x x ,若否,置1+=k k ,)1()0(i i x x =,)2,1(n i =。

Gauss列主元消去法程序设计

Gauss列主元消去法程序设计

《Gauss列主元消去法》实验报告实验名称:Gauss列主元消去法程序设计成绩:___________专业班级:数学与应用数学1202班姓名:王晓阳学号:28实验日期:2014 年11月10日实验报告日期:2014年11月10日一.实验目的1.学习Gauss消去法的基本思路和迭代步骤.2.学会运用matlab编写高斯消去法和列主元消去法程序,求解线性方程组.3.当()ka绝对值较小时,采用高斯列主元消去法.kk4.培养编程与上机调试能力.二、实验内容用消去法解线性方程组的基本思想是用逐次消去未知数的方法把原线性方程组Ax b=化为与其等价的三角形线性方程组,而求解三角形线性方程组可用回代的方法求解.1.求解一般线性方程组的高斯消去法.(1)消元过程:设()0k kk a ≠,第i 个方程减去第k 个方程的()()/k k ik ik kk m a a =倍,(1,,)i k n =+L ,得到()()11k k A x b ++=.()()()()()()()11,,1,,k k k ij ij ik kj k k k ii ik k a a m a i j k n b b m b ++⎧=-=+⎪⎨=-⎪⎩L 经过n-1次消元,可把方程组()()11A x b =化为上三角方程组()()n n A x b =.(2)回代过程:()()()()()1//,1,,1n n n n nn n i i i i i ij j ii j i x b a x b a x a i n =+⎧=⎪⎛⎫⎨=-=- ⎪⎪⎝⎭⎩∑L 以解如下线性方程组为例测试结果.1212312310773264556x x x x x x x x -=⎧⎪-++=⎨⎪-+=⎩2.列主元消去法由高斯消去法可知,在消元过程中可能出现()0k kk a =的情况,这是消去法将无法进行,即使主元素()0k kk a ≠但很小时,用其作除数,会导致其他元素数量级的严重增长和舍入误差的扩散,最后也使得计算解不可靠.这时就需要选取主元素,假定线性方程组的系数矩阵A 是菲奇异的.(1)消元过程:对于1,2,,1k n =-L ,进行如下步骤:1) 按列选主元,记max pk ik k i na a ≤≤=2) 交换增广阵A 的p,k 两行的元素。

课件:5.2(b) Gauss列主元消去法

课件:5.2(b) Gauss列主元消去法

L L11L21 Ln11为单位下三角矩阵 U A(n)为上三角矩阵
即 且
1
1,1 ln,1
ln1,2 ln,2
ln1,2 ln,3
1 ln,n1
1
a(1) 11
U A(n)
a(1) 12
a(2) 22
a(1) 1n
a(2) 2n
a(n) nn
1 2 3
解: 这个方程组和例1一样,若用Gauss消去法计算会有 小数作除数的现象,若采用换行的技巧,则可避免
108
A (A,b) 1
2
2
3 1
3.712 4.623 2
1.072
5.64
3
3
108 很小,绝对值最大
的列元素为a13 2, 因此1,3行交换
r1 r3
2 1
例2所用的方法是在Gauss消去法的基础上,利用换行 避免小主元作除数,该方法称为Gauss列主元消去法
二、Gauss消元过程与系数矩阵的分解 1.Gauss消去法消元过程的矩阵描述
( A(1) ,b(1) )
a(1) 11
a(1) 21
a(1) 12
a(1) 22
a(1) 1n
a(1) 2n
主元
A (A,b)
0.000100 1
1 1
1 2
l21 10000
0.000100 0
1 1.00 104
1 1.00 104
回代后得到
x1 0.00 , x2 1.00
与精确解相比,该结果相当糟糕 究其原因,在求乘数时用了很小的数0.0001作除数
如果在求解时将1,2行交换,即
A (A,b)
det Ak 0 k 1,2,, n
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

因此 从而
Ln 1 L2 L1 ( A( 1) , b( 1) ) ( A( n ) , b( n ) ) Ln 1 L2 L1 A A( n )
1 1 1 ( n) A L LU L L A 1 2 n1

L L L L 为单位下三角矩阵
(2)

l32 0.629 722 92
(A ,b )
(2)
2 1.072 5.643 3 0.18015 10 0.5 0 0.3176 10 0 0 0 . 186 555 41 10 0 . 685 138 54
( A( 3 ) , b( 3 ) )
L
U
k
Ak LkU k
(i ) det Ak detU k aii i 1
Gauss消去法 可以执行
(i ) aii 0 i 1,2 , , n
det Ak 0 k 1, 2 , , n
定理1. 若n阶方阵A的顺序主子式 Dk det Ak 0,
k 1,2 , , n 1, 则A的LU分解结果A LU存在且唯一
令 则
推广到一般情形
~ ~ 1 ~ L ( Ln 1 L n2 L2 L1 )
PA LU
仍然为单位 下三角矩阵
单位下三角阵与上三角阵的乘积
上述过程称为矩阵 PA的LU分解
综合以上讨论,有 定理2. 若n阶方阵A为非奇异矩阵 ,即det A 0, 则必存在一个排列矩阵 P、一个单位下三角矩阵 L 和一个非奇异上三角矩 阵U , 使得 PA LU
显然若令
1 1 Lk lk 1,k ln , k
1 1
则有
Lk ( A( k ) , b( k ) ) ( A( k 1) , b( k 1) )
k 1,2 ,3, , n 1
三 、
开始
输入A, b, n, EPS
1 k
(一) 流程图
Gauss
列 主 元 消 去 法 的 算 法 设 计
选取主元素P
|P| EPS
换行
消元
k 1 k
F
F
kn
T
输出无解信息
T T
| A(n, n)| EPS
F
停机
输出解 x
回代求解
(二) 自然语言
1. 输入方程组的维数 n
2. 对于k 1,2,n 1
2 r1 r3 1 108
l21 0.5 l31 0.5108
1.072 5.643 3 3.712 4.623 2 2 3 1
( A( 1) , b( 1) )
绝对值最大 不需换行
2 1.072 5.643 3 0 0.3176 10 0.18015 10 0.5 0 0 . 2 10 0 . 3 10 0 . 1 10
解: 这个方程组和例1一样,若用Gauss消去法计算会有 小数作除数的现象,若采用换行的技巧,则可避免
108 A ( A, b) 1 2 2 3 1 3.712 4.623 2 1.072 5.643 3
108 很小, 绝对值最大 的列元素为a13 2 , 因此1,3行交换
L3 I i3 , 3 L2 I i3 , 3 I i3 , 3 I i2 , 2 L1 I i2 , 2 I i3 , 3 I i3 , 3 I i2 , 2 I i1 ,1 A U
~ 设 L2 I i3 , 3 L2 I i3 , 3 ~ L1 I i3 , 3 I i2 , 2 L1 I i2 , 2 I i3 , 3
第二章 解线性方程组的直接法
§ 5.2
列主元Gauss消去法
Gauss列主元消去法 一、Gauss列主元消去法的引入
例1.
用Gauss消去法解线性方程组(用3位十进制浮 点数计算)
0.0001x1 x2 1 x1 x2 2
解: 本方程组的精度较高的解为
x* (1.00010001 ,0.99989999 )T
A LU
该过程称之为 矩阵A的LU分解. 由上述分析不难得到
a11 A ak 1 a n1
k阶顺序主子式
A
a1 k k akk ank
1 a( 1) a( 1) a( 1) a1 n 11 1k 1n (k ) (k ) akn lk 1 1 k kakk a kn l l (n) ann 1 a nk n1 nn
ln ,n 1
1
U A( n )
( 1) ( 1) a12 a1 n (2) (2) a22 a2 n (n) ann

顺序主元
且Leabharlann (i ) a det A det U ii i 1
n
定义1. 不带行交换的Gauss 消去法的消元过程,产生 一个单位下三角矩阵L和一个上三角矩阵U,即
l21 0.0001
回代后得到
x1 1.00 , x2 1.00
这是一个相当不错的结果!
例2.
解线性方程组(用8位十进制尾数的浮点数计算)
108 1 2 2 3 x1 1 3.712 4.623 x2 2 x 3 1.072 5.643 3
2.1 A(k , k ) P
控制条件转移精度 EPS
增广矩阵 ( A, b)的元素aij , i 1,2,, n, j 1,2,, n 1
2.2 对于i k , k 1,, n 如果| A(i , k )| |P| 则 A(i , k ) P, i I 0
仍然为单位 下三角矩阵
P I i3 , 3 I i2 , 2 I i1 ,1

初等矩阵的乘积,称为排列阵
~ ~ P A U L3 L 2 L1 ~ ~ P A U ~ Ln1 L L 2 L1 n 2 ~ ~ 1 ~ PA ( Ln 1 L n2 L2 L1 ) U
Ln1 Iin1 ,n1 L2 I i2 , 2 L1 I i1 ,1 A A( n ) U
上三 角阵
( 4) A L3 I i3 , 3 L2 I i2 , 2 L1 I i1 ,1 A U
例如,当n 4时, 消元过程为
选主元
, 否则转2.5
2.3 如果|P| EPS, 则转到 7(输出无解信息 ).
2.4 对于j k , k 1,, n 1
A( k , j ) w
换行
w A( I 0 , j )
A( I 0 , j ) A(k , j )
2.5 如果|P| EPS, 则转到 7(输出无解信息 ). 2.6 对于i k 1,, n,
用Gauss消去法求解(用3位十进制浮点数计算)
主元
0.000100 A ( A, b) 1
1 1 1 2

l21 10000
1 1 0.000100 4 4 0 1 . 00 10 1 . 00 10
( 1) ( 1) ( 1) b1 a12 x2 a13 x3 0.49105820 x1 ( 1) a11
事实上,方程组的准确解为
x* (0.491058227 ,0.050886075 ,0.367257384 )T
例2所用的方法是在Gauss消去法的基础上,利用换行 避免小主元作除数,该方法称为Gauss列主元消去法
5. 对于k n 1,,2,1
S 0
xi
bn xn ( n ) ann
b
(i ) i
a
j i 1 (i ) ii
行变换相 当于左乘 初等矩阵
由于
a li1 a
(1) i1 (1) 11
i 2,3,, n

1 l21 1 L1 l 1 n1

L1 ( A , b ) ( A , b )
( 1) ( 1) (2) (2)
U A 为上三角矩阵
( n)
1 1 1 2
1 n1

1 1 l21 l l32 31 L l ln 1, 2 n 1,1 l ln , 2 n ,1
( 1) a11
1 ln 1, 2 ln , 3 1
经过回代后可得
(3) b3 0.186 555 41 10 0.367 257 39 x3 ( 3 ) a 33 0.685 138 54
x2
b
(2) 2
a x 0.5 0.18015 10 x3 0.05088607 0.3176 10 a
(2) 23 3 (2) 22
x1 0.00 , x2 1.00
回代后得到
与精确解相比,该结果相当糟糕 究其原因,在求乘数时用了很小的数0.0001作除数
如果在求解时将1,2行交换,即
1 1 2 A ( A, b) 0.000100 1 1
1 2 1 0 1.00 1.00
在定理中,可能注意到 可能存在
Dn det An 0
( n) 即ann 0
这对A的LU分解并不影响
相关文档
最新文档