3.2.2 矩阵的doolittle分解解析
矩阵的Doolittle递归分解算法及符号程序设计

矩阵的Doolittle递归分解算法及符号程序设计
智东杰;智慧来
【期刊名称】《智能系统学报》
【年(卷),期】2007(2)1
【摘要】将矩阵An×n的Doolittle分解推广到Am×n上,并在常规的迭代算法上加以创新,给出了递归的分解算法.在实现算法的过程中,对数据进行了巧妙处理,使中间数据及最终计算结果都具有分数形式,提高了结果的精确度,而且更符合人们阅读的习惯.经过运行测试,算法设计合理,程序运行高效准确.程序是对MathSoft公司的交互式的数学文字软件Mathcad的矩阵分解的数值计算扩充到符号运算.
【总页数】4页(P90-93)
【作者】智东杰;智慧来
【作者单位】河南理工大学,计算机学院,河南,焦作,454150;西华大学,能源与环境学院,四川,成都,610039
【正文语种】中文
【中图分类】TP311.1
【相关文献】
1.方程组系数矩阵的递归分块分解算法的设计实现 [J], 汪先明;孙希平
2.矩阵Doolittle分解的快速算法 [J], 吴光文;黄乡生;胡文龙
3.矩阵的Crout递归分解算法及程序设计 [J], 智慧来;张礼达
4.矩阵的LU并行递归分解算法的设计研究 [J], 黄丽嫦
5.一种采用Householder变换递归实现的复矩阵QR分解算法 [J], 胡冰新;李宁;吕俊
因版权原因,仅展示原文概要,查看原文内容请购买。
编程实现doolittle分解方法解方程组

Doolittle分解方法是一种用于解决线性方程组的数值方法,它可以将一个矩阵分解为一个下三角矩阵和一个上三角矩阵的乘积,从而可以方便地求解线性方程组。
在本文中,我们将介绍Doolittle分解方法的原理和实现过程,并用编程语言实现该方法来解方程组。
一、Doolittle分解方法原理1.1 Doolittle分解方法是一种LU分解的特例,它将一个矩阵A分解为一个下三角矩阵L和一个上三角矩阵U的乘积,即A=LU。
其中,L 的主对角线元素全为1,U的主对角线以上的元素全为0。
这样的分解可以方便地求解线性方程组Ax=b,其中b是一个已知的列向量。
1.2 Doolittle分解方法的具体实现过程是通过高斯消元法来实现的。
将矩阵A分解为一个下三角矩阵L和一个上三角矩阵U,然后通过回代法求解线性方程组Ax=b。
具体来说,我们首先将矩阵A分解为L 和U,然后用L和U的乘积代替原来的矩阵A,将原来的线性方程组Ax=b变为LUx=b,然后通过两次回代法求解线性方程组Ly=b和Ux=y,最终得到线性方程组的解x。
1.3 Doolittle分解方法的优点是可以方便地求解多个方程组,因为一旦矩阵A被分解为L和U,就可以通过多次回代法来求解不同的线性方程组,而不需要重新分解矩阵A。
1.4 Doolittle分解方法的缺点是需要对原始的矩阵A进行分解,这需要一定的计算量,特别是对于比较大的矩阵来说。
Doolittle分解方法在实际应用中往往需要结合其他数值方法来提高求解线性方程组的效率。
二、Doolittle分解方法的实现过程2.1 我们需要定义一个函数来实现Doolittle分解。
该函数的输入是一个矩阵A,输出是矩阵A的下三角矩阵L和上三角矩阵U。
2.2 接下来,我们需要通过高斯消元法来实现Doolittle分解。
具体来说,我们首先对矩阵A进行行变换和列变换,使得矩阵A的主对角线元素非零,然后逐步消去矩阵A的非主对角线元素,得到下三角矩阵L和上三角矩阵U。
doolittle三角分解法的相关原理及概念

doolittle三角分解法的相关原理及概念Doolittle三角分解法是一种常用的数值分析方法,用于解决线性方程组的求解问题。
三角分解法以源自Lanczos二次投影算法的Doolittle分解法为代表,是一种迭代计算最小二乘解的有效方法,其原理在于利用变换,将具有给定系数矩阵的线性方程组转化为一组更简单的三角形方程组。
Doolittle三角分解法包括四个步骤:首先,通过算法将给定的矩阵进行分解,获得两个三角矩阵;其次,通过求解上半三角矩阵来求解未知系数的近似解;然后,使用上半三角矩阵求解出的近似解和下半三角矩阵求解未知系数矩阵;最后,使用求解出的未知系数来求解待定系数矩阵。
Doolittle三角分解法的优势在于其复杂度较低,且有较快的计算速度,能够很好的解决大规模的线性方程组的求解问题。
通常情况下,Doolittle三角分解法的计算复杂度为O(n3),而传统Gauss消元法的复杂度为O(n2),可以看出,Doolittle三角分解法的计算速度的较高。
另外,其精度较高,能够得到更准确的结果。
Doolittle三角分解法可以更好地解决大规模的线性方程组,而在解决小型线性方程组时,通常会使用精度更高的Gauss消元法。
对于规模较大的线性方程组,可以使用改良的Doolittle三角分解法来提高运算的准确度,改进的Doolittle三角分解法能够更好地解决线性方程组的求解问题,可以通过给定不同的改进步骤来提高算法的准确度。
总之,Doolittle三角分解法是一种简单、有效且精确的方法,能够有效地解决大规模的线性方程组的求解问题,其应用非常广泛,被应用在数值分析、优化和机器学习等方面。
同时,Doolittle三角分解法也可以作为其他线性方程组求解算法的基础,为实际应用中的求解提供了可靠的解决方案。
doolittle分解法求解方程组

doolittle分解法求解方程组
Doolittle分解法是一种求解多元一次方程组的数学工具,它把方程组转变为
三角形阵。
它可以确定一个线性方程组的解,而且不需要进行迭代法。
doolittle
分解法也被称为LU分解法,因为它将一个方程组拆分为两种分解法:一种是费马
整体分解法,即上三角阵分解法;另一种是克莱斯勒整体分解法,即下三角阵分解法。
Doolittle分解法依赖实际情况。
如果一个线性方程组有一个解,这种方法便
可以帮助计算出这个解。
同时,这种分解方法可以使方程组更具健壮性,有助于更大限度地计算出方程组的解。
在使用Doolittle分解法求解方程组时,首先将要求解的方程组表示为一个线
性方程组,比如Ax=B,其中A为系数矩阵,B为常数向量,以及x为一个未知向量。
其中,A矩阵将被进行LU分解法法。
接下来,你需要检查矩阵A是否可逆,即求
解Ax=b是否有唯一解。
接着,采用LU分解法,我们可以把矩阵A拆分成上三角阵U和下三角阵L,
即A=LU。
这两个三角阵的乘积是原始矩阵A,这两个拆分的三角阵可以用足够多的
0填充。
接着,我们可以先求解L向量,然后求解U。
最后,将得到的L向量和U
向量求积,得出答案。
总之,Doolittle分解法是一种求解多元一次方程组的有效数学工具,通过将
线性方程拆分成L和U,可以节省计算时间,得到高效的解。
doolittle三角分解法的相关原理及概念

doolittle三角分解法的相关原理及概念doolittle三角分解法是一种数值计算方法,它将一个长方形矩阵分解为三角形矩阵,以求解线性方程组。
在数学和工程学中,三角分解法在求解线性方程组,特别是多元线性回归方程时占有重要地位。
doolittle三角分解法是在20世纪50年代提出来的,是由美国著名数学家James Doolittle发展而来的,它也可以称为LU分解法。
Doolittle三角分解法可以将一个多元连续的矩阵的分解分解成一系列的三角形矩阵,其中下三角矩阵的元素都为1,上三角矩阵元素都为0.矩阵的上三角部分,可以将连续的多元方程组分解为单元方程组,从而使得计算量大大减少,从而提高效率,使得计算结果更加快速可靠。
doolittle三角分解法有以下几个主要特点:首先,其分解方式采用的是自上而下分解,得到的结果是三角矩阵,这样可以大大减少求解方程组的计算量,使求解过程变得更加有效简单。
其次,它可以解决系数矩阵和常数项满秩的线性方程组,并保证解的可靠性。
第三,它有较好的数学性质,它的结果可以保证收敛,因此拥有较快的计算速度,不容易出现收敛问题。
最后,它具有较强的稳定性,即使系数矩阵和常数项中有一定的误差,也可以保证求解出来的解的准确性。
doolittle三角分解法的基本步骤如下:首先,根据系数矩阵的特点,分解出上三角和下三角的两个矩阵。
其次,根据解的唯一性,求解上三角矩阵的变量,即求出上三角矩阵的解。
然后,将下三角矩阵的解和上三角矩阵的解求和,得到最终的解。
最后,依据矩阵的特点,进行矩阵的逆运算,求出线性方程组的最终解。
在数学和工程学中,doolittle三角分解法在求解线性方程组,特别是多元线性回归方程时占有重要地位,它具有较快的计算速度,较好的数学性质,较强的稳定性,是一种极具实用性的方法。
doolittle三角分解法的主要应用有:一是在数值分析中应用,如在求解多项式拟合问题、热力学问题、积分计算等问题中,通过doolittle三角分解法,可以更快速准确地求解问题;二是在线性规划问题中应用,通过doolittle三角分解法可以求解线性规划问题,使该问题变得更具可行性。
杜利特尔分解法

杜利特尔分解法杜利特尔分解法杜利特尔分解法是一种用于线性代数的方法,可以将一个矩阵分解为三个矩阵的乘积。
这种方法可以用于求解线性方程组、计算矩阵的行列式和逆矩阵等问题。
1. 杜利特尔分解法的基本概念杜利特尔分解法是将一个矩阵A分解为下三角矩阵L、对角线元素为1的上三角矩阵U和置换矩阵P的乘积,即A=PLU。
其中,P是一个置换矩阵,它可以用来交换A中的行,使得LU分解更加方便。
L是一个下三角矩阵,它的对角线元素为1,而且其余元素都是0或者负数。
U是一个上三角矩阵,它的对角线元素不一定为1。
2. 杜利特尔分解法的具体步骤杜利特尔分解法可以通过高斯消元法来实现。
下面是具体步骤:(1)首先使用部分主元消去法选择A中最大的元素作为主元,并将该行与第一行交换。
然后使用高斯消元法将第一列除了主元以下所有元素都变成0,得到一个新的矩阵A'。
(2)将A'继续进行部分主元消去法,选择第二列中最大的元素作为主元,并将该列与第二列交换。
然后使用高斯消元法将第二列除了主元以下所有元素都变成0,得到一个新的矩阵A''。
(3)重复上述步骤,直到得到一个三角矩阵U。
同时,在每一次消元过程中,记录下所做的行交换操作,并构造出置换矩阵P。
(4)根据每一次消元过程中所做的操作,可以构造出下三角矩阵L。
具体方法是:对于每一次消元过程中所选的主元i,将L(i,j)设为该主元以下被消去的系数。
对于其他位置,则设为0或者1(对角线上)。
3. 杜利特尔分解法的应用杜利特尔分解法可以用于求解线性方程组、计算矩阵的行列式和逆矩阵等问题。
(1)求解线性方程组:给定一个n×n的系数矩阵A和一个n维常量向量b,要求解Ax=b。
可以通过杜利特尔分解法将A分解为LU形式,并将b转化为相应的常量向量y和z,然后分别解出Ly=z和Ux=y。
这样就得到了线性方程组的解。
(2)计算矩阵的行列式:矩阵的行列式是一个标量,表示矩阵所包含的所有向量所张成的超平面的体积。
矩阵的Doolittle递归分解算法及符号程序设计
A22 = L22 U 22 .
即对 A22 进行 Doolit tle 分解
3 算法求精
由上述推导知 , 若矩阵可进行 Doolit tle 分解 , 使用一次分解就可求出 L 的前 d 行与 U 的前 d 行 , 接下来对 ( m - d) 行 ( n - d) 列矩阵 A′ 22 进行 Doolit 2
1) 由上述公式得到 A 的 Doolit tle 分解算法 for ( k = 0 ; k < m 且 k < n ; k + + ) {for ( j = k ;j < n ;j + + ) r kj ← a kj ;
l kk ← 1; fo r (i = k + 1 ;i < m ;i + + ) lik ← aik / a kk ; fo r (i = k + 1 ;i < m ;i + + ) for ( j = k + 1 ;j < n ;j + + ) aij ← aij - lik u kj ; 矩阵 L 和 U 的其他元素为 0 .
}
2 D ool i tt le 分解递归算法的推导
设 A 是 m 行 n 列的矩阵 , L 是 m 行 p 列矩阵 ,
U 是 p 行 n 列矩阵 , 可以进行 Doolittle 分解 , 则 Am ×n = L m ×p U p ×n , p = min ( m , n) . A11 d ×d A21 ( m- d) ×d L11 d ×d L21 ( md) × d
Doolittle分解
矩阵数值分析实验报告专业信息与计算科学班级学号姓名指导教师Doolittle 分解法一、实验目的在Gauss 消元法中,对于n 阶方程组,应用消去发经过n-1步消元之后,得到一个与Ax=b 等价的代数线性方程组)1()1(--=n n b x A ,而且)1(-n A 为一个上三角矩阵.所以我们想是否能把矩阵A 分解成一个下三角阵与一个上三角阵的乘积 A=LR,其中L 为下三角阵,R 为上三角阵.就变成了两个三角形方程组⎩⎨⎧==yRx b Ly , 的求解问题。
二、算法思想Setp1:利用for 循环求出r[k][j]=a[k][j]-∑-=1k 1p ]kp [r ]kp [l ,l[ik]=(a[ik]-∑-=1k 1p ]ip [r ]ip [l )/r[k][k]。
Step2:y[i]=b[i]-∑-=1i 1k ]k [y ]ik [l ,得出x[i]=(y[i]-∑+=n1i k ]k [x ]ik [r )/r[i][i].三、程序代码#include <stdio.h>#include <stdlib.h>#define N 10 //矩阵大小范围float getmx(float a[N][N], float x[N], int i, int n) {float mx = 0;int r;for(r=i+1; r<n; r++){mx += a[i][r] * x[r];}return mx;}float getmy(float a[N][N], float y[N], int i, int n) {float my = 0;int r;for(r=0; r<n; r++){if(i != r) my += a[i][r] * y[r];}return my;}float getx(float a[N][N], float b[N], float x[N], int i, int n) {float result;if(i==n-1) //计算最后一个x的值result = (float)(b[i]/a[n-1][n-1]);else //计算其他x值(对于公式中的求和部分,需要调用getmx()函数) result = (float)((b[i]-getmx(a,x,i,n))/a[i][i]);return result;}float gety(float a[N][N], float b[N], float y[N], int i, int n) {float result;if(i==0) //计算第一个y的值result = float(b[i]/a[i][i]);else //计算其他y值(对于公式中的求和部分,需要调用getmy()函数) result = float((b[i]-getmy(a,y,i,n))/a[i][i]);return result;}void main(){float l[N][N]={0}; //定义L矩阵float u[N][N]={0}; //定义U矩阵float y[N]={0}; //定义数组Yfloat x[N]={0}; //定义数组Xfloat a[N][N]={{0},{0},{0}}; //定义系数矩阵float b[N]={0}; //定义右端项float sum=0;int i,j,k;int n=0;int flag=1;//用户手工输入矩阵while(flag){printf("请输入系数矩阵的大小:");scanf("%d", &n);if(n>N){printf("矩阵过大!\n");continue;}flag=0;}printf("请输入系数矩阵值:\n");for(i=0; i<n; i++){for(j=0; j<n; j++){printf("a[%d][%d]: ", i, j);scanf("%f", &a[i][j]);}}printf("请输入右端项数组:\n");for(i=0; i<n; i++){printf("b[%d]: ", i);scanf("%f", &b[i]);}/*显示原始矩阵*/printf("原始矩阵:\n");for(i=0; i<n; i++){for(j=0; j<n; j++)printf("%0.3f ",a[i][j]);printf("\n");}printf("\n\n");/*初始化矩阵l*/for(i=0; i<n; i++){for(j=0; j<n; j++){if(i==j) l[i][j] = 1;}}/*开始LU分解*//*第一步:对矩阵U的首行进行计算*/for(i=0; i<n; i++){u[0][i] = (float)(a[0][i]/l[0][0]); }/*第二步:逐步进行LU分解*/for(i=0; i<n; i++){/*对“L列”进行计算*/for(j=i+1; j<n; j++){for(k=0,sum=0; k<n; k++){if(k != i) sum += l[j][k]*u[k][i];}l[j][i] = (float)((a[j][i]-sum)/u[i][i]); }/*对“U行”进行计算*/for(j=i+1; j<n; j++){for(k=0,sum=0; k<n; k++){if(k != i+1) sum += l[i+1][k]*u[k][j]; }u[i+1][j] = (float)((a[i+1][j]-sum));}}/*输出矩阵l*/printf("矩阵L:\n");for(i=0; i<n; i++){for(j=0; j<n; j++){printf("%0.3f ", l[i][j]);}printf("\n");}/*输出矩阵u*/printf("\n矩阵U:\n");for(i=0; i<n; i++){for(j=0; j<n; j++){printf("%0.3f ", u[i][j]);}printf("\n");}/*回代方式计算数组Y*/for(i=0; i<n; i++){y[i] = gety(l,b,y,i,n);}/*显示数组Y*/printf("\n\n数组Y:\n");for(i=0; i<n; i++){printf("y%d = %0.3f\n", i+1,y[i]); }/*回代方式计算数组X*/for(i=n-1; i>=0; i--){x[i] = getx(u,y,x,i,n);}/*显示数组X*/printf("\n\n数组X:\n");for(i=0; i<n; i++){printf("x%d = %0.3f\n", i+1,x[i]); }}四、运行结果五、参考文献[1]刑志栋,矩阵数值分析,陕西:陕西科学技术出版社, 2005。
doolittle分解法
doolittle分解法LU分解法也叫Doolittle分解法,它是一种分解矩阵的方法,它可以将一个方阵分解成一个下三角矩阵和一个上三角矩阵,它可以用来求解线性方程组、求逆矩阵、求特征值等。
它是由美国数学家詹姆斯·杜利特尔(James Doolittle)在1850年以后提出的,因此也被称为Doolittle分解法。
LU分解法是一种利用矩阵变换把矩阵分解成两个三角矩阵的方法,它可以将一个n阶方阵A分解成两个n阶三角矩阵L和U,使得A=LU,其中L为下三角矩阵,U为上三角矩阵。
LU分解法的实质是利用矩阵的乘法和加法,把一个矩阵变换为两个三角矩阵,这样可以减少计算量。
LU分解法的一个主要特点是,它可以利用矩阵的乘法和加法,把一个矩阵变换为两个三角矩阵,从而可以有效地减少计算量,提高求解线性方程组的效率。
LU分解法的步骤是:首先,把A矩阵分解成两个三角矩阵,L矩阵的对角线上的元素都是1,其余元素都是0;U矩阵的对角线上的元素是A的对角线上的元素,其余元素都是A的上三角矩阵的元素。
然后,把L和U相乘得到A矩阵,表示为A=LU。
最后,使用LU分解法求解线性方程组。
LU分解法的优点是可以用来求解线性方程组,求逆矩阵,求特征值,有效地减少计算量,提高求解效率,还可以用来计算多元函数的极值。
缺点是LU分解法只适用于方阵,而且LU分解法的结果可能会受到矩阵的谱半径的影响,如果谱半径较大, LU分解法就会失去效率,可能会出现数值不稳定的情况。
总之,LU分解法是一种有效的分解矩阵的方法,它可以有效地求解线性方程组,求逆矩阵,求特征值等,但是它只适用于方阵,而且受到矩阵的谱半径的影响,如果谱半径较大,LU分解法就会失去效率。
因此,使用LU分解法需要谨慎考虑,以便取得最佳的效果。
Doolittle分解法的构造过程
Doolittle 分解法的构造过程把矩阵A 写成下列两个矩阵相乘的形式:A=LU ,其中L 为下三角矩阵,U 为上三角矩阵。
这样我们可以把线性方程组 Ax=b 写成Ax=(LU)x=L( U x ) = b令 U x=y,则原线性方程组 Ax=b 化为两个简单的三角方程组:Ux=y 和Ly=b 。
于是可首先 求解Ly=b 得到向量y ,然后求解 Ux=y,从而求解线性方程组 Ax=b 的目的。
设矩阵A 的Doolittle 分解为: 为求出矩阵L 和U ,根据矩阵乘法规则,有用公式写法有:()ijjj j ii i i i j i a u u u l l l l U L j =⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎭⎫⎝⎛=⋅-000,,0,1,,,,213211 LU u u u u u u l l l a a a a a a a a a A nn n n n n nn n n n n =⎪⎪⎪⎪⎪⎭⎫ ⎝⎛⎪⎪⎪⎪⎪⎭⎫ ⎝⎛=⎪⎪⎪⎪⎪⎭⎫ ⎝⎛= 222112112121212222111211111{}∑∑==⋅=⋅=nk j i k kjik kj ik ij u l u l a 1,min 1ni u l u l u l a nj u u l u l u l a i nk k k ik k ik i jj nk k kj k kj k j ,,2,,2,11111111111111111111 =⋅=⋅=⋅===⋅=⋅=⋅=∑∑∑∑====iii k ki jkn k i k ki jkki jkji iji k kj ik nk ik kj ikkj kij u l u lu lu la u u l u lu la j i ji ⋅+⋅=⋅=⋅=+⋅=⋅=⋅=≤∑∑∑∑∑∑-===-===111111111,有时当于是可得Doolittle 分解公式:u 1j =a 1j j=1,2,…,n l i1=a i1 / u 11 i=2,3,…,n2)Doolittle 分解法算法1.输入变量个数n 、系数矩阵A 、常数项b2 如果a 11=0,则输出“LU 分解失败”提示并终止,否则a j1 ⇐ a j1/a 11 (j=2,…,n )ij u u l a l ij u l a u iii k ki jk ji i k kjik ij ij ji >⋅-=≥⋅-=∑∑-=-= /)(1111注:因为 L 和U 中的三角零元素都不必存储,L 的对角元素也因为都是1没有必要再记录在程序中。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
u11
u12
u13
...
u22 u23 ...
u1,n
u2,n
U
...
...
u u n1,n1 n1,n
unn
由上一节三角形方程组的知识,不难得到 Ly b 的解:
y1 b1
y2 b2 l21 y1
r1
yr br lrj y j j1
end
对于线性方程组
Ax b
系数矩阵非奇异,经过Doolittle分解后
A LU
线性方程组可化为下面两个三角形方程组
Ly b
Ux y
y为中间未知量向量
1
l21
1
L
l31 ...
l32 ...
1 ...
...
ln1 ln2 ln3 ... 1
2 3
10 4
0 12
1 2 3
3 13
4
x1 x2
x3
10 5 2
4
14
9
13 x4
7
解 下面再用Doolittle分解方法求解
u11 u12 u13 u14 2 10 0 3
for j=k:n u(k,j)=A(k,j)-l(k,1:k-1)*u(1:k-1,j);
end u(k,k:n)=A(k,k:n)-l(k,1:k-1)*u(1:k-1,k:n);
for i=k+1:n l(i,k)=(A(i,k)-l(i,1:k-1)*u(1:k-1,k))/u(k,k);
end l(k+1:n,k)=(A(k+1:n,k)-l(k+1:n,1:k-1)*u(1:k-1,k))/u(k,k);
u1 j a1 j
li 1
ai 1 u11
j 1, 2,..., n
i 2,3,..., n
U的第一行 ------(1) L的第一列 ------(2)
r 1
urj arj lrkukj k 1
r 1, 2,..., n U的第r行 ------(3) j r,..., n
...
1 ...
...
an1 ... anr ... ann ln1 ... lnr ... 1
u11
...
u1r
...
u1n
... ...
...
urr
...
urn
... ...
unn
可知A的第r列元素主对角线以下元素 air (i r 1,..., n)为
k 1
r 1, 2,..., n
r 1
arj lrkukj 1 urj k 1
因此可以推导出
ai1 li1u11 i 2, 3,..., n
r
i r 1,..., n
air lik ukr
k 1
r 1, 2,..., n 1
r 1
air lik ukr lirurr k 1
function [l,u]=lu_Doolittle1(A) % 求可逆矩阵的LU分解 % A为可逆矩阵,l为单位下三角矩阵,u为上三角矩阵 n=length(A); u=zeros(n); l=eye(n); u(1,:)=A(1,:); l(2:n,1)=A(2:n,1)/u(1,1); for k=2:n
... ...
urr
...
u1n
...
...
urn
... ...
unn
根据矩阵的乘法原理,
A的第一行元素a1
为
j
a1 j u1 j j 1, 2,..., n
比较第1行
A的第r行元素主对角线以右元素arj ( j r,..., n)为
r
arj lrkukj k 1
r 1
air lik ukr
lir
k 1
urr
0 0 1 l43 T 0 0 1 9T 0 0 0 u44 0 0 0 4
y1 b1
r 1
yr br lrj y j j 1
解 23y1L1y04y201b2y, 3得133
u12
u13
...
u22 u23 ...
u1,n
u2,n
U
...
...
u u n1,n1 n1,n
unn
r n 1, n 2,..., 2,1
上述解线性方程组的方法称为 直接三角分解法的 Doolittle分解
例3.2.1 用Doolittle分解求解方程组
y2
y3 y4
从上式最后一个矩阵中 可知L,U , y 然后解线性方程组 Ux y
Doolittle分解 的紧凑格式
Doolittle分解的结果与Gauss消元法所得结果完全 一样,但却避免了中间过程。
注1 U的元素uij (i j)等于矩阵A的对应元素aij减去 一个内积,内积每一项是左边 L的同行元素 lik 与上 边U的同列元素ukj的乘积。
a25
a35 a45
a21 a31 a41
a22 a32 a42
a23 a33 a43
a24 a34 a44
b2
b3 b4
存储单元(位置)
u11 u12 u13 u14 y1
u11 u12 u13 u14 y1
r
1
3.2.2 矩阵的doolittle分解
Gauss消元法的消元过程实际上是对线性代数方程 组进行一系列初等行变换的过程。由线性代数知识知, 线性代数方程组的初等变换相当于对其增广矩阵实行 初等行变换,也即相当于增广矩阵左边乘以一个初等 矩阵。
定理3.12 若n阶方阵A的顺序主子式 Dk det Ak 0,
1 l21 l31 l41 T 1 1.5 0.5 2T
u1 j a1 j
li 1
ai 1 u11
0 u22 u23 u24 0 11 12 8.5
r 1
urj arj lrkukj k 1
0 1 l32 l42 T 0 1 3/11 6 /11T 0 0 u33 u34 0 0 3/11 2 /11
...
...
...
...
...
...
a(1) 11
... ...
a(1) 1k
...
...
a(1) 1n
...
A
ak1
...
...
akk ...
... ...
akn
...
lk1
...
...
1 ...
...
a(k) kk
2
6 /11
9
4
解Ux y,得
x1 x2 x3 x4 T 1 2 3 4T
xn
yn unn
n
yr urj x jxFra bibliotek jr1
urr
Doolittle分解在计算机上实现是比较容易的
但如果按上述流程运算仍需要较大的存储空间:
A,b, x, L,U, y 都需要单独的存储空间
1 2 3 4
y 4
x1 xT2
x3
140 1240 9 17 /1131 x14 6 T
10 5 2 7
2 10 0 3
1.5
11
12
8.5
0.5 3/11 3/11 2/11
j r,..., n r 1, 2,..., n
比较第r行
同样,由
a11 ... a1r ... a1n 1
...
...
...
...
...
...
A
ar1
...
...
arr ...
... ...
arn
...
lr
1,1
...
...
arr
...
...
an1 ... anr
... a1n 1
...
...
...
... ...
arn
...
lr1 ...
...
1 ...
...
... ann ln1 ... lnr ... 1
u11
...
u1r
l21 l31 l41
a22 a32 a42
a23 a33 a43
a24 a34 a44
b2 b3 b4
r
2
l21 l31 l41
u22 l32 l42