《数值分析》实验报告实验序号:实验二 实验名称:列主元消去法解方程组学号:—姓名: 任课教师: 专业班级:L1、实验目的:用列主元Gauss消元法解n阶线性代数方程组:a ]内 + a |-,x9 + …+ a”n二加a21X! +a22x2 +..•+ a2n^n=b2+an2^+…+ am=尾其基本做法是把上述方程组通过列主元Gauss消元转化为一个等价的三角形方程组,然后 再进行回代就可以求出方程组的解列主元消元的基本做法是选取系数矩阵的每一列中绝 对值最大的作为主元,然后采取和顺序Gauss消元法相同的步骤进行,求得方程组的解要求显示出每一个列主元以及每一大步消元后的系数矩阵A(k)(Zr = 1,2,...,〃)和常数项b如伙= 1,2, 最后显示出方程组的解..(,= 1,2,...,〃)2、实验内容:(1)实验分析:1. 列主元Gauss消元法的算法思想:1. 输入增广矩阵B2. 对A=l, 2,…,a,循环:(a) 按列选主元a := max I aik Ij^i a.,i = k +n.(e) 消元:ciij := a~. -m .akj;i,j = k +nhi := hi 一 mikhk; i 〃3. 回代( n \&:= = "T,・・・,1\ 尸+1 7用右端项力来存放解X。
3、实验代码:#include #include #include using namespace std;int main(){int n,t,i,j;//float a[105][105];//double a[105][l05],max,d;coutendl;cout" 列主元素消元法nendl;coutendl;while (1)(cout"请输入方程阶数:”;cinn;for (i=l;i<=n;i++)coutvv”请输入增广矩阵第“vvivv”个方程的系数:”;for (t= 1 ;tv=n+1 ;t++){cina[i][t];}}int counter;for (i=l;ivn;i++){counter=i;max=fabs(a[i][i]);for (j=i+l;j<=n;j++){if (fabs(a[j][i])>max){max=fabs(a|j][i]);if(a[j][i]!=max)counter=j;}}coutv V”第” V vi v<”列的列主元为此列中绝对值最大的系数,列主元 素在第 ”vvi+lvv” 行” VV”第 ni"列:” vva[counter][i]vvendl;coutendl;for (int m=i;mv=n;m++)if (fabs(a[m][i])==max)coutn第” vvmvv”行与第ni"行进行交换"endl;//coutH列主元素在第nmH行""第Hi"列Hendl;//coutendl;for (t=i;tv=n+l;t++)(swap(a[m][t],a[i][t]);}}}coutn经过第“vvivv”步变换后增广矩阵为:Hendl;coutendl;for (int x=l ;xv=n;x++){for (int y= 1 ;yv=n+1 ;y++){coutsetw(6)a[x] [y]"}coutendl;}coutendl;for (int l=i+l;l<=n;I++)(for (int x=i+1 ;x<=n+1 ;x++)(a[l][x]=a[l][x]-a[i][x]*(a[l][i]/a[i][i]);}COU-AA--险aw-AAAA^BHnn^诺毕-AAgdL COHAAendl;for (im ZH=ZAnnN++) (for yn -」y<=n+ 一 ;y++)cou_AAs8w(6AAaN=yAA---; ) COHAAend-;)for (s--li-mvo 罕)a三 m+一Ha三 m+ma 三三; aEuHHfor (im p=j— 1」pvo;p;) d.pMva三三; mhpa【p=n+一Hasm+一一&5三+二*d;COUEAAend 一;courAA-^EtxsB-AAendAAend 一;for (m p」PAHmp++)COAA-X.AAPAA= H -AAa【p=n+一AAendL Burn 0;4、实验截图:0 0 -0.00555556 -0.00833333 7.166667000 0.000357143 -0.05输出X的值xl = 16 x2 = -120 x3 = 240 x4 = -140 请输入方程阶数:.5、实验结果分析:分析:消去第k各元素之前,要先找到列主元,找列主元的时间复杂度为n,然后对矩阵作 加法和乘法各(n-k) * (n-k)次,除法运算(n・k)次,对右端作加法和乘法各(n-k)次, 加法和乘法运算分别各n*(n-1)*(n-1/2)/3和n*(n-l)/2次,消元时还有n*(n・l)/2次除法运算, 另外回代过程加法和乘法运算各n*(n-l)/2,除法运算n次。
可以看出,主要的计算量值是在消元过程中对系数矩阵所做,乘法和加法各约n*n*n/3 次,而对右端项消元过程和回代过程所用运算量皆为n*n/2,总共n*n次乘法和加法运算在 变矩阵为上三角形矩阵的过程中,要进行一系列的四舍五入,在计算机中运算时就会出现大 量的舍入误差,因此对于有些方程求不出准确解只能求得近似解,而得不到准确的解,这表 明方程各行系数的量级相差很大时.列主元素法就会失效但是,列主元素法在大多数情况 下可以保证方程组得到比较准确的解而不消耗太多的额外搜索和交换的时间是一种相对而 言比较理想的算法c。