c++用类实现高斯消元法求解线性方程组的解_【2.2】将Ax=b变为Ux=c的高斯消元法...

本文详细介绍了如何使用高斯消元法来求解线性方程组,通过实例展示了从Ax=b变为Ux=c的过程,并探讨了主元的选择、矩阵乘法和线性独立等概念。还讨论了消元法中可能出现的主元缺失、奇异矩阵等问题及其解决方案。
摘要由CSDN通过智能技术生成

745ba3dc4fa30061725b9e8dc5cc3fbc.png

本章我们研究方程个数和未知数个数相等的情况,也就是线性方程组

equation?tex=A%5Cvec%7Bx%7D%3D%5Cvec%7Bb%7D+ 的系数矩阵
equation?tex=A 为方阵时的情况,让我们先看看3个方程3个未知数的例子:

equation?tex=%5Cbegin%7Bequation%7D+%5Cleft%5C%7B+%5Cbegin%7Baligned%7D+2x%2B4y-2z%26%3D2%5C%5C+4x%2B9y-3z%26%3D8%5C%5C-2x-3y%2B7z%26%3D10%5C%5C%5Cend%7Baligned%7D+%5Cright.+%5Cend%7Bequation%7D+%5Cleftrightarrow+%5Cbegin%7Bbmatrix%7D2%264%26-2%5C%5C4%269%26-3%5C%5C-2%26-3%267%5Cend%7Bbmatrix%7D%5Cbegin%7Bbmatrix%7Dx%5C%5Cy%5C%5Cz%5Cend%7Bbmatrix%7D%3D%5Cbegin%7Bbmatrix%7D2%5C%5C8%5C%5C10%5Cend%7Bbmatrix%7D

equation?tex=%5Cbegin%7Bequation%7D+%5Cleft%5C%7B+%5Cbegin%7Baligned%7D+2x%2B4y-2z%26%3D2%5C%5C+y%2Bz%26%3D4%5C%5C4z%26%3D8%5C%5C%5Cend%7Baligned%7D+%5Cright.+%5Cend%7Bequation%7D+%5Cleftrightarrow+%5Cbegin%7Bbmatrix%7D2%264%26-2%5C%5C0%261%261%5C%5C0%260%264%5Cend%7Bbmatrix%7D%5Cbegin%7Bbmatrix%7Dx%5C%5Cy%5C%5Cz%5Cend%7Bbmatrix%7D%3D%5Cbegin%7Bbmatrix%7D2%5C%5C4%5C%5C8%5Cend%7Bbmatrix%7D

对比上面两个方程组:第一个方程组的系数矩阵较为“复杂”,使得

equation?tex=x%2Cy%2Cz+ "纠缠”在一起不能求解;第二个方程组的系数矩阵是一个上三角阵(upper triangular matrix,记为
U),我们可以从最后一个方程开始求解未知数
equation?tex=z ,然后从下往上继续求解
equation?tex=y ,最后
equation?tex=x 。其实,上面两个方程组是等价同解的,高斯消元法(elimination)就是将
equation?tex=A%5Cvec%7Bx%7D%3D%5Cvec%7Bb%7D转换为同解的
equation?tex=U%5Cvec%7Bx%7D%3D%5Cvec%7Bc%7D+ ,再通过回代法(back substitution)自下而上求解线性方程组的算法。

现在我们就来仔细讨论一下高斯消元法。首先处理第一列,也就是消去第二个和第三个方程中

equation?tex=x 的系数,它们在矩阵中的位置为(2,1)(3,1),也就是第一列中(1,1)“下方”的元素。消元的过程如下:利用第一个方程中
equation?tex=x 的系数,也叫
第一个“主元”(pivot),找到合适的 “乘数”(multiplier)乘以主元所在的行,再整行相减。例如,为了消除(2,1)位置
equation?tex=x+ 的系数4,我们得到乘数为
equation?tex=%5Cfrac%7B4%7D%7B2%7D%3D2 ,用第二个方程减去第一个方程乘以2,这样(2,1)位置的4就变成0了:
equation?tex=%5Cbegin%7Bequation%7D+%5Cleft%5C%7B+%5Cbegin%7Baligned%7D+%5Cboxed%7B%7B%5Ccolor%7Bred%7D2%7D%7Dx%2B4y-2z%26%3D2%5C%5C+4x%2B9y-3z%26%3D8%5C%5C-2x-3y%2B7z%26%3D10%5C%5C%5Cend%7Baligned%7D+%5Cright.+%5Cend%7Bequation%7D+%5CRightarrow+
equation?tex=%5Cbegin%7Bequation%7D+%5Cleft%5C%7B+%5Cbegin%7Baligned%7D++%5Cboxed%7B%7B%5Ccolor%7Bred%7D2%7D%7Dx%2B4y-2z%26%3D2%5C%5C+y%2Bz%26%3D4%5C%5C-2x-3y%2B7z%26%3D10%5Cend%7Baligned%7D+%5Cright.+%5Cend%7Bequation%7D+ 。继续利用第一个“主元”消去第三行中的
equation?tex=x ,即(3,1)位置的-2,乘数为
equation?tex=%5Cfrac%7B-2%7D%7B2%7D%3D-1 ,用第三个方程减去-1倍的第一个方程:
equation?tex=%5Cbegin%7Bequation%7D+%5Cleft%5C%7B+%5Cbegin%7Baligned%7D++%5Cboxed%7B%7B%5Ccolor%7Bred%7D2%7D%7Dx%2B4y-2z%26%3D2%5C%5C+y%2Bz%26%3D4%5C%5C-2x-3y%2B7z%26%3D10%5Cend%7Baligned%7D+%5Cright.+%5Cend%7Bequation%7D+%5CRightarrow
equation?tex=%5Cbegin%7Bequation%7D+%5Cleft%5C%7B+%5Cbegin%7Baligned%7D++%5Cboxed%7B%7B%5Ccolor%7Bred%7D2%7D%7Dx%2B4y-2z%26%3D2%5C%5C+y%2Bz%26%3D4%5C%5Cy%2B5z%26%3D12%5Cend%7Baligned%7D+%5Cright.+%5Cend%7Bequation%7D ,(3,1)位置的-2也变成0了。至此,消
equation?tex=x这个元的任务就完成了,第一列中主元以下元素都变成了
equation?tex=0
注意:右边
equation?tex=%5Cvec%7Bb%7D的元素也要相应改变,方程整行相减才能保证解不变。

接下来消元法要继续对付

equation?tex=y ,这时要利用第二个方程中
equation?tex=y 的系数,也就是第二个“主元”
equation?tex=1 来消元。消元的过程依旧是找到“乘数”和相减,以此将第二列中主元以下的元素变为
equation?tex=0+
equation?tex=%5Cbegin%7Bequation%7D+%5Cleft%5C%7B+%5Cbegin%7Baligned%7D++%5Cboxed%7B%7B%5Ccolor%7Bred%7D2%7D%7Dx%2B4y-2z%26%3D2%5C%5C+%5Cboxed%7B%7B%5Ccolor%7Bred%7D1%7D%7Dy%2Bz%26%3D4%5C%5Cy%2B5z%26%3D12%5Cend%7Baligned%7D+%5Cright.+%5Cend%7Bequation%7D%5CRightarrow
equation?tex=%5Cbegin%7Bequation%7D+%5Cleft%5C%7B+%5Cbegin%7Baligned%7D++%5Cboxed%7B%7B%5Ccolor%7Bred%7D2%7D%7Dx%2B4y-2z%26%3D2%5C%5C+%5Cboxed%7B%7B%5Ccolor%7Bred%7D1%7D%7Dy%2Bz%26%3D4%5C%5C%5Cboxed%7B%7B%5Ccolor%7Bred%7D4%7D%7Dz%26%3D8%5Cend%7Baligned%7D+%5Cright.+%5Cend%7Bequation%7D ,同时得到第三个主元是
equation?tex=4

主元就是每一行中第一个不为0的数,我们利用主元消去它所在列“下方”所有元素,如果 我们把消去(i, j)位置元素的乘数记为

equation?tex=l_%7Bij%7D ,消元的步骤就是从第i行减去
equation?tex=l_%7Bij%7D 乘第j行,其中
equation?tex=l_%7Bij%7D
等于第i行第j列待消除的元素除以第j行第j列的主元。注意:(i, j)位置元素受之前消元步骤的影响,很可能不等于A(i, j)。只要主元个数足够,不管有多少个方程,都可以通过不断的重复这个消元过程,将矩阵变为上三角阵(可能需要方程整行互换)。主元在本来的系数矩阵
equation?tex=A 中“隐藏”,而在化简后的上三角阵
equation?tex=U 中“显现”在对角线上。

高斯消元法将

equation?tex=A%5Cvec%7Bx%7D%3D%5Cvec%7Bb%7D 化为
equation?tex=U%5Cvec%7Bx%7D%3D%5Cvec%7Bc%7D 的目的是使得方程组可以自下而上求解,换句话说,我们可以通过消元之后的方程组的最后一个方程解得最后一个未知数,然后
“回代“到上一个方程,就又可以解得倒数第二个未知数,自下而上直到第一个方程,所有未知数就都求解出来了。上例中
equation?tex=%5Cbegin%7Bequation%7D+%5Cleft%5C%7B+%5Cbegin%7Baligned%7D++%5Cboxed%7B%7B%5Ccolor%7Bred%7D2%7D%7Dx%2B4y-2z%26%3D2%5C%5C+%5Cboxed%7B%7B%5Ccolor%7Bred%7D1%7D%7Dy%2Bz%26%3D4%5C%5C%5Cboxed%7B%7B%5Ccolor%7Bred%7D4%7D%7Dz%26%3D8%5Cend%7Baligned%7D+%5Cright.+%5Cend%7Bequation%7D ,容易解得
equation?tex=z%3D2%2Cy%3D2%2Cx%3D-1

例1:下面是矩阵A通过消元法变为上三角矩阵U的过程:

equation?tex=A%3D%5Cbegin%7Bbmatrix%7D1%261%260%5C%5C1%262%261%5C%5C0%261%262%5Cend%7Bbmatrix%7D%5CRightarrow+%5Cbegin%7Bbmatrix%7D1%261%260%5C%5C0%261%261%5C%5C0%261%262%5Cend%7Bbmatrix%7D%5CRightarrow%5Cbegin%7Bbmatrix%7D1%261%260%5C%5C0%261%261%5C%5C0%260%261%5Cend%7Bbmatrix%7D%3DU 。求A的主元和乘数
equation?tex=l_%7B21%7D%2Cl_%7B31%7D%2Cl_%7B32%7D

解:第1个主元从A中就可以看出,它就是

equation?tex=A%281%2C1%29 ,即1。
equation?tex=l_%7B21%7D 是消除(2,1)位置元素的乘数,它等于被消除元素1除以该列的主元1:
equation?tex=%5Cfrac%7B1%7D%7B1%7D%3D1 。第2行减去
equation?tex=l_%7B21%7D 倍的第1行之后,得到第2个主元1,它在A中是隐藏的。
equation?tex=l_%7B31%7D%3D0 ,因为(3,1)位置没有元素需要消元。最后,
equation?tex=l_%7B32%7D 是消除(3,2)位置元素的乘数(注意是中间那个矩阵的(3,2)位置元素而不是A(3,2),之前的消元步骤改变了那个位置的元素),它等于1除以第二个主元1:
equation?tex=%5Cfrac%7B1%7D%7B1%7D%3D1 。第3行减去
equation?tex=l_%7B32%7D 倍的第2行之后,得到第3个主元1。

仔细观察,A是一个带状矩阵,非零元素在主对角线和相邻的两条对角线上,这使得A的左下角和右上角都是0。我们可以断定,右上角的0原封不动的出现在了消元后的上三角矩阵U中,左下角的0使得相应的乘数

equation?tex=l_%7Bij%7D 为0。读者可以思考一下,如果0在A矩阵的“内部”,是没有这样的性质的。

例2:如果

equation?tex=A+ 是下三角矩阵,那么
equation?tex=U 呢?比如:
equation?tex=A%3D%5Cbegin%7Bbmatrix%7Da%260%260%260%5C%5Cb%26c%260%260%5C%5Cd%26e%26f%260%5C%5Cg%26h%26i%26j%5Cend%7Bbmatrix%7D ,那么
equation?tex=U%3D%5Cbegin%7Bbmatrix%7Da%260%260%260%5C%5C0%26c%260%260%5C%5C0%260%26f%260%5C%5C0%260%260%26j%5Cend%7Bbmatrix%7D
equation?tex=U 是一个对角阵,并且
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值