数值分析计算实习题列主元高斯消去法解线性方程组.docx
- 文档编号:5547221
- 上传时间:2022-12-19
- 格式:DOCX
- 页数:14
- 大小:32.39KB
数值分析计算实习题列主元高斯消去法解线性方程组.docx
《数值分析计算实习题列主元高斯消去法解线性方程组.docx》由会员分享,可在线阅读,更多相关《数值分析计算实习题列主元高斯消去法解线性方程组.docx(14页珍藏版)》请在冰豆网上搜索。
数值分析计算实习题列主元高斯消去法解线性方程组
数值分析计算实习题
第5章解线性方程组的直接方法
【选题
列主元高斯消去法解线性方程组。
书上的计算实习题1、2、3都要求用列主元高斯消去法解线性方程组,所以考虑写一个普适的程序来实现。
对于线性方程组Ax二b,程序允许用户从文件读入矩阵数据或直接在屏幕输入数据。
文件输入格式要求:
(1)第一行为一个整数n(2<=n<=100),表示矩阵阶数。
(2)第2〜n+1行为矩阵A各行列的值。
(3)第n+2〜n+n+2行为矩阵b各行的值。
屏幕输入:
按提示输入各个数据。
输出:
A.b、det(A).列主元高斯消去计算过程、解向量X。
【算法说明】
设有线性方程组Ax=b,其中设A为非奇异矩阵。
方程组的增广矩阵为
«12
«21
[Nb]二
第1步(k=l):
首先在A的第一列中选取绝对值最大的元素®I,作为第一步的主元素:
«||H0
然后交换(A,b)的第1行与第I行元素,再进行消元计算。
设列主元素消去法已经完成第1步到第k・1步的按列选主元,交换两行,消元计算得到与原方程组等价的方程组A(k)x=b(k)
•••4)
忒
輕
49,
吐-…唸)
■
■
■
■
•
•
■
■
■
■
■
■
火
*
■
〃伏L
■
[A・b]T[A(6),b〃)]
第k步计算如下:
对于k=l,2,•・・・,0-1
(1)按列选主元:
即确定t使
(2)如果tHk,则交换[A,b]第t行与第k行元素。
(3)消元计算
4*J叫-鱼(-"+1,…,H)
%
吗〈-《y+〃如伽(fJ二R+1,-/)b-〈-勺+加汝仇,(i=/c+1,…,《)
消元乘数mik满足:
—M1,(,二斤+1,•••,«)fet
e
(4)回代求解
XI<~
n
(%-D内)
9(j二《一1,«—2・・・・J)
【程序】
/*
【普适列主元消去法解线性方程组】对于线性方程组:
Ax=b输入:
[选择屏幕直接输入]
1.A的行阶数n(l<=11<=100)
2.A的值
3.b的值
[选择读取文件1文件名(和主程序同级文件夹下)
输出:
I.A
2•b
3•det(A)
4解向疑X*/
nciude
^include
#include
doubledetA:
intn.mark二1;
〃读入数据
voidinput(){
intij:
charch[20],name[100];
HLE*f;
printf("\iv-An是否从文件读取数据(Y/N):
”);scanf(”%st&ch);
if(ch[01=Hlch10]=y)(prinif("请输入文件名(包括扩展需):
;scanfname):
f=fopcn(name「T');
fscanfCf/*%d*\&n);
ford=0:
i *%ir\&A[i]j)): for(i=0: i fscanf(「%F-&b[i]); else{ prin氓"请输入A的阶数: ");scanf('%d%d\&n): prinifC请输入A的值: ");for(i=0: iVn: i++) for(j=0: j j++)scanf("%lf\&A[i]U]); phnifC诘输入b的值: ”); for(i=0: i scanf(,‘%lf\&bLi]): 〃讣算行列式的值 doubledet{doubles[105](105]jnim){ intz.jk doubleb[105][105Klotal=O.r;/*b[Nl[N]用于存放,在矩阵s[Nl[N冲元索s[0]的余了式灯辻(m>2){ for(z二0: zVm: z++){ for(j=0;jVm•1j++) for(k=0: kvn卜l;k++) if(k>=z) bUKk]=sU+1](k+1]; else bLi][k]=s[j+l][k]; if(z%2==0) r=s[0) (2)*dcKb.m-1): /*递归调用制 else r=(~1)*s[0](z]*det(b.mT); totai二total+r; elseif(m==2) total=s[0][0]*s(l][l]-s[0](l]*s[l][01: elseif(m==1) total= s[0][0]; returntotal; //输出AJib和del(A)voidouipui_l(){intij; primlTAW); for(i=0;i i++){for(j=0: j j++) printfC"%15.4f\A[i]1j]); prinif(W); prinlf(5b二\rf); for{i=0;i i++) prinifC%15.41\iV\b[i]): printf(,z\ndet(A)=%•4f\n”•delA); 〃主il•算函数voidcouni_x(){ intij,k: intmax;doubletmpjnik; 〃构造增广矩阵 for{i=0;i〈n: i++){ foro-0: j A_B[i](n]=b[ij: prinlHAn展75消元过程的增广矩阵): \j门;prinlfC,A_B=\n,/,);for(i=0;i i++){ for(j=0: j<=n: j++) primf(”%15•4代 prinif(W); 〃按列选主元 for(k=0: k k++){ max=k: for(i=k: iVn;i++) if(abs(A~B[i][k])>abs(A_B(max][kJ))max=i; 〃若A|maxi[k]=0.即del(A)=0•则无唯一解.退出il•算辻(A_B(maxi[k]=0){mark=0;break: .ifCmax! =k)( for(j=k: j<=n;j++)(tnip=A_BLk]1jl: A_B[k]U]=A_BZmax]U];A_B[max][j]=tmp; 〃消元il•算for(i=k+l;ivn: i++){A_BEi][kl=A_B[i](kl/A_B[k]rk]; for(j=k+1jVn;j++) A_B(iIU]二A_B[i][j]•A_B[il(k]* A_B[i][n]=(nl-*A_B(k][nJ: prinif{〃A_B二\n〃): for(i=0: i j<=n;j++) prinlfW); 〃若AEnlln]=OJiPdct⑷二0,则无唯一解,退出讣算辻(A_B[n-11[n-1]=0) mark=0; else{ x[n-l]=A_B[n-1][n]=A_B[n-ll[n]/A_B[n-1][n-1]: for(i=n-2: i>=0;i-){x(il=A_B[i](n]=A_B[i](n]; for(j=i+l;j j++) x[i]二-二AB[i]U]*ABU][n]; /7输Hl解向量Xvoidoulpul_2(){intij; if(! mark) prinifC\«该方程没仃唯-解! \n“);else{ prin辻("\iib=\n*): for(i=0: i prinlf%15•5f\iV;x[i_); intmain(){ charch[20]: prinif(“普适列主元消去次解线性方程组5”); while (1){ inputO;detA二dei(A.n); output_l(); count_x();outpul_2{); 〃读取数据 〃汁算A的行列式 〃输出A和b和det(A) 〃主计算函数 〃输出解向量X prin辻(〃\ii\n是舎继续(Y/N)「);scanf(n%s”•&ch): ifCch(O]二二YIIch[01==>')continue: else break: 【结果测试】 一共采用了书上的例题和习题内的5组数据(drd5),均采用文件读入方式 读取,计算结果,与matlab运算结果进行比对均相符合,基木验证了程序的正 确性。 下面给出各组数据和运行结果: [数据] dLtxt 3•016•031.99 L274•16•1•230.987481934d2,txi 3•006-031.99 L274.16-1230•99-4.81934d3•lxi 0.0012.0003.000-1.0003.712462320001.0725.643 L0002.0003.000d4•lxi 10-701*32.099999625-15-1 2102 8 5.900001 5d5•lxi 4 10787 7365 86109 75910 32 23 33 31 [运行结果] 普适列主元消去法解线性方程组 是否从文件读取数据CY/N): y请输入文件名(包括扩展: F1): dl.txtA二 3.0100 6,0300 1.9900 L2700 43600 -12300 0.9870 一4・8100 93400 L0000 L0000 L0000 det(A)二-0.0305 展示消元过程(A_B为A的增广矩阵): AB二 3.0100 6,0300 1.9900 1.0000 L2700 43600 -12300 1.0000 0.9870 一4・8100 9.3400 1.0000 3.0100 6,0300 L9900 roooo 0.0000 1.6158 20696 0.5781 0,0000 67873 &6875 0.6721 3.0100 6.0300 1.9900 i.0000 0,0000 67873 &6875 0.6721 0,0000 0.0000 -0.0015 0.7381 3.0100 6,0300 1.9900 roooo 0,0000 67873 &6875 0.6721 0.0000 0.0000 -0.0015 0.7381 1592.59962-63L91138M93.61772 是否继续(Y/N): y 是否从文件读取数据(Y/N): y请输入文件名(包括扩展名): d24xt 3.0000 1.2700 0,9900 6.0300 4J600 -4.8100 1.9900 -12300 9.3400 bOOOO L0000 L0000 det(A)=-04070 展示消元过程(A.B为A的增广矩阵): 3.0000 1.2700 0,9900 6.0300 4J600 -4.8100 1.9900 -12300 9.3400 1.0000 L0000 L0000 3.0000 6.0300 1.9900 1.0000 0,0000 1.6073 -2.0724 0.5767 0,0000 67999 &6833 0.6700 3.0000 6,0300 L9900 L0000 AB 0,0000 -6.7999 &6833 0.6700 0.0000 0.0000 -0.0200 0.7350 3.0000 6.0300 L9900 L0000 0,0000 •6•7999 &6833 0.6700 0.0000 0.0000 00200 0.7350 119.52734 -47.14260 -36.84026 是否继续(Y/N): y 是否从文件读取数据(Y/N);y 请输入文件名(包括扩展塔): d3.txt A二 0.0010 2.0000 3-0000 -L0000 3.7120 4.6230 20000 L0720 5.6430 L0000 2.0000 3.0000 det(A)=11.8660 展示消兀过程(A-B为A的增广矩阵): AB= 0.0010 2.0000 3.0000 1.0000 -L0000 3.7120 4.6230 2.0000 20000 L0720 5.6430 3,0000 AB= -2-0000 1.0720 5.6430 3.0000 0.0000 3.1760 L8015 0.5000 0.0000 2.0005 3.0028 1.0015 AB= 20000 1.0720 5.6430 3.0000 0.0000 3J760 L8015 0.5000 0,0000 0.0000 1.8681 0.6866 20000 L0720 5.6430 3.0000 0,0000 3.1760 1.8015 0.5000 0.0000 0.0000 L8681 0.6866 -0.49040-0.05104 0.36752 是否继续(Y/N): y 是否从文件读取数据(Y/N): y请输入文件需(包括扩展名): d4.txt A二 10.0000 -7・0000 0.0000 1.0000 -3.0000 2J000 6.0000 2.0000 5.0000 -1.0000 5.0000 -L0000 2.0000 L0000 0.0000 2,0000 &0000 5.9000 5.0000 1.0000 det(A)=-762.0001 展示消元过程(A_B为A的增广矩阵): AB二 10,0000 -7.0000 0.0000 L0000 &0000 -3.0000 2J000 6.0000 2.0000 5.9000 5.0000 -L0000 5.0000 -L0000 5.0000 2.0000 L0000 o.oooo 2,0000 1.0000 AB= 10.0000 -7.0000 0,0000 1.0000 &0000 0,0000 -0.0000 6.0000 2.3000 &3000 0.0000 2.5000 5.0000 -1.5000 L0000 0.0000 24000 0.0000 L8000 -0.6000 AB= 10,0000 -7.0000 o.oooo L0000 &0000 0.0000 2.5000 5.0000 -L5000 L0000 0.0000 0,0000 6.0000 23000 83000 0,0000 0.0000 48000 3.2400 -1.5600 10,0000 -7.0000 0.0000 1.0000 &0000 AB= 0,0000 2.5000 5.0000 -L5000 L0000 0,0000 0.0000 6.0000 2.3000 83000 0.0000 0.0000 0.0000 5.0800 5.0800 10,0000 -7.0000 0.0000 1.0000 &0000 0,0000 2.5000 5.0000 -L5000 L0000 0,0000 0.0000 6.0000 2.3000 83000 0,0000 0.0000 0.0000 5.0800 5.0800 -0.00000-1.00000 1.00000kOOOOO 是否继续(Y/N): y 10.0000 7,0000 &0000 7.0000 7.0000 5.0000 6.0000 5.0000 &0000 6.0000 10.0000 9.0000 7.0000 5.0000 9.0000 10.0000 32,000023.000033.000031.0000 det(A)=1.0000 展示消元过程(A_B为A的增广矩阵): 10,0000 7,0000 &0000 7,0000 32.0000 7.0000 5.0000 6,0000 5.0000 23.0000 &0000 6,0000 10.0000 9.0000 33,0000 7.0000 5.0000 9.0000 10.0000 3L0000 10.0000 7,0000 &0000 7,0000 32,0000 0,0000 0J000 0.4000 0J000 0.6000 0,0000 04000 3,6000 3.4000 7.4000 0,0000 0J000 3.4000 5J000 &6000 10,0000 7,0000 &0000 7.0000 32.0000 0.0000 0J000 04000 0J000 0.6000 0,0000 0.0000 2.0000 3,0000 5.0000 0,0000 O・oooo 3,0000 5,0000 &0000 10,0000 7,0000 &0000 7.0000 32.0000 0,0000 0J000 04000 0J000 0.6000 O・oooo O・oooo 3.0000 5.0000 &0000 0,OOOO 0.OOOO 0,oooo -0.3333 -03333 1O・oooo 7.0000 &0000 7.0000 32.0000 0.oooo 0J000 0.4000 0.1000 0.6000 O・oooo O・oooo 3,0000 5.0000 &0000 O・oooo o.oooo 0.oooo -0.3333 -03333 LOOOOO1.000001.000001.00000 是否继续(Y/N):
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数值 分析 计算 实习 题列主元高斯 消去 线性方程组
![提示](https://static.bdocx.com/images/bang_tan.gif)