数值分析计算实习题列主元高斯消去法解线性方程组.docx
- 文档编号:25291318
- 上传时间:2023-06-07
- 格式:DOCX
- 页数:17
- 大小:24.46KB
数值分析计算实习题列主元高斯消去法解线性方程组.docx
《数值分析计算实习题列主元高斯消去法解线性方程组.docx》由会员分享,可在线阅读,更多相关《数值分析计算实习题列主元高斯消去法解线性方程组.docx(17页珍藏版)》请在冰豆网上搜索。
数值分析计算实习题列主元高斯消去法解线性方程组
数值分析计算实习题
第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为非奇异矩阵。
方程组的增广矩阵为
[a,b]=
an„
第1步(k=l):
首先在A的第一列中选取绝对值最大的元素%,作为第一步的主元素:
如凜产如工0
然后交换(A,b)的第1行与第1行元素,再进行消元计算。
设列主元素消去法已经完成第1步到第k・l步的按列选主元,交换两行,消元计算得到与原方程组等价的方程组A(k)x=b(k)
用姐…哦盘…於?
MB
•
■
•
■
■
[A,b]T[A(?
b(*)]=
■
…盅
•
a"〉
■
唱”
■
■
■
•
•
•
•
...卅
IUI
•
第k步计算如下:
对于k=l,2,n-1|時卜maxaf"
(1)按列选主元:
即确定t使
(2)如果tHk,则交换[A,b]第t行与第k行元素。
(3)消元计算
aikJ叫=-bgk+X・・Ji)
akk
%<-%+叫ciy(i,j=k+l,…川)
»〜乞+叫几(j=k+l,…屮)
消元乘数mik满足:
M=吃+1,产•,)
(4)回代求解
(b厂工陶形)
兀<,('=〃_1屮_2,・・、1)
【程序】
/*
【普适列主元消去法解线性方程组】对于线性方程组:
Ax=b
输入:
[选择屏幕直接输入]
1・A的行阶数11(1<=n<=100)
2.A的值
3.b的值
[选择读取文件]
文件名(和主程序同级文件夹下)
输出:
1.A
2.b
3.det(A)
4.解向量x
#include
#include
#include
doubleA[1O5][1O5],A_B[1O5][1O习、b[105],x[105];doubledetA;
intnjnaik=1;
〃读入数据
voidinput(){
intij;
charch[20],name[100];
FILE*f;
printfC^—-\ii是否从文件读取数据(Y/N):
”);scaufp%s:
&ch);
if(ch[O]=Y'||ch[0]=V){
prmtfC'请输入文件名(包扌舌扩展名):
”);scanfi(H%s,\name);
f=fbpen(name;,in);
fscaiif(f/%d*\&n);
fbr(i=0;i for(j=0j fbr(i=0;i 住canfg'%lf;&b[i]); pnntfC请输入A的阶数: ”);scanf(n%d%cT,&n); prmtfC请输入A的值: ”); fbr(i=0;i for(j=Oj printf("请输入b的值: ”); fbr(i=0;i } } 〃计算行列式的值 doubledet(doubles[105][105],intm){ intzj,k; doubleb[105][105],total=0,r;/*b[N][N]ffl于存放,在矩阵s[N][N]中元素s[0]的余子式*/ fbr(z=0;z for(j=0j for(k=0;k if(k>=z) b[j][k]=s[j+l][k+l]; else bQ][k]=s[j+l][k]; if(z%2==0) r=s[0][z]*det(b4ii-1);/*递归调用 else r=(-1)*s[O]JXl*det(bjn-1); total=total+r; } } elseif(m=2) total=s[0][0]*s[l][l]-s[0][l]*s[l][0]; elseif(m=1) total=s[0][0]; returntotal; } //输出A和b和det(A)voidoutput_lQ{ intij; pnntffA=\iin); for(i=0;i for。 =OJ } printf(H\nb=\n”); for(i=0;i pnntfC%15・4f\iT;b[i]); printf(M\iidet(A)=%.4fn*\detA);} //主计算函数 voidcount_x(){ mtij,k; intmax; doubletmpjiuk; //构造增广矩阵 for(i=0;i A_B[i][j]=A[i]|j];A_B[i][n]=b[i]; } pnntf(”\n展示消元过程(A_E为A的増广矩阵printf(HA_B=\iT); for(i=0;i } 〃按列选主元 for(k=0;k fbr(i=k;i 〃若A[inax][k]=0,即det(A)=0,则无唯一解,退出计算 「s3al<餐s3al<•a==alvHs曰alvsggrfg曰q—v丄二sq—v丄二SST< (++「u: >■: ? +; 「32al<二兰三alvH3H〕alv )(++=uV匚+上HT)」OJ M七賦泌s QluuH3XGUTMIVs〔xc3qlv丄二gST Hv蛋HmE )(4I! .HcgT oH4TU2 )(0HHg〔xuu二8—vm xu3ql<*msql (++ruv^+thmE工U」zql X! ^0ha=e;HnTOJ •U=T•sale二U=T'aqlfms'umc•u」x rsT: oH4TU2 (0==〔「U=T;»1<七M44m型•灌—誉宋耳0H< 七UT】d 「■§zql<・J寸・3贾呂目d (++■? Hv〔0H X++-SV「0HVOJ「(Mhgrv.^md oHssalv //输出解向量xvoidoutput_2Q{ intij; if(? niaik) pnntf(”\n该方程没有唯一解! else{ prmtf(M\iib=\iin); fbr(i=0;i printf(H%15.5fn*\x[i]); } } intmam(){ charch[20]; pnntfC普适列主元消去法解线性方程组E); wlule(l){ mput(); detA=det(A.n);output」();count_xQ; output_2(); //读取数据 //计算A的行列式 //输出A和bfndet(A) //主计算函数 //输出解向量X 是否继续(Y/N)小); scanf(M%sH,&ch); if(ch[O]==T11|ch[0]=V)contmue; else break; 【结果测试】 一共采用了书上的例题和习题内的5组数据(dl〜d5),均采用文件读入方式读取,计算结果,与mntlab运算结果进行比对均相符合,基本验证了程序的正确性。 下面给出各组数据和运行结果: [数据] dl.txt 3 3.016.031.99 1.274.16-1.23 0.987-4.819.34 1 1 1d2.txt 3 3.006.031.99 1.274.16-1.23 0.99-4.819.34 1 1 1d3.txt 3 0.0012.0003.000 -1.0003.7124.623 -2.0001.0725.643 1.000 2.000 3.000d4.txt 4 10-701 -32.09999962 5-15-1 2102 8 5.900001 5d5.txt 4 10787 7565 86109 75910 32 2333 31 [运行结果] 普适列主元消去法解线性方程组 是否从文件读取数据(Y/N)y请输入文件名(包括扩展名): dl.txt A= 3.0100 6.0300 1.9900 1.2700 4.1600 -1.2300 0.9870 -4.8100 9.3400 1.0000 1.0000 1.0000 det(A)=-0.0305 展示消元过程(AJB为A的增广矩阵): A_B= 3.0100 6.0300 1.9900 1.0000 1.2700 4.1600 -1.2300 1.0000 0.9870 -4.8100 9.3400 1.0000 A_B= 3.0100 6.0300 1.9900 1.0000 0.0000 1.6158 -2.0696 0.5781 0.0000 -6.7873 8.6875 0.6721 A_B= 3.0100 6.0300 1.9900 1.0000 0.0000 -6.7873 8.6875 0.6721 0.0000 0.0000 -0.0015 0.7381 A_B= 3.0100 6.0300 1.9900 1.0000 0.0000 -6.7873 8.6875 0.6721 0.0000 0.0000 -0.0015 0.7381 b= 1592.59962 -631.91138 -493.61772 是否继续(Y/N): y 是否从文件读取数据(Y/N〉: y 请输入文件名(包拾扩展名): d2.txt A= 3.0000 6.0300 1.9900 1.2700 4.1600 -1.2300 0.9900 -4.8100 9.3400 1.0000 1.0000 1.0000 det(A)=-0.4070 展示消元过程(AJB为A的增广矩阵): A_B= 3.0000 1.2700 0.9900 6.0300 4.1600 -4.8100 1.9900 -1.2300 9.3400 1.0000 1.0000 1.0000 A_B= 3.0000 6.0300 1.9900 1.0000 0.0000 1.6073 -2.0724 0.5767 0.0000 -6.7999 8.6833 0.6700 A_B= 3.0000 6.0300 1.9900 1.0000 0.0000 -6.7999 8.6833 0.6700 0.0000 0.0000 -0.0200 0.7350 A_B= 3.0000 6.0300 1.9900 1.0000 0.0000 -6.7999 8.6833 0.6700 0.0000 0.0000 -0.0200 0.7350 119.52734 -47.14260 -36.84026 是否继续(Y/N)y 是否从文件读取数据(Y/N〉: y 请输入文件名(包括•扩展名): d3.txt A= 0.0010 2.0000 3.0000 -1.0000 3.7120 4.6230 -2.0000 1.0720 5.6430 1.0000 2.0000 3.0000 det(A)=11.8660 展示消元过程(A_E为A的增广矩阵): A_B= 0.0010 2.0000 3.0000 1.0000 -1.0000 3.7120 4.6230 2.0000 -2.0000 1.0720 5.6430 3.0000 A_B= -2.0000 1.0720 5.6430 3.0000 0.0000 3.1760 1.8015 0.5000 0.0000 2.0005 3.0028 1.0015 A_B= -2.0000 1.0720 5.6430 3.0000 0.0000 3.1760 1.8015 0.5000 0.0000 0.0000 1.8681 0.6866 A_B= -2.0000 1.0720 5.6430 3.0000 0.0000 3.1760 1.8015 0.5000 0.0000 0.0000 1.8681 0.6866 -0.49040 -0.05104 0.36752 是否继续(Y/N): y 是否从文件读取数据(Y/N): y请输入文件名(包括扩展名): d4.txtA= 10.0000 -7.0000 0.0000 1.0000 -3.0000 2.1000 6.0000 2.0000 5.0000 -1.0000 5.0000 -1.0000 2.0000 1.0000 0.0000 2.0000 b= 8.0000 5.9000 5.0000 1.0000 det(A)=-762.0001 展示消元过程(AJB为A的增广矩阵): A_B= 10.0000 -7.0000 0.0000 1.0000 8.0000 -3.0000 2.1000 6.0000 2.0000 5.9000 5.0000 -1.0000 5.0000 -1.0000 5.0000 2.0000 1.0000 0.0000 2.0000 1.0000 A_B= 10.0000 -7.0000 0.0000 1.0000 8.0000 0.0000 -0.0000 6.0000 2.3000 8.3000 0.0000 2.5000 5.0000 -1.5000 1.0000 0.0000 2.4000 0.0000 1.8000 -0.6000 A_B= 10.0000 -7.0000 0.0000 1.0000 8.0000 0.0000 2.5000 5.0000 -1.5000 1.0000 0.0000 0.0000 6.0000 2.3000 8.3000 0.0000 0.0000 -4.8000 3.2400 -1.5600 A_B= 10.0000 -7.0000 0.0000 1.0000 8.0000 0.0000 2.5000 5.0000 -1.5000 1.0000 0.0000 0.0000 6.0000 2.3000 8.3000 0.0000 0.0000 0.0000 5.0800 5.0800 A_B= 10.0000 -7.0000 0.0000 1.0000 8.0000 0.0000 2.5000 5.0000 -1.5000 1.0000 0.0000 0.0000 6.0000 2.3000 8.3000 0.0000 0.0000 0.0000 5.0800 5.0800 -0.00000 -1.00000 1.00000 1.00000 是否继续(Y/N): y 是否从文件读取数据(Y/N): y请输入文件名(包括扩展名): d5.txtA= 10.0000 7.0000 8.0000 7.0000 7.0000 5.0000 6.0000 5.0000 8.0000 6.0000 10.0000 9.0000 7.0000 5.0000 9.0000 10.0000 32.0000 23.0000 33.0000 31.0000 det(A)=1.0000 展示消元过程(AJB为A的增广矩阵): A_B= 10.0000 7.0000 8.0000 7.0000 7.0000 5.0000 6.0000 5.0000 8.0000 6.0000 10.0000 9.0000 7.0000 5.0000 9.0000 10.0000 32.0000 23.0000 33.0000 31.0000 A_B= 10.0000 7.0000 8.0000 7.0000 32.0000 0.0000 0.1000 0.4000 0.1000 0.6000 0.0000 0.4000 3.6000 3.4000 7.4000 0.0000 0.1000 3.4000 5.1000 8.6000 A_B= 10.0000 7.0000 8.0000 7.0000 32.0000 0.0000 0.1000 0.4000 0.1000 0.6000 0.0000 0.0000 0.0000 0.0000 2.0000 3.0000 3.0000 5.0000 5.0000 8.0000 A_B= 10.0000 7.0000 8.0000 7.0000 32.0000 0.0000 0.1000 0.4000 0.1000 0.6000 0.0000 0.0000 3.0000 5.0000 8.0000 0.0000 0.0000 0.0000 -03333 -0.3333 A_B= 10.0000 7.0000 8.0000 7.0000 32.0000 0.0000 0.1000 0.4000 0.1000 0.6000 0.0000 0.0000 3.0000 5.0000 8.0000 0.0000 0.0000 0.0000 -03333 -0.3333 1.00000 1.00000 1.00000 1.00000 是否继续(Y/N):
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数值 分析 计算 实习 题列主元高斯 消去 线性方程组