高斯列主元消元法解线性方程组

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

高斯列主元消元法解线性方程组

一、题目:用Gauss 列主元消去法解线性方程组Ax b =,其中,

A=17.031 -0.615 -2.991 1.007 -1.006 0.000-1.000 34.211 -1.000 -2.100 0.300 -1.7000.000 0.500 13.000 -0.500 1.000 -1.5004.501 3.110 -3.907 -61.705 12.170 8.9990.101 -8.012 -0.017 -0.910 4.918 0.1001.000 2.000 3.000 4.500 5.000 21.803⎛⎫ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪⎝⎭ 0.230 -52.322 54.000 240.236 29.304 -117.818b ⎛⎫ ⎪ ⎪ ⎪= ⎪ ⎪ ⎪ ⎪ ⎪⎝⎭

T X=(0.907099 -1.961798 3.293738 -4.500708 3.029344 -5.255068)

二、原理及步骤分析

n

n ij R a A ⨯∈=][)1(,n

n R

b b b b ∈=],,,[)1()2(2)1(1 。若约化主元素

),,2,1(0)(n k a k kk =≠,则通过高斯消元法将方程b AX =约化为三角形方程组求解。 如果在消元过程中发现某个约化主元0)

(=k kk a , 则第K 次消元就无法进行。此外,即

使所有约化主元全不为零,虽然可以完成方程组的求解,但也无法保证结果的可靠性,因为计算过程中存在舍入误差。

为减少计算过程中的舍入误差对解的影响,在每次消元前,应先选择绝对值尽可能大的元作为约元的主元,如果在子块的第一列中选取主元,则相应方法称为列主元消元法。相应过程为:

(1)选主元:在子块的第一列中选择一个元)

(k k i k a 使)

(max k ik n

i k k

k i a a k ≤≤=

并将第k 行元与第k i 行元互换。 (2)消元计算:对k=1,2,……n-1依次计算

()()()⎪⎪

⎪⎩

⎪⎪⎪⎨⎧++=-=++=-=++==++n k k i b m b b n k k j i a m a a n k k i a a m k k ik k i k i k kj

ik k ij k ij k kk

k ik

k ik ,,2,1,,2,1,,,2,1)

()()1()

()()1()()

()( (3)回代求解

⎪⎪⎪⎩

⎪⎪⎪⎨⎧⎪⎪⎭⎫ ⎝⎛-==∑+=)

(1)

()()()

(i ii n i j j i ij i i

i n nn

n n

n a x a b x a b x

()1,,2,1 --=n n i

三. 流程图

四、源程序

高斯列主元消元法程序

#include<>

#include<>

#define N 6

main()

{

float A[N][N+1]={{,,,,,,},{,,,,,,},{,,,,,,},{,,,,,,},{,,,,,,},{,,,,,,}}, total,x[6];

int i,j,k,m,n;

printf("方程的增广矩阵:\n");

for(i=0;i

{

for(j=0;j

printf(" % ",A[i][j]);

printf("\n");

}

for(j=0;j

{

k=j; /*最大行号赋给k*/

for(i=j+1;i

{

if(fabs(A[i][j])>fabs(A[k][j]))

k=i;

}

if(k==j)

for(i=j+1;i

for(m=j+1;m

{

A[i][m]=A[i][m]-A[j][m]*A[i][j]/A[j][j]; }

else

{

for(n=0;n

{

A[N][n]=A[k][n]; /*换行 */

A[k][n]=A[j][n];

A[j][n]=A[N][n];

}

for(i=j+1;i

for(m=j+1;m

{

A[i][m]=A[i][m]-A[j][m]*A[i][j]/A[j][j]; }

}

}

printf("消元後的结果:\n");

for(i=0;i

{

for(j=0;j

printf(" % ",A[i][j]); printf("\n");

}

x[N-1]=A[N-1][N]/A[N-1][N-1]; for(i=N-2;i>=0;i--)

{

total=A[i][N];

for(j=N-1;j>i;j--)

total=total-x[j]*A[i][j];

x[i]=total/A[i][i];

}

printf("方程的解:\n");

for(i=0;i

printf("x1=%f\n",x[i]);

}

五、结果显示

相关文档
最新文档