漫步线性代数三——高斯消元法

高斯消元法实例

了解消元法最好的方式是看例子。我们以三维开始:

Original system 2u4u2u++v6v7v++w2w===529(1)

问题是找出未知量 u,v,w ,我们应用高斯消元法。(高斯被公认为最伟大的数学家,当然不是因为这项发明,这个他也许只花了十分钟。讽刺的是,以他名字命名的所有想法中,这个是最常用的)该方法从其他方程减去第一个方程的倍数开始。目标是消除后面两个方程中的 u 。这就要求我们

a. 第二个方程减去第一个方程的2倍
b. 第三个方程减去第一个方程的-1倍

Equivalent system 2u+v8v8v++w2w3w===51214(2)
系数2是第一个主元。消元法不断用下面的数除以主元,从而找出正确的乘数。

消去法第二阶段的主元是-8。我们现在忽略第一个方程。从余下的方程中(例题中也就是第三个方程)减去第二个方程的倍数来消除 v 。我们将第二个方程加上第三个,换句话说

c. 第三个方程减去第二个方程的-1倍
现在完成了消去过程,得到了

Triangular system 2u+v8v+w2w1w===5122(3)

然后反向求解方程组,即从下往上。最后一个方程给出了 w=2 。将它代到第二个方程,我们发现 v=1 。继续代入第一方程,求出 u=1 。这个过程称为回代。

大概总结一下:前向消去过程产生主元2,-8,1。下面的每一行减去上面的倍数,达到(3)那样的“三角”系统,这是以相反的顺序来求解的。然后将每个新计算出来的值代入方程即可。

注解:写出前向消去步骤的好方法是将右边包含进来作为额外的列。没有需要每步都复制 u,v,w,= ,所以我们最终写成:

242167102529200188123512142001801215122 
最后是三角形系统,准备回代。你可能会更喜欢这个安排,它保证左边方程运算的同时,右边也在运算-因为双方都在一起。

在一个更大的问题里,前向消元法比较费力。我们用第一个方程的倍数在第一个主元下边产生零。然后第二列将第二个主元下面的元素清零。当系统是三角形的时候,前向步骤就完成了; n 个方程中只有最后一个只包含乘数和主元。以相反的顺序回代,得到完整的解-从最后一个未知量开始,然后一个一个解决,知道第一个。

根据定义,主元不能为零。因为我们需要除它们。

消元法失效

在什么情况下消元法会失效呢?奇异情况下它肯定失效,一些非奇异情况也会失效。现在讨论这个可能似乎有点太早了-毕竟,我们好不容易知道算法如何工作。但失效的可能性揭示了方法本身。

答案是:有n个主元的话,问题只有一个解。该系统是非奇异的,并且它能用前向消元和回代求解出来。但是,如果零出现在主元的位置,消去法将停止-也可能暂时,也可能永久。系统可能是奇异的,也可能不是。

如果第一个系数为零,即左上角,那么就无法从其他方程中消去 u 。在中间的每个阶段同样如此。注意零可以出现在一个主元的位置上,即使那个位置的原始系数不是零。粗略地说,在执行消去过程之前,我们不知道零是否会出现。

在许多情况下是这一问题可以解决,并且消去法可以继续执行。这种系统仍算作非奇异;它只需要算法来修复。而其他情况下,失效是不可避免的。那些无药可救的系统是奇异的,他们没有解或者有无穷多个,不能找出完整的主元集合。

例1:非奇异(交换方程2,3就能恢复会非奇异的)

u2u4u+++v2v4v+++ w=_5w=_8w=_u+v2v++ w=_3w=_4w=_u+v2v++ w=_4w=_3w=_
这个系统现在变成三角形了,然后回带就能求解它。

例2:奇异(无法恢复)

u2u4u+++v2v4v+++w5w8w=_=_=_u+v+w3w4w=_=_=_
无论如何交换方程,都不可避免的在第二个主元位置上是零。方程本身可能有解也可能无解。如果最后两个方程是 3w=6,4w=7 ,那么没有解。如果这些两个方程碰巧是一致的- 3w=6,4w=8 -那么这个奇异情况有无穷个解。我们知道 w=2 ,但是第一个方程无法确定 u,v

后面我们会讨论系统非奇异的情况。然后交换方程可以产生完整的主元集合。还有奇异情况,消去法就比较麻烦。 3w 仍然可以消去 4w ,并且我们将3作为第二个主元。(不存在第三个主元)。目前来说,我们相信在不需更改变方程顺序的情况下,所有主元都不为零。这是最好的情况,我们继续讨论这种情况。

消元法的代价

我们另一个问题是非常实用的。对 n 个未知量的n个方程,消去法需要多少部单独的算术运算?如果 n 很大,电脑将去掉我们进行消元。然而所有的步骤都是已知的,所以我们能够推测出操作的数量。

眼下,忽略方程右边,只考虑左边的操作。这些操作有两种。除以主元找出要减的乘数()。当我们做减法的时候,我们不断遇到“乘法-减法”组合;含有主元的方程乘以 ,然后减去另一个方程。

假设我们将每个除法和每个乘法-减法,看做一次操作。在列1 中,为了实现每个为零,我们需要 n 次操作-一方面找乘数,另一方面整行的计算。第一个主元下面有 n1 行,所以消去法的第一阶段需要 n(n1)=n2n 次操作。(另一种计算 n2n 的方法是这样的:一共有 n2 项,除了第一行的 n 个外,一共有n2n项需要改变)下一步计算会更快,因为方程变得更简单了。

当消去法降为 k 个方程时,与第一阶段k=n时一样,采用同样的方法,可以得出仅需要 k2k 次操作就完成列的消去。最终,总的操作次数是 k 从1取到n时所有 k2k 的和:

Left side(12++n2)(1++n)=n(n+1)(2n+1)6n(n+1)2=n3n3
n=1,n=2,n=100 分别代入公式 13(n3n) ,前向消去法可能不需要任何步骤或两个步骤或大约有100万的三分之一步:

如果 n 是一个很大的值,那么运算大概需要13n3

如果规模翻了一番,并且系数几乎不为零,那么成本将是原来的8倍。

回代是相当快的。最后一个未知量只需一步操作(除以最后一个主元)。倒数第二个需要两步,等等。那么回代的总数是 1+2++n

右边有执行前向消元(跟左边一样,减去相同的倍数从而保证方程正确)。从第一个方程开始有 n1 次减法。最后右边一共需要 n2 步运算-远远小于左边的 n3/3 。前向和回代一共需要

Right side[(n1)+(n2)++1]+[1+2++n]=n2

三十年前,几乎每个数学家会猜测一个 n 阶系统不可能在少于n3/3次乘法的情况下计算出来。(甚至有定理来证明它,)。令人惊讶的是,这种猜测已被证明是错的。现在存在一种方法只需要 Cnlog72 次乘法!它依赖于一个简单的事实:二维空间中两个向量的两种组合似乎需要8次乘法,但他们可以7次就完成。这将 log82 的指数3降为 log722.8 。这项发现对找出更小的 n 值提供了支持。最后指数(在IBM机器上)低于2.376。幸运的是,对于消元法,常数C非常大,并且编码很麻烦,所以新方法更多地(或全部)在理论上很有趣。最新的问题是与多个并行处理器的代价。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值