我是靠谱客的博主 坚定月饼,最近开发中收集的这篇文章主要介绍doolittle分解matlab,如何理解选主元的Doolittle分解法,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

书中讲解不是很详细,理解之后总结一下

首先说一下,之所以要理解选主元的Doolittle分解是因为书中对于该分解过程的讲解比较违和。本文的目的是为了说明:选主元的Doolittle分解法分解得到的LU矩阵所计算得到的方程组的解与普通的Doolittle分解计算得到的解是同一个解,因而也是原方程组的解。

申明

Doolittle分解在计算L矩阵和U举证的时候需要进行

math?formula=n次循环,本文用

math?formula=k表示当前循环次数,在文中我把它称之为 第

math?formula=k轮分解。

通常在计算

math?formula=l矩阵和

math?formula=u矩阵的时候通常将两者写在一个矩阵中,所以在文中我直接称之为

math?formula=lu矩阵。

读懂本文首先你要对Doolittle分解和选主元的Doolittle分解已事先有了解,或者说你是带着疑问看的,否则不保证你能看懂。

正文开始

对于方程组:

math?formula=ax%3db

​ Doolittle分解法最核心的是对目标求解矩阵

math?formula=a做LU分解,考虑到计算机计算精度的问题需要上三角矩阵U的对角元素不能过小,于是有了选主元的Doolittle分解法,选主元本质上是对矩阵

math?formula=a 做行变换使矩阵

math?formula=u对角元素绝对值尽可能大。可以表示成下面公式的样子(左乘表示行变换):

math?formula=qa%3dlu

但是实际算法操作的时候并不是一次性的得到变换矩阵

math?formula=q ,或者说矩阵

math?formula=q在实际操作过程中并没有真正的出现过。那是怎么做的呢?接下来我假设从

math?formula=k%3d1开始演算这个过程:

math?formula=k%3d1

选取在矩阵第一列找出最大的元素,并且将最大元素行与第一行交换顺序,也就是一次选主元的行为,用公式可以表示为:

math?formula=q_1a

选主元之后按照常规的Doolittle分解法进行LU分解的第一轮操作,也就是对行变换后矩阵A进行操作,即:

math?formula=(lu)_%7bk%3d1%7d

注:我这里用

math?formula=(lu)_%7bk%3d1%7d 表示计算

math?formula=l矩阵的第一列和

math?formula=u矩阵的第一行,下面的表述类似

math?formula=k%3d2

math?formula=k%20%3d1 时比较特殊,在接着

math?formula=k%3d1 讲述

math?formula=k%3d2 之前,需要先讲如下一种情况。

​ 假设进行普通的Doolittle分解,在计算 LU 分解的过程中,已经执行完了第

math?formula=k-1 轮计算,也就是已经计算到了 LU 矩阵的

math?formula=k-1 列,和

math?formula=k-1 行,在正要执行第

math?formula=k轮操作的时候,我们单独执行一次选主元操作(为了便于理解,这里用语言描述):

先计算 LU 矩阵第

math?formula=k列的元素,然后比较这一列的元素,选出最大的一行,将这一行与 LU 矩阵的第k 行交换,向量

math?formula=b也做对应的行变换,然后再接着计算 LU 矩阵的第

math?formula=k 行元素。这样完成一次选主元的操作。之后按照一般的操作计算全部LU矩阵元素。最后LU完全分解后表示为

math?formula=l%5e%7b'%7du%5e%7b'%7d

之后根据分解后的矩阵计算得到的线性方程组的解与不做选主元得到解在理论上是相等的,虽然他们的系数矩阵放生了变化。也就是等式

math?formula=l%5e%7b'%7du%5e%7b%e2%80%99%7dx%3db%5e%7b'%7d

与单纯进行LU分解得到的方程组

math?formula=lux%3db

同解。

那么到这里我们再想象一下,上面的操作是否等效于:

先对矩阵

math?formula=a 的对应行做交换,(表示为

math?formula=q_k%20a)。

然后再用一般的LU分解对其计算对应的

math?formula=l%5e%7b''%7d%20u%5e%7b''%7d 矩阵

最后求方程组的解

答案是等效的。也就是说这个时候计算得到的

math?formula=l%5e%7b''%7d%3dl%5e%7b'%7d

math?formula=u%5e%7b''%7d%3du%5e%7b'%7d,最后就是下面四个方程同解

math?formula=q_kax%3dq_kb%20%5cleftrightarrow%20l%5e%7b'%7du%5e%7b%e2%80%99%7dx%3db%5e%7b'%7d%20%5cleftrightarrow%20lux%3db%20%5cleftrightarrow%20ax%3db

这时候再回到

math?formula=k%3d2 的情况。根据前面

math?formula=k%3d1 情况下的描述,直接对

math?formula=q_1%20a 做第一轮LU分解得到的LU矩阵的第一列的第一个元素就是本列最大的元素,这个时候如果按照一般Doolittle分解步骤执行,最后计算得出的解和原方程同样是同解的,也就是下面两个方程组同解

math?formula=q_1ax%3dq_1b%20%5cleftrightarrow%20ax%3db

接下来我们将

math?formula=q_1%20a看做一个整体,记为

math?formula=a_1,同时

math?formula=b_1%3dq_1%20b

此时再看一下求解

math?formula=a_1%20x%3db_1 的过程:

math?formula=a_1 进行LU分解,在第二轮LU分解的时候选主元,之后按照一般的操作完成后面的LU分解,得到LU矩阵。

根据灰色文字的原理,这就等于先对

math?formula=a_1 进行行变换也就是

math?formula=q_2%20a_1,再按照一般LU分解继续计算得到的LU矩阵。即下面两个公式同解

math?formula=q_2a_1x%3dq_2b_1%20%5cleftrightarrow%20a_1x%3db_1

这里记

math?formula=a_2%3dq_2%20a_1%20b_2%3dq_2%20b_1 ,那么就可以说,上面提到的对

math?formula=a_2进行一般LU分解得到的LU矩阵的前两个对角元素就是选主元之后的元素,且理论上下面方程组同解:

math?formula=ax%3db

math?formula=a_1x%3dq_1ax%3dq_1b%3db_1

math?formula=a_2x%3dq_2a_1x%3dq_2q_1ax%3dq_2q_1b%3dq_2b_1%3db_2

​ 到这里就看出规律来了吧。以此类推,我们按照正常演算的思路顺一下,就可以很好地理解选主元的Doolittle分解法的内在原理了

为了计算方程组

math?formula=ax%3db,按照Doolittle分解法进行LU分解,为了减少计算误差,在第一轮LU分解中我们对LU矩阵第一列选主元,等价于对

math?formula=a 做行变换即

math?formula=q_1%20a 做一般LU分解;

在第一轮LU分解中对第一列选主元之后,接着在第二轮LU分解时,对其第二列做选主元,等价于对

math?formula=q_1%20a 做第一轮一般LU分解后,在第二轮LU分解时选主元,进而等价于对

math?formula=q_2%20q_1%20a 执行两轮一般LU分解;

同理继续做第三轮LU分解时,对LU矩阵第三列进行选主元,等价于对

math?formula=q_2%20q_1%20a 做两轮一般LU分解后,在第三轮LU分解时,选主元,进而等价于对

math?formula=q_3%20q_2%20q_1%20a 做三轮一般LU分解

math?formula=%5ccdots%5ccdots

继续做第

math?formula=k 轮LU分解时,对LU矩阵第

math?formula=k 列进行选主元,等价于对

math?formula=q_%7bk-1%7d%20%5ccdots%20q_2%20q_1%20a

math?formula=k-1 轮一般分解后,在第

math?formula=k 轮分解时,选主元,进而等价于对

math?formula=q_%7bk%7d%20%5ccdots%20q_2%20q_1%20a

math?formula=k 轮一般LU分解

math?formula=%5ccdots%5ccdots

直到LU矩阵全部计算完成,并且每一轮分解都采用了选主元操作。

最终等价于对

math?formula=q_%7bn%7dq_%7bn-1%7d%5ccdots%20q_2%20q_1%20a

math?formula=n 轮一般LU分解。得到的最终LU矩阵所得到的解与原方程同解即。也就是

math?formula=%5cbegin%7bequation%7d%20%5cbegin%7baligned%7d%20ax%26%3db%20%5cleftrightarrow%5c%5c%20q_%7bn%7dq_%7bn-1%7d%5ccdots%20q_2%20q_1%20ax%26%3dq_%7bn%7dq_%7bn-1%7d%5ccdots%20q_2%20q_1b%20%5cleftrightarrow%5c%5c%20lux%26%3db_n%20%5cend%7baligned%7d%20%5cend%7bequation%7d

最后

以上就是坚定月饼为你收集整理的doolittle分解matlab,如何理解选主元的Doolittle分解法的全部内容,希望文章能够帮你解决doolittle分解matlab,如何理解选主元的Doolittle分解法所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(46)

评论列表共有 0 条评论

立即
投稿
返回
顶部