Vol120No12JOURNALOFSANMINGCOLLEGEJun12003
Crout方法解线性方程组的结构化程序设计
刘墨德(三明高等专科学校计算机科学系,福建三明 365004)
摘 要:Crout方法通过对系数矩阵作三角分解能解出线性方程组的准确解,是解线性方程组的重要方法,文章给出了完整的算法设计,并编写了通用的结构化程序。
关键词:下三角阵;单位上三角阵;LV分解;回代;结构化
中图分类号:TP301.6 文献标识码:A 文章编号:1671-1343(2003)02-0062-05
1 引理
[1]
a11 a12…a1nl11 0 … 0
,必存在n阶下三角阵L=
l21 l22 … 0
对任意n阶方阵A=
a21 a22…a2n
……
an1 an2…ann1 v12 … v1n
……
ln1 ln2 …lnn
及n阶单位上三角阵V=
0 1 … v2n
……0 0 … 1[1][2]
,使得A=LV。
2 Crout方法解线性方程组的算法
(b1,b2,…bn)
T
给定线性方程组AX=b,其中系数矩阵A=(aij)
,用Crout方法解AX=b的算法如下:
(1)对A作LV分解
n×n
非奇异,X=(x1,x2,…,xn)
T
,b=
由A=LV及矩阵的乘法原理可得:
lij=aij-6likvkj,j=1,2,…,i
j-1
k=1
vij=(aij-6likvkj)/lii,j=i+1,i+2,…,nk=1
i-1
i=1,2,…,n
(2)解两个三角型方程组
由A=LV及AX=b可得L(VX)=b,令Y=(y1,y2,…,yn)
T
=VX,则LY=b,于是求解
复杂的AX=b就被化为求解简单的下三角型方程组LY=b及单位上三角型方程组VX=Y。
a)先解下三角型方程组LY=b
收稿日期:2003204201
作者简介:刘墨德(1963-),男,福建南安人,三明高等专科学校计算机科学系讲师。
62
© 1994-2010 China Academic Journal Electronic Publishing House. All rights reserved. http://www.cnki.net
l11y1=b1
由LY=b得l21y1+l22y2=b2
b1/l11,i=1
, ∴yi=
(bi-6likyk)/lii,i=2,3,…,n
k=1i-1
…………………
ln1y1+ln2y2+…+lnnyn=bn
b)再解单位上三角型方程组VX=Y
x1+v12x2+…+v1nxn=y1
x2+…+v2nxn=y2
由VX=Y得 ……………,利用回代解法可得方程组AX=b的
xn-1+vn21nxn=yn-1
xn=yn
yn,i=n解为xi=
yi-
k=i+1
6vikxk,i=n-1,…,2,1
n
3 算法流程[3]
(1)LV分解过程P1 (2)解三角型方程组过程P2
(3)主程序
4 结构化程序设计
programcrout(input,output);
63
© 1994-2010 China Academic Journal Electronic Publishing House. All rights reserved. http://www.cnki.net
const n=4;
type id=1..n;ar1=array[id] of real;ar2=array[id,id]ofreal;var b,x:ar1;a:ar2;i,j:id;
procedure p1(a:ar2;var l,v:ar2);
var i,j,k:id; begin l[1,1]:=a[1,1]; for j:=2 to n do begin l[j,1]:=a[j,1];v[1,j]:=a[1,j]/l[1,1] end; for i:=2 to n-1 do begin for j:=2 to i do begin l[i,j]:=a[i,j];fork:=1toj-1dol[i,j]:=l[i,j]-l[i,k]3v[k,j] end; for j:=i+1 to n do begin v[i,j]:=a[i,j];fork:=1toi-1dov[i,j]:=v[i,j]-l[i,k]3v[k,j]; v[i,j]:=v[i,j]/l[i,i] end; end for j:=2 to n do begin l[n,j]:=a[n,j];fork:=1toj-1dol[n,j]:=l[n,j]-l[n,k]3v[k,j]end end;
procedure p2(a:ar2;b:ar1;var x:ar1); var i,j:id;y:ar1;l,v:ar2; begin p1(a,l,v);y[1]:=b[1]/l[1,1]; for i:= 2 to n do begin
y[i]:=b[i];fork:=1toi-1doy[i]:=y[i]-l[i,k]3y[k];y[i]:=y[i]/l[i,i] end; x[n]:=y[n]; for i:= n-1 downto 1 do begin x[i]:=y[i];for k:=i+1 to n do x[i]:=x[i]-v[i,k]3x[k] end; end;
begin(3主程序3)
(输入系数矩阵A‘ writeln‘:);
for i:=1 to n do begin for j:=1 to n do read(a[i,j]);readln end;
(输入列矩阵b‘ write‘:);64
© 1994-2010 China Academic Journal Electronic Publishing House. All rights reserved. http://www.cnki.net
for i:=1 to n do read(b[i]);writeln;
(输出结果‘(方程组的解为‘ p2(a,b,x);writeln‘:);writeln‘:);
(x for i:=1 to n do write‘‘,i:1‘,=‘,x[i]:10:6‘,‘)end.
5 符号说明表
标识符数学符号
nnaAbbxXyYlLvViijjkk
类型
整实实实实实实整整整
个数1n2nnnn2n2111
入输入输入输出出
输出
作用
方程组的阶数系数矩阵列矩阵存放方程组的解
存放下三角型方程组的解n阶下三角阵n阶单位上三角阵行下标列下标
循环控制变量
6 计算复杂性分析[4]
(1)算法中使用了3个2维数组A,L,V及3个1维数组X,Y,b,数组共用3n2+3n个单
元,因为3n2+3n<3n2+3n2=6n2,故算法所需空间为O(n2)。
(2)LV分解过程中使用了3重循环,故算法所需计算时间至多为O(n3)。
(3)由于当今计算机的内存可以达到超大规模存贮,因此当n按常规意义取值时,算法所需空间为O(n2)及算法所需计算时间为O(n3)对计算机执行效率的影响极小。
7 计算实例
5x1 -x2 -x3 -x4=-4
用Crout方法求方程组 -x1 +10x2 -x3 -x4=12 -x1 -x2 +5x3 -x4=8
的解。
-x1 -x2 -x3 +10x4=34
(准确解为x1=1,x2=2,x3=3,x4=4)
理论分析[5]:由于系数矩阵A非奇异(A=2112≠0),所以方程组有唯一解。计算机执行结果:输入系数矩阵A: 5-1-1-1-1-1
-1-1-110
10-1-1
-1
5
-1
输入列矩阵b:-4 12 8 34输出结果:
方程组的解为:x1= 1.000000x2= 2.000000x3= 3.000000x4= 4.000001
65
© 1994-2010 China Academic Journal Electronic Publishing House. All rights reserved. http://www.cnki.net
8 讨论
(1)从理论求解角度讲,Crout方法求出的解是准确解,但在计算机执行过程中由于数值
运算存在一定的舍入误差,所以计算机上求出的解是高精度近似解,在单精度机上准确解与近似解的误差不会超过10-6[1]。
(2)∵A=LV,∴|A|=|L||V|=l11l22…lnn,这表明Crout方法还具有求n阶行列式|A|的功能[5],计算|A|的编程如下:deta:=1;for i:=1 to n do deta:=deta3l[i,i];通过计算机运行上述计算实例得系数行列式|A|=deta=2112。(3)2维数组L,V及1维数组X,Y均可压缩,但这需要很高的编程技巧,所编出的程序清晰性及可读性很差,这不符合现代程序设计标准。此外,从现代计算机大容量的存贮规模及高速度的运算功能来看,节省下来的2n2+2n个存贮单元对计算机执行效率所构成的影响可以忽略不计,因此为了程序清晰性及可读性不应该去压缩数组[2][6]。参考文献:
[1]施吉林,刘淑珍,陈桂芝,等.计算机数值方法[M].北京:高等教育出版社,2000.[2]华中理工大学数学教研室.算法语言・计算方法[M].北京:高等教育出版社,1999.[3]谭浩强.田淑清.PASCAL程序设计[M].北京:高等教育出版社,1995.[4]王晓东.计算机算法设计与分析[M].北京:电子工业出版社,2000.[5]北京大学数学力学系.高等代数[M].北京:高等教育出版社,1998.[6]麦中凡.程序设计技术[M].北京:高等教育出版社,1996.
[责任编辑:叶 普]
TheStructuredProgrammingofCrout’s
MethodSolvingLinearEquation
LIUMo2de
(DepartmentofComputerScience,SanmingCollege,Sanming365004,China)
Abstract:Crout’smethodbymeansofcoefficientmatrixdotriangleresolutionsolubleaccuracyansweroflinearequation.Itisanimportantsolutionofsolvinglinearequation.ThisarticlesuppliesacompletealgorithmdesignofCrout’smethodandwritinggeneralpurposestructuredprogramming.
Keywords:lowertriangularmartrix;unitupperriangularmartrix;LVresolution;loopcallbyvalue;structural
66
© 1994-2010 China Academic Journal Electronic Publishing House. All rights reserved. http://www.cnki.net
因篇幅问题不能全部显示,请点此查看更多更全内容