列主元消去法解方程组
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数值分析上机实验报告(二)
一、问题描述:利用列主元消去法求解下列方程组
2X1+5X2+3X3 - 2X4=7
2X1- 2X2+3X3+5X4=-1
X1+3X2+2X3+3X4=0
X1+2X2+ X3 - 2X4=4
二、算法原理:
由高斯消去法知道,在消去过程中可能出现a kk(k)=0的情况,这时候消去法将无法进行,所以最好选取系数矩阵(或消元后的低阶矩阵)中绝对值最大的元素作为主元,以使高斯消去法具有较好的数值稳定性。
三、实验步骤:
1、det 1;
2、对于k=1,2,···,n-1
(1)按列选主元
|a ik.k|=max|a ik|
(2)如果a i.k=0,则计算停止(det(A)=0)
(3)如果i k=k则转(4)
换行:a kj a ik·j(j=k,k+1,···,n)
b k b ik
det -det
(4)消元计算
对于i=k+1,···,n
○1am ik=a ik/a kk
○2对于j=k+1,···,n a ij a ij—m ik*a kj
○3b i b i-m ik*b ik
(5)det a kk*det
3、如果则计算停止(det(A)=0)
4、回代求解
(1)b n b n/a nn
(2)对于i=n-1···,2,1
bi(bi-∑aij*bj)/aii
5.det ann*det
四、实验框图
五、源程序
# include
# include
# define n 4
main()
{
int i,j,k,l;
float A[n][n],b[n],x[n],max;
//输入系数矩阵及右端项
for(i=0;i for(j=0;j { printf("A[%d][%d]=",i,j); scanf("%f;",&A[i][j]); } for(i=0;i { printf("b[%d]=",i); scanf("%f;",&b[i]); }//列主元消去过程 for(k=0;k { max=abs(A[k][k]); l=k; for(i=k+1;i if(abs(A[i][k])>max){max=abs(A[i][k]);l=i;} if(l>k) {for(j=k;j { max=A[k][j];A[k][j]=A[l][j];A[l][j]=max; } max=b[k]; b[k]=b[l]; b[l]=max; } for(i=k+1;i {max=A[i][k]/A[k][k]; for(j=k+1;j A[i][j]=A[i][j]-max*A[k][j]; b[i]=b[i]-max*b[k]; } }//回代过程 x[n-1]=b[n-1]/A[n-1][n-1]; for(k=1;k { i=n-k-1; x[i]=b[i]; for(j=i+1;j x[i]=x[i]-A[i][j]*x[j]; x[i]=x[i]/A[i][i]; }//输出解 for(i=0;i printf("x[%d]=%f;",i,x[i]); getchar(); } 六、运行结果