漫步线性代数七——特殊矩阵和应用

本篇文章有两个目标。第一是解释实际问题中大型线性方程组 Ax=b 的一种解法,事实是,工程或经济学中大型和现实的问题能够引导我们更深入理解这些知识。但是有一个很重要应用却不需要大量的准备工作。

另一个目标是说明系数矩阵具有的一些特殊性质,为了方便我们用同一个应用进行讲解。大型矩阵几乎总是有一个清晰的模式-对称和很多零元素。因为一个稀疏矩阵包含的信息远小于 n2 个,所以计算应该更快。我们将观察带状矩阵,看看集中在对角线附近是如何加快消元的,为此我们将看到一个特殊的三对角矩阵。

看方程(6)中的矩阵,它是通过将微分方程变化为矩阵方程得到的。这是对每个 x u(x)的连续问题,很明显计算机不能解决它,所以它必须近似为一个离散的问题-我们保留更多的未知变量,结果的精度就越好,当然计算代价也就越高。作为一个简单但仍然具有代表性的连续问题,我们选择微分方程

d2udx2=f(x)0x1(1)

这是关于位置函数 u(x) 的线性方程,可以在解中加上任何组合 C+Dx 依然满足要求,因为 C+Dx 的二阶导为零,不影响结果。对于两个任意常数 C,D 的不确定性,通过在区间的两端添加一个边界条件就能够移除:

u(0)=0,u(1)=0(2)
这个结果是一个两点边值问题,描述的不是瞬变而是稳态现象-例如一根棒的温度分布,它的一端固定为 00C 并且热源为 f(x)

记住,我们的目标是产生一个离散的问题-换句话说,一个线性代数中的问题。为此我们只可以接受 f(x) 有限的信息,描述在 n 个相等的区间点x=h,x2h,,x=nh上的值,对于同样位置处的真是解 u 我们计算近似解u1,,un,在端点处 x=0,x=1=(n+1)h 处,边界值是 u0=0,un+1=0

第一个问题是:我们如何替换导数 d2u/dx2 ?一阶导数可以近似表示为有限步长内停止的 Δu/Δx 并且不允许 h(orΔx) 趋近于零, Δu 可以是前面的,后面的或中间的:

ΔuΔx=u(x+h)u(x)h or u(x)u(xh)h or u(x+h)u(xh)2h(3)

最后一个关于 x 对称,它是最精确的。对于二阶导数,只是利用x,x±h处数值的一个组合:

d2udx2Δ2uΔx2=u(x+h)2u(x)+u(xh)h2(4)

它也有关于 x 对称的优点。重复一遍:当h时右边接近 du/dx2 的真实值,但是我们必须让 h 停在某个正数上。

对每个点x=jh,方程 d2u/dx2=f(x) 可以用它的离散模拟(5)代替,我们通过乘以 h2 来得出 n 个方程Au=b

uj+1+2ujuj1=h2f(jh)for j=1,,n(5)

第一个和最后一个( j=1,j=n )包含 u0=0,un+1=0 ,他们是已知的边界条件,如果这些值非零的话,他们就转化成右边的值。这 n 个方程(5)的结构可以更矩阵形式来更好的可视化,我们选择h=16,从而得到 5×5 的矩阵:

2112112112112u1u2u3u4u5=h2f(h)f(2h)f(3h)f(4h)f(5h)(6)

现在,我们将求解方程(6),它的系数矩阵非常有规律,有许多特殊的性质,其中有三个是非常基本的:

  1. 矩阵 A 是三对角的。所有非零元素位于主对角线以及附近的两条对角线上,这条窄带以外的aij=0,这些零大大简化了高斯消元过程。
  2. 矩阵是对称的。每个元素 aij 等于它的镜像 aji ,使得 AT=A 。上三角矩阵 U 将是下三角矩阵L的转置, A=LDLT A 的对称性反映了d2u/dx2的对称性,奇导数像 du/dx,d3u/dx3 将破坏对称性。
  3. 矩阵是正定的。这个额外的性质说明主元是正的,在理论和实践中不需要行变换。这和本文末尾要将的矩阵 B (非正定的)正好相反,在没有行变换的情况下,它将对舍入非常敏感。另外关于正定的概念我会在以后的文章中详细介绍!

我们返回到A是三对角矩阵这个事实,它对消元会有什么影响呢?消元过程的第一步是在第一个主元下面产生零:

211211211211220132112112112

跟一般的 5×5 矩阵相比,这一步主要有两个简化:

  1. 在主元下面只有一个非零元素
  2. 主元所在的行非常短

乘数因子是 =12 ,新的主元是 32 。更进一步,三对角模式保留着:每步消元都允许这两个简化。

最终结果是 LDU=LDLT ,注意主元!

A=112123134145121324354651121231341451

三对角矩阵的 L,U 分解因子是二对角矩阵,三个因子和矩阵 A 一样对角线有同样的带状结构,注意L,U互相之间存在转置关系,我们从对称就预期到会如此,主元 2/1,3/2,4/3,5/4,6/5 都是正的,他们的乘积就是 A 的行列式detA=6。当 n 不断变大时,这些主元明显收敛到1,这样的矩阵计算起来非常方便。

稀疏因子L,U完全改变了通常的操作次数,每列的消元只需要两步,对于 n 列来说,次数从n3/3降到了 2n ,三对角方程组几乎能很快解决,求解它的代价和 n 成正比。

带状矩阵就是在|ij|<w aij=0 (图1),对角矩阵的半个带宽 w=1 ,三对角矩阵的为 w=2 ,,当 w=n 时就是就是一般的矩阵了。对每一列,消元法需要 w(w1) 次操作:长为 w 的行对下面的w1行进行操作,对于 n 列的带状矩阵大约需要w2n次操作。

w 趋近n时,矩阵变成一般矩阵,次数变成 n3 。产生 L,D,U 的除法和乘-减(不考虑 A 为对称这个假设)精确次数是P=13w(w1)(3n2w+1),对于一般矩阵即 w=n P=13n(n1)(n+1) ,这是一个整数,因为 n1,n,n+1 是连贯的,所以他们之中有一个能被3整除。


这里写图片描述
图1:带状矩阵 A 和它的因子L,U

这是我们最终得到的操作次数,我们强调一点,像 A 那样的有限差分矩阵有逆,在求解Ax=b时,知道 A1 比知道 L,U 要糟糕,因为 A1 b 需要n2步,而前向消元和回代(产生 x=U1c=U1L1b=A1b ) 4n 步就足够了。

我们希望本例增强读者对消元的理解,它是实践中遇到的一个大型线性方程实例,接下来对于 n 个未知量的m个方程,我们将转向讨论 x 的存在性和唯一性。

舍入误差

理论上非奇异情况有完整的主元(考虑行变换),实践中,需要更多的行交换否则计算的解可能变得毫无价值。接下来我们重点来讲如何使消元更加稳定-为什么需要它以及如何做。

对于中等大小的系统,比如说100×100,消元可能涉及一百万的三分之一次( 13n3 ),对于每步操作,我们必须预期舍入误差。通常情况下,我们固定有效位数,然后将两个大小不同的数相加给出一个误差:

.456+.00123.45723

那么所有这些误差是如何影响 Ax=b 的最终误差的呢?

这不是一个简单的问题。而这个问题被约翰 诺依曼碰到了,在计算机使得100万步操作成为可能的时候,是他引领了数学。事实上高斯和冯 诺依曼的结合给出了简单的消元算法,虽然冯诺依曼高估了最后的舍入误差。威尔金森(Wilkinson)找到这个问题的正确方法,并且他的书到现在依然是经典。

我们将给出两个简单的例子来说明舍入误差的重要性:

A=[1.1.1.1.0001]B=[.0011.1.1.]

A 几乎是奇异的而B离奇异很远,如果我们稍微将 A 中的元素改一下a22=1,它既是奇异的。考虑两个非常接近的向量 b

illconditioned uu++v1.0001v==22andwellconditioned uu++v1.0001v==22.0001

第一个解是 u=2,v=0 ,而第二个解是 u=v=1 b 中第五位数的改变放大到解中第一位数的改变,没有任何数值方法可以避免它对小扰动这种敏感,病态条件能够从一个地方转到另一个地方,但是无法移除。真实解都如此敏感更别说计算解了。

第二点如下:

15、即便是一个wellconditioned矩阵 B 也可能别差的算法个毁掉

我们很遗憾的说:对于矩阵B,直接使用高斯消元就是一种差的算法。假设.0001作为第一个主元,那么第二行需要减去第一行的10000倍,右下角就变成了-9999,但是第三位四舍五入将变为-10000,为1的元素将会消失:

.0001u+vu+v==22.0001u+v9999v==19998

四舍五入将得到 10000v=10000 或者 v=1 。首先我们用正确值 v=.999 (保留三位小数)回代将得到 u=1

.0001u+.9999=1oru=1

但是如果接受 v=1 ,我们将得到 u=0

.0001u+1=1oru=0

计算结果完全不对, B 是well-conditioned但是消元明显不稳定,L,D,U也明显是比 B 大许多:

B=[11000001][.0001009999][10100001]

小主元.0001带来了不稳定,补救方法很明显-换行

16、一个小主元迫使消元中发生变化。通常我们比较同一列所有可能的主元,将最大主元换到当前的位置

对于 B 来讲,.0001将和下面的1比较,立马进行行交换,从矩阵的角度来讲就是乘以一个置换矩阵P,新矩阵 C=PB 就有好的因子:

C=[1.000111]=[1.000101][100.9999][1011]P=[0110]

C 的主元是1和.9999,比B的.0001和-9999要好。

还有一种策略就是与其余所有列中最大主元进行交换,这时候可能不仅是行,也会有列交换。(这时候置换矩阵乘在右边)这么做的代价太高,上面的方法其实已经够了。

我们说完了数值线性代数的基本算法:带有行变换的消元法。一些进一步的完善,比如看整行或列,都是有可能的,但本质上读者现在知道了一台电脑如何解线性方程组,相比“理论”描述-找到 A1 并相乘 A1b -我们的描述已花费了大量时间和耐心,我希望能够用更简单的方法来解释 x <script type="math/tex" id="MathJax-Element-7260">x</script>是如何发现的,但是我认为我还没有找到。(博主心声:期待大家能有更好的方法提出来)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值