3.2.2 矩阵的doolittle分解
编程实现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三角分解法也可以作为其他线性方程组求解算法的基础,为实际应用中的求解提供了可靠的解决方案。
杜立特尔三角分解法

杜立特尔三角分解法杜立特尔三角分解法- 全面评估、深度探讨与个人观点解读1. 引言杜立特尔三角分解法是线性代数中一种重要的数值方法,用于解决线性方程组。
它的广泛应用于科学计算、工程学和金融建模等领域中,具有高精度、快速稳定的特点。
本文将对杜立特尔三角分解法进行全面评估、深度探讨,并分享个人对该方法的理解与观点。
2. 杜立特尔三角分解法的基本原理杜立特尔三角分解法是一种将矩阵分解为下三角矩阵和上三角矩阵之乘积的方法。
它的基本原理是通过高斯消元法将线性方程组转化为上三角矩阵的形式,再通过前向、后向代替求解出线性方程组的解。
3. 杜立特尔三角分解法的步骤3.1 高斯消元法在杜立特尔三角分解法中,首先需要使用高斯消元法将线性方程组转化为上三角矩阵的形式。
高斯消元法通过消元和回代的操作,将方程组变换为上三角矩阵形式,即将主元以下的元素全部消为0。
3.2 前向代替在杜立特尔三角分解法的前向代替步骤中,从上到下,逐行将下三角矩阵的元素表示为主线元素与其他元素的线性组合,以求得下三角矩阵L。
3.3 后向代替在杜立特尔三角分解法的后向代替步骤中,从下到上,逐行将上三角矩阵的元素表示为主线元素与其他元素的线性组合,以求得上三角矩阵U。
3.4 解线性方程组通过前向代替和后向代替的步骤,我们可以求解出上三角矩阵和下三角矩阵。
我们可以通过反向代替的方式,将线性方程组表示为矩阵形式进行求解,即解出线性方程组的解向量。
4. 杜立特尔三角分解法的优势与应用杜立特尔三角分解法相较于其他解线性方程组的方法,具有以下优势: - 高精度:杜立特尔三角分解法在求解线性方程组时能够提供高精度的解。
- 快速稳定:该方法的时间复杂度较低,求解效率高,且对数值误差具有较高的容忍度。
4.1 科学计算应用杜立特尔三角分解法在科学计算领域中应用广泛,特别是在数值模拟和计算物理学等领域。
它可以在矩阵形式下求解微分方程、计算特征值和特征向量等。
4.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分解法需要谨慎考虑,以便取得最佳的效果。
用matlab编程做doolittle 分解
用matlab编程做doolittle 分解Doolittle分解是一种用于识别系统频率响应中模态重叠的方法。
在模态分析中,模态重叠是一个常见问题,因为它可能导致错误的模态参数估计。
为了解决这个问题,研究人员开发了Doolittle分解方法。
Doolittle分解基于频率响应函数的局部平均,以识别独立的模态分量。
在本文中,我们将使用MATLAB编程语言演示如何使用Doolittle分解来识别系统中的独立模态分量。
首先,我们需要安装和加载所需的MA TLAB工具箱。
要执行Doolittle分解,我们需要使用Control System Toolbox中的信号处理工具。
要安装此工具箱,请按照MATLAB的说明进行操作。
安装完成后,加载Control System Toolbox和Signal Processing Toolbox。
接下来,我们需要创建一个模拟系统。
我们可以使用Transfer Function Designer工具箱创建一个简单的一阶系统,其传递函数为:G(s) = 1 / (s + 2)将此传递函数添加到MATLAB工作空间中,以便稍后使用。
现在,我们可以编写MATLAB脚本来执行Doolittle分解。
以下是一个简单的脚本示例:```matlab```% 创建模拟系统sys = ss(1, [1, 2], [], []);```% 添加已知的传递函数到系统中sys = addTerminalBlock(sys, [[1 0 0 1]], 1);```% 添加未知的传递函数到系统中sys = addTerminalBlock(sys, [[0 1 0 1]], 2);```% 计算频率响应函数h = tf(sys);% 将频率响应函数转换为数值表示形式num, den = numden(h);```% 设置频率向量freqs = logspace(-1, 2, 500);% 初始化Doolittle分解变量modes = zeros(size(den, 1), 1);weights = zeros(size(den, 1), 1);local_averages = zeros(size(den, 1), 1);num_modes = zeros(size(den, 1), 1);```% 执行Doolittle分解for i = 1:size(den, 1)local_averages(i) = mean(abs(zeros(1, length(freqs)) .* num(i, :) / den(i, :)));weights(i) = sum(abs(num(i, :)).^2) / sum(abs(den(i, :)).^2);modes(i) = local_averages(i) / weights(i);num_modes(i) = i;end```% 可视化结果figure;plot(freqs, modes);xlabel('Frequency (rad/s)');ylabel('Normalized mode shapes');title('Doolittle Decomposition of Simulated System');```在这个脚本中,我们首先创建了一个模拟系统,并添加了已知的和未知的传递函数。
矩阵的三角分解
现在学习的是第24页,共54页
Cruou分解
令
a11 a12 ... a1n l11
a21
a22
...
a2n
l21
l22
1 u12 ... u1n
1 ... u2n
an1 an2 ... ann ln1 ln2 ... lnn
1
用比较等式两边方 元法 素逐 的行逐列L,求 U各解元素
由a23 l21u13 u23 得u23 a23 l21u13;
由a32 l31u12 l32u23
得l32
a32
l31u12 u22
k 3时:由a33 l31u13 l32u23 u33
得u33 a33 (l31u13 l32u23)
现在学习的是第9页,共54页
Doolittle分解 若矩阵A有分解:A=LU,其中L为单位下
三角阵,U为上三角阵,则称该分解为 Doolittle分解,可以证明,当A的各阶顺 序主子式均不为零时,Doolittle分解可以 实现并且唯一。
现在学习的是第10页,共54页
A的各阶顺序主子式均不为零,即
a11 ... a1k Ak ... ... ...0
ak1 ... akk
(k1,2,..n.)
l11 u12 ... u1n
l21
l22
...
u
2
n
ln1
ln2
...
lnn
现在学习的是第26页,共54页
3.2.3 对称正定矩阵的Cholesky分解
在应用数学中,线性方程组大多数的系数 矩阵为对称正定这一性质,因此利用对称 正定矩阵的三角分解式求解对称正定方程 组的一种有效方法,且分解过程无需选主 元,有良好的数值稳定性。
矩阵分解及应用
引言数学是人类历史中发展最早,也是发展最为庞大的基础学科。
许多人说数学是万理之源,因为许多学科的研究都是以数学做为基础,有了数学的夯实基础,人类才铸就起了众多学科的高楼大厦,所以数学的研究和发展一直在不断的发展壮大。
在数学中有一支耀眼的分支,那就是矩阵。
在古今矩阵的研究发展长河中产生了许多闪耀星河的大家。
英国数学大家詹姆斯·约瑟夫·西尔维斯特,一个数学狂人,正是他的孜孜不倦的研究使得矩阵理论正式被确立并开启了矩阵发展的快速发展通道。
凯莱和西尔维斯特是非常要好的朋友,他也是一位非常伟大的数学大师,正是他们伟大的友谊,加上两人的齐心协力最后他们共同发展了行列式和矩阵的理论。
后来高斯在矩阵方面的研究取得重要的成就,尤其是高斯消去法的确立,加速了矩阵理论的完善和发展。
而在我国,矩阵的概念古已有之。
从最早的数学大家刘徽开始我们古代数学大家都已或多或少的研究了矩阵。
尤其在数学大家刘徽写的《九章算术》中,它最早提出了矩阵的类似定义。
而且是将矩阵的类似定义用在了解决遍乘直除问题里了。
这已经开始孕育出了最早的矩阵形式。
随着时间转移,矩阵的理论不断的完善,在对于那些大型矩阵的计算中如果用基本方法显得过于繁重,于是发展出了矩阵的分解,随着对矩阵分解的不断研究完善,矩阵分解方法和理论也日趋成熟矩阵经常被当做是数学工具,因为在数学问题中要经常用上矩阵的知识。
矩阵是一个表格,要掌握其运算法则,作为表格的运算与数的运算既有联系又有差别,在所有矩阵的运算方法中,矩阵的分解是他们中一种最重要并且也是应用最广泛。
矩阵分解主要是对高斯消去法的延续和拓展。
在一些大型的矩阵计算中,其计算量大,化简繁杂,使得计算非常复杂。
如果运用矩阵的分解,将那些大型矩阵分解成简单的矩阵的乘积形式,则可大大降低计算的难度以及计算量。
这就是矩阵分解的主要目的。
而且对于矩阵的秩的问题,特征值的问题,行列式的问题等等,通过矩阵的分解后都可以清楚明晰的反应出来。
3.2.2 矩阵的doolittle分解
lir
air lik ukr
k 1
r 1
urr
i r 1,..., n
L的第r列 ------(4)
称上述(1) ~ (4)式所表示的分解过程为矩阵A的 Doolittle分解
思考
A 的Doolittle分解 A LU 中 L 为单位下三角 阵,U 为上三角阵。如果将 A LU 中的L 表 示为下三角阵,U 表示为单位上三角阵, 则 称之为 Crout 分解,请找出类似于 (1) ~ (4) 式的表达式.
3.2.2 矩阵的doolittle分解
Gauss消元法的消元过程实际上是对线性代数方程 组进行一系列初等行变换的过程。由线性代数知识知, 线性代数方程组的初等变换相当于对其增广矩阵实行
初等行变换,也即相当于增广矩阵左边乘以一个初等
矩阵。 定理3.12 若n阶方阵 的顺序主子式 k det Ak 0, A D
LU
也可以直接用比较法导出矩阵A的LU分解的计算公式。 上式可记为
a11 ... A ar1 ... a n1 ... a1r ... a1n 1 ... ... ... ... ... ... arr ... arn lr1 ... 1 ... ... ... ... ... ... ... anr ... ann ln1 ... lnr ... 1
k 1
r 1
urr
y1 b1 yr br lrj y j
j 1 r 1
0
0 0 u44 0 0 0 4
b 3 2 10 解Ly 0 , 得 x1 10 T 3 1 4y2 12y3 13 y4 x2 5 y 1 2 3 4 x3 2 10 14 17 / 11 16 T 7 4 20 9 13 x4
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
因此可以推导出
ai1 li1u11 i 2, 3,..., n
r
i r 1,..., n
air likukr
k 1
r 1, 2,..., n 1
r 1
air likukr lirurr k 1
u1 j a1 j
li 1
ai 1 u11
j 1, 2,..., n
...
an1 ... anr ... ann ln1 ... lnr ... 1
u11
...
u1r
...
u1n
... ...
...
urr
...
urn
... ...
unn
可知A的第r列元素主对角线以下元素 air (i r 1,..., n)为
r
air likukr k 1
a(n) nn
LU
也可以直接用比较法导出矩阵A的LU分解的计算公式。 上式可记为
a11 ... a1r ... a1n
...
...
...
...
1
...
...
u11
... u1r
...
u1n
... ...
...
A
ar1 ...
...
arr ...
... ...
arn ...
r
arj lrkukj k 1
j r,..., n r 1, 2,..., n
比较第r行
同样,由
a11 ... a1r ... a1n 1
...
...
...
...
...
...
A
ar1
...
...
arr ...
... ...
arn
...
lr
1,1
...
...
1 ...
end
对于线性方程组
Ax b
系数矩阵非奇异,经过Doolittle分解后
A LU
线性方程组可化为下面两个三角形方程组
Ly b
Ux y
y为中间未知量向量
1
l21
1
L
l31
l32
1
... ... ... ...
ln1 ln2 ln3 ... 1
u11
u12
u13
...
u22 u23 ...
3.2.2 矩阵的doolittle分解
Gauss消元法的消元过程实际上是对线性代数方程 组进行一系列初等行变换的过程。由线性代数知识知, 线性代数方程组的初等变换相当于对其增广矩阵实行 初等行变换,也即相当于增广矩阵左边乘以一个初等 矩阵。
定理3.12 若n阶方阵A的顺序主子式Dk det Ak 0,
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
称上述(1) ~ (4)式所表示的分解过程为矩阵A的 Doolittle分解
思考
A的Doolittle分解 A LU 中 L 为单位下三角 阵,U 为上三角阵。如果将 A LU 中的L 表 示为下三角阵,U 表示为单位上三角阵, 则 称之为 Crout 分解,请找出类似于 (1) ~ (4) 式的表达式.
i r 1,..., n r 1, 2,..., n 1
比较第r列
显然, r 1时 , ai1 li1u11 i 2, 3,..., n
综合以上分析,有
a1 j u1 j j 1, 2,..., n
r
j r,..., n
arj lrkukj
k 1
r 1, 2,..., n
r 1
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
r 1
air likukr
lir
k 1
urr
r 1, 2,..., n 1 i r 1,..., n L的第r列 ------(4)
1
... ...
ln3 ... 1
因此再由Ux y 的解便得到 Ax b的解:
xn
yn unn
n
yr urj x j
u1,n
u2,n
U
...
...
u u n1,n1 n1,n
unn
由上一节三角形方程组的知识,不难得到 Ly b 的解 :
y1 b1
y2 b2 l21 y1
r 1
yr br lrj y j j1
r 2,3,..., n
1
l21
1
L
l31
l32
... ...
ln1 ln2
lr1
...
...
1 ...
...
urr
...
urn
... ...
an1 ... anr ... ann ln1 ... lnr ... 1
unn
根据矩阵的乘法原理,
A的第一行元素a1
为
j
a1 j u1 j j 1, 2,..., n
比较第1行
A的第r行元素主对角线以右元素arj ( j r,..., n)为
k 1, 2,..., n 1, 则 A的LU分解式 A LU 存在且惟一
L是单位下三角矩阵
U一个上三角矩阵
若n阶方阵A (aij )nn的顺序主子式Dk 0, k 1, 2,..., n
则由前面的分析可知,A的LU分解A LU 存在且惟一,即
a11 ... a1k ... a1n 1
...
...
...
...
...
...
a(1) 11
... ...
a(1) 1k
...
...
a(1) 1n
...
A
ak1
...
...
akk ...
... ...
akn
...
lk1 ...
...
1 ...kn
)
... ...
an1 ... ank ... ann ln1 ... lnk ... 1
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);