最优化方法实验一--线性方程组求解

 实验目的与要求

1.掌握高斯消元法求解线性方程

2.掌握Matlab编写代码熟悉画图工具,进行实验并验证结果;

3.锻炼数学描述能力,提高报告书写能力 

 问题

模型建立求解

 1、定理

根据线性代数知识,引入以下定理:

定理1:一n阶方阵A可逆的充分必要条件为det(A)\neq 0

定理2:若一方阵可逆,则其逆矩阵唯一

定理3:将一个线性方程组的增广矩阵施行一系列初等行变换后得到的矩阵作为增广矩阵,其对应的线性方程组与原方程组同解

定理4:将行列式的任意倍加到另一行上,行列式的值不变

定理5:一n阶方阵A是可逆的,则对于A和其逆矩阵A^{-1}有:AA^{-1}=A^{-1}A=I,其中I为n阶单位矩阵

2、高斯消元法求解

2.1高斯消元法思想

        根据定理1可知,当det(A)\neq 0,A是可逆的,对于线性方程组Ax=b,可写成x=A^{-1}b,又根据定理2,线性方程组有唯一解。在此不妨设det(A)\neq 0

        设矩阵A及其和向量b组成的增广矩阵\bar{A}=\left ( A, b \right )分别为:

A=\begin{bmatrix} a_{11}& a_{12}& \cdots & a_{1n}\\ a_{21}& a_{22}& \cdots & a_{2n}\\ \vdots & \vdots & \ddots & \vdots \\ a_{n1}& a_{n2}& \cdots & a_{nn}\\ \end{bmatrix}      \bar{A}=\begin{bmatrix} a_{11} & a_{12} & \cdots & a_{1n}& b_{1}\\ a_{21} & a_{22} & \cdots & a_{2n}& b_{2}\\ \vdots & \vdots & \ddots & \vdots & \vdots \\ a_{n1} & a_{n2} & \cdots & a_{nn}& b_{n} \end{bmatrix}

\bar{A}进行初等行变换,由于det(A)\neq 0,所以矩阵每一列都至少有一个元素不为0。不妨假设a_{11}\neq 0,定义行乘数:m_{i1}=\frac{​{a_{i1}}^{(1)}}{​{a_{11}}^{(1)}}, i=2,3,....,n而后根据定理3,可进行初等行变换,使第i行减去第一行乘以m_{i1}的值,即:

{a_{ij}}^{(2)}={a_{ij}}^{(1)}-m_{i1}{a_{1j}}^{(2)},{b_{i}}^{(2)}={b_{i}}^{(1)}-m_{i1}{b_{1}}^{(1)}, i,j=2,3,...,n

于是原增广矩阵变成:

\bar{A}^{(2)}=(A^{(2)},b^{(2)})=\begin{bmatrix} {a_{11}}^{(2)} & {a_{12}}^{(2)}& \cdots & {a_{1n}}^{(2)}& {b_{1}}^{(2)}\\ 0 & {a_{22}}^{(2)}& \cdots & {a_{2n}}^{(2)}& {b_{2}}^{(2)}\\ \vdots & \vdots & \ddots & \vdots &\vdots \\ 0 & {a_{n2}}^{(2)}& \cdots & {a_{nn}}^{(2)}& {b_{n}}^{(2)}\\ \end{bmatrix}

当经n-1次上述变换,增广矩阵最终变成一个阶梯型矩阵:

\bar{A}^{(n)}=(A^{(n)},b^{(n)})=\begin{bmatrix} {a_{11}}^{(n)} & {a_{12}}^{(n)}& \cdots & {a_{1n}}^{(n)}& {b_{1}}^{(n)}\\ 0 & {a_{22}}^{(n)}& \cdots & {a_{2n}}^{(n)}& {b_{2}}^{(n)}\\ \vdots & \vdots & \ddots & \vdots &\vdots \\ 0 & 0& \cdots & {a_{nn}}^{(n)}& {b_{n}}^{(n)}\\ \end{bmatrix}

{a_{ij}}^{(n)}的余子式为M_{ij},按第一列展开计算det(A^{(n)})

det(A^{(n)})={a_{11}}^{(n)}M_{11}-{a_{21}}^{(n)}M_{21}+...+(-1)^{1+n}{a_{n1}}^{(n)}M_{n1}={a_{11}}^{(n)}M_{11}

det(A^{(n)})\neq 0,有{a_{11}}^{(n)}\neq 0M_{11}\neq 0而:

M_{11}={a_{22}}^{(n)}M_{22}^{'}-{a_{23}}^{(n)}M_{23}^{'}+...+(-1)^{1+n-1}{a_{n1}}^{(n)}M_{n1}^{'}={a_{22}}^{(n)}M_{22}^{'}

所以{a_{22}}^{(n)}\neq 0M_{22}^{'}\neq 0,以此类推{a_{ii}}^{(n)}\neq 0,i=1,2,...,n,于是有{a_{nn}}^{(n)}x_{n}={b_{n}}^{(n)},得到唯一解x_{n}=\frac{​{b_{n}}^{(n)}}{​{a_{nn}}^{(n)}},将x_{n}回代得到x_{n-1}唯一解,所以线性方程组有唯一解:

\left\{\begin{matrix} x_{n}=\frac{​{b_{n}}^{(n)}}{​{a_{nn}}^{(n)}}\\ x_{i}=\frac{​{b_{i}}^{(n)}-\sum_{j=i+1}^{n}{a_{ij}}^{(n)}x_{j}}{​{a_{ii}}^{(n)}},i=n-1,n-2,...,1 \end{matrix}\right.

2.2高斯消元步骤

构造增广矩阵:使用系数矩阵A和常数向量b构造增广矩阵\bar{A}=(A,b)

初等行变换消元:定义行乘数m_{ik}=\frac{​{a_{ik}}^{(k)}}{​{a_{kk}}^{(k)}},i=k+1,...,n,若行乘数存在,则通过一系列初等行变换,即:第i行—第k行×m_{ik},重复步骤将增广矩阵转化为阶梯形矩阵;若行乘数不存在,证明线性方程组不存在唯一解;

回代求解:从最后一行开始,求出x_{n}=\frac{​{b_{n}}^{(n)}}{​{a_{nn}}^{(n)}},将已求出值的未知数代入方程,求解出另一个未知数,然后根据:x_{i}=\frac{​{b_{i}}^{(n)}-\sum_{j=i+1}^{n}{a_{ij}}^{(n)}x_{j}}{​{a_{ii}}^{(n)}},i=n-1,n-2,...,1依次向上回代,求解出其他未知数。

2.3算法复杂的分析

        第k步消元时乘法运算次数为:(n-k)(n-k+1)除法次数为:(n-k)。所以第k步消元乘除法运算总次数为(n-k)(n-k+2),k=1,2,...,n-1。完成n-1步消元乘除法运算总次数为\sum_{k=1}^{n-1}(n-k)(n-k+2)=\frac{n^{3}}{3}+\frac{n^{2}}{2}-\frac{5n}{6},回代过程乘除法的运算总次数为\sum_{i=1}^{n}(n-i+1)=\frac{n^{2}}{2}+\frac{n}{2}。所以高斯消元法乘除法运算总次数为\frac{n^{3}}{3}+n^{2}-\frac{n}{3},当n趋于无穷大,算法复杂度为O(n^{3})

2.4结果测试

  使用问题所给的矩阵A与向量b,求出的结果如图1所示,将结果代回线性方程组,可以验证得结果正确。导入附件A_b.mat数据,计算结果如图2所示。

3、用高斯消元法求矩阵A的逆

3.1高斯消元求A的逆思想

        矩阵A、设的逆矩阵A^{-1}及单位矩阵I分别为:

A=\begin{bmatrix} a_{11} & a_{12} & \cdots & a_{1n}\\ a_{21} & a_{22} & \cdots & a_{2n}\\ \vdots & \vdots & \ddots & \vdots \\ a_{n1} & a_{n2} & \cdots & a_{nn} \end{bmatrix} , A^{-1}=\begin{bmatrix} x_{11} & x_{12} & \cdots & x_{1n}\\ x_{21} & x_{22} & \cdots & x_{2n}\\ \vdots & \vdots & \ddots & \vdots \\ x_{n1} & x_{n2} & \cdots & x_{nn} \end{bmatrix}

A^{-1}的每一列为x_{i}I每一列为y_{i},根据定理5:AA^{-1}=I,有:Ax_{i}=y_{i}。要求解逆矩阵A^{-1},则要求出每一个x_{i},即求解线性方程组Ax_{i}=y_{i},i=1,2,...,n。根据高斯消元法求解线性方程组的步骤,构造增广矩阵\bar{A_{i}}=\left ( A,y^{i} \right )并将A化成上三角矩阵,求出x_{in}后回代。

        由于每求解一次x_{i}都需要将矩阵A化成上三角矩阵,为了降低时间复杂度,构造一个矩阵\bar{A}=(A,I),将单位阵添加到A的右侧,这样以后,通过初等行变换直至将A化成上三角矩阵,就能得到每一个初等行变换后增广矩阵\bar{A_{i}},此时A矩阵只需经过一次化成上三角矩阵的过程。

(A,I)=\begin{bmatrix} a_{11} & a_{12} & \cdots & a_{1n} & \vdots & 1 & 0 & \cdots & 0\\ a_{21} & a_{22} & \cdots & a_{2n} & \vdots & 0 & 1 & \cdots & 0\\ \vdots & \vdots & \ddots & \vdots & \vdots & \vdots & \vdots & \ddots & \vdots \\ a_{n1} & a_{n2} & \cdots & a_{nn} & \vdots & 0 & 0 & \cdots & 1 \end{bmatrix}

3.2高斯消元求A的逆算法步骤

高斯消元法求A的逆

  1. 判断是否矩阵是否可逆:利用matlab函数det,计算det(A)是否等于0,若不等于0,则矩阵可逆,执行下列步骤,否则结束算法
  2. 构造矩阵\bar{A}:将系数矩阵A和与其同型的单位阵I合并成一个新矩阵\bar{A}=(A,I)\bar{A}=(A,I)
  3. 初等行变换消元定义行乘数m_{ik}=\frac{​{a_{ik}}^{(k)}}{​{a_{kk}}^{(k)}},重复步骤3,通过一系列初等行变换,即:第i行减 第k行乘m_{ik}\bar{A}化成阶梯形矩阵
  4. 回代求解:与求线性方程组类似,从最后一行开始,求出x_{in}=\frac{​{y_{n}}^{(n)}}{​{a_{nn}}^{(n)}},将已求出值的未知数代入方程,求解出一个未知数

3.3算法复杂度分析

在完成n-1步的消元过程中,使用高斯消元法求解线性方程组时,乘除法运算总次数为\sum_{k=1}^{n-1}(n-k)(n-k+2)=\frac{n^{3}}{3}+\frac{n^{2}}{2}-\frac{5n}{6},而在求解逆矩阵时,进行消元步骤矩阵的规模约为解线性方程组时的两倍,所以乘除法运算总次数约为(\frac{n^{3}}{3}+\frac{n^{2}}{2}-\frac{5n}{6})\times 2

回代过程中,求解线性方程组时乘除法的运算总次数为\sum_{i=1}^{n}(n-i+1)=\frac{n^{2}}{2}+\frac{n}{2},而求解逆矩阵时要进行n次回代过程,所以乘除法运算总次数为(\frac{n^{2}}{2}+\frac{n}{2})\times n

所以乘除法运算总次数约为(\frac{n^{3}}{3}+\frac{n^{2}}{2}-\frac{5n}{6})\times 2+(\frac{n^{2}}{2}+\frac{n}{2})\times n=\frac{7n^{3}}{6}+\frac{3n^{2}}{2}-\frac{5n}{3}。当n趋于无穷大,算法复杂度为O(n^{3})

3.4结果测试

计算问题中给出A矩阵的逆A^{-1},并计算AA^{-1}A^{-1}A,所得结果都为单位矩阵,如图3所示,验证了算法正确性。导入A_b.mat数据,计算得部分结果如图4所示。

4、列主元消去法

4.1列主元消元法思想

列主元消元是基于高斯消元法的改进。在使用高斯消元法求解线性方程组时,在计算行乘数时若除数远远小于被除数,会造成较大误差。例如当A、b及\bar{A}的值为:

A=\begin{bmatrix} 0.0001 & 1\\ 1 & 1 \end{bmatrix},b=\begin{bmatrix} 1\\ 2 \end{bmatrix},\bar{A}=(A,b)=\begin{bmatrix} 0.0001 & 1 & 1\\ 1 & 1 & 2 \end{bmatrix}

根据高斯消元法步骤,行乘数m_{1}=1\div 0.0001=1000,增广矩阵变成:

\bar{A}=\begin{bmatrix} 0.0001 & 1 & 1\\ 1 & 1 & 2 \end{bmatrix}\overset{m_{1}=\frac{1}{0.0001}=10^{4}}{\rightarrow}\bar{A}^{(1)}=\begin{bmatrix} 1 & 1 & 1\\ 0 & 1-10^{4} & 2-10^{4} \end{bmatrix}\approx \begin{bmatrix} 1 & 1 & 1\\ 0 & -10^{4} & -10^{4} \end{bmatrix}

得到x=\begin{bmatrix} 0 & 1 \end{bmatrix}^{T}\rightarrow Ax=\begin{bmatrix} 1 & 1 \end{bmatrix}^{T},与实际值相比相差巨大。为了避免该情况,将第一行与第二行交换,得到\bar{A}、行乘数m_{1}\bar{A}^{(1)}分别为:

\bar{A}=\begin{bmatrix} 1 & 1 & 2\\ 0.0001 & 1 & 1 \end{bmatrix}\overset{m_{1}=\frac{0.0001}{1}=10^{-4}}{\rightarrow}\bar{A}^{(1)}=\begin{bmatrix} 1 & 1 & 2\\ 0 & 1-10^{-4} & 1-2\times 10^{-4} \end{bmatrix}\approx \begin{bmatrix} 1 & 1 & 2\\ 0 & 1 & 1 \end{bmatrix}

回代得到x=\begin{bmatrix} 1 & 1 \end{bmatrix}^{T}\rightarrow Ax=\begin{bmatrix} 1 & 2 \end{bmatrix}^{T},结果比高斯消元法精确。

4.2列主元消元法步骤

列主元消元法

  1. 构造增广矩阵:将系数矩阵A和常数向量b合并成一个增广矩阵\bar{A}=(A,b)
  2. 主元选取:选择第k(k=1,2,...,n)列中绝对值最大的元素所在的行,并将该行与第k行交换位置
  3. 初等行变换消元:定义行乘数m_{ik}=\frac{​{a_{ik}}^{(k)}}{​{a_{kk}}^{(k)}},i=k+1,...,n,通过一系列初等行变换,即:第i行减第k行行乘m_{ik},重复步骤2、3,将增广矩阵转化为阶梯形矩阵
  4. 回代求解:从最后一行开始,求出x_{n}=\frac{​{b_{n}}^{(n)}}{​{a_{nn}}^{(n)}},将已求出值的未知数代入方程,求解出一个未知数,然后根据:x_{i}=\frac{​{b_{i}}^{(n)}-\sum_{j=i+1}^{n}{a_{ij}}^{(n)}x_{j}}{​{a_{ii}}^{(n)}},i=n-1,n-2,...,1依次向上回代,求解出其他未知数。

4.3算法复杂度分析

列主元消元是在高斯消元的基础上增加了主元选取和交换两行的操作,而主元选取是在每一列对角线之下找到最大的元素,第k次选取时要比较n-k+1(k=1,2,...,n-1),一共需要比较\sum_{k=1}^{n-1}(n-k+1)=\frac{n^{2}}{2}-\frac{n}{2}-1次。每次交换两行的时间复杂度为O(n),最坏情况为交换n-1次,时间复杂度为O(n^{2})。当n趋于无穷,高斯消元法求解线性方程组的时间复杂度为O(n^{3}),所以总的时间复杂度为O(n^{3})

4.4结果测试

使用问题(3)中所给的B矩阵作为测试数据,运行代码得到结果如图5所示,将该结果代回线性方程组可验证得其正确性。导入A_b.mat数据之后,计算结果如图6所示。

5、高斯消元与列主元消元的差距

导入A_b.mat附件数据,分别计算高斯消元与列主元消元计算结果与准确值之间的差值的绝对值,除以准确值以计算误差,结果分别如图7、图8所示。可以看到列主元的误差比高斯消元的小两个数量级,列主元优化效果较明显。

  • 18
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值