一道大学里的题,请大家帮忙看一看
109 方阵A的Crout分解
1 功能 对方阵A作LU分解,其中L为下三角阵, U为单位上三角阵.
2 数学方法简介 对奇异方阵A通常是消去主对角线以下的元素,使A变为下三角阵,记未变换的A为A(0) .
第一步, 若aij(0) 0, 令uij =aij(0) /a11(0) , j=2,3,…..,n .构造初等方阵
1 u12 u13 . . .u1n
U1= 1
1
.
1
则
1 -u12 -u13 . . . –u1n
U1(-1) = 1
1
1
用u1(-1) 右乘A,
a11(0) 0 0 0
AU1(-1) = a21(0) a22(1) a23(1) … a2n(1)
… …
an1(0) an2(1) an3(1) … a nn(1)
第二步,若a22(1) 0, 令u2j =a2j(1) /a22(1) , j=3,4,……,n. 构造初等方阵
1 0 0 … 0
u2(-1)= 1 -u23 -u2n
1
1
用u2(-1) 右乘A(1),则
a11(0) 0 0 … 0
A(1)U2(-1)=A(0) U1(-1)U2(-1)= a21(0) a22(0) 0 … 0
a31(0) a32(1) a33(2) a3n(2)
… … …
an1(0) an2(1) an3(2) ann(2)
若a33(2)0,可按上述步骤继续往下作,akk(k-1) 0,k=1,2,……,n,作完n-1步,A U1(-1) U2(-1)…Un-1(-1)=A(n-1) =L
则L为下三角阵,令U(-1) =U1(-1)U2(-1)…Un-1(-1) ,它为单位上三角阵,则
A=A(n-1) U=LU
这里L为下三角阵,U为单位上三角阵.
为了省去一些工作单元,用紧凑格式编写程序,即将L存放在A的左下方(含对角线),将单位上三角阵U存放在A的右上方(不含对角线元,对角线元全为1不必存放).
上述变换过程的计算方法步骤为,对I=1,2,…,n, 有
lji =aji –∑ljk uki , j=i,i+1,…,n
uij=(aij –∑ljk ukj)/ lii , j=i +1,i+2,…,n
每步先算i列的元素,再算i行的元素.
3 使用说明
输入参数
N 整变量,方阵A的阶数.
A(N,N) N*N个元素的二维实数组,按行存放矩阵A.
输出参数
W 标志,W=0分解完毕,W=1分解进行不下去.
L(N,N) 下三角阵L;
U(N,N) 单位上三角阵U.
10 ‘*************************************’
20 ‘* 109 方阵的A的CROUT分解 *’
30 ‘*************************'************’
40 INPUT "N,E="; N, E
50 DIM A(N, N)
60 PRINT TAB(3); "EXAMPLE"; TAB(8); "JUZHEN A": PRINT
70 FOR I = 1 TO N
80 FOR J = 1 TO N
90 READ A(I, J): PRINT USING; "####.#"; A(I, J);
100 NEXT J
110 PRINT
120 NEXT I
130 PRINT: GOSUB 500
140 PRINT TAB(5); "W="; W: PRINT
150 IF (W = 1) THEN GOTO 380
160 PRINT TAB(15); "JUZHEN L"
170 PRINT
180 FOR I = 1 TO N
190 FOR J = 1 TO I
200 PRINT USING; "##.#####"; A(I, J);: PRINT " ";
210 NEXT J
220 PRINT
230 NEXT I
240 FOR I = 1 TO N
250 A(I, I) = 1
260 NEXT I
270 PRINT
280 PRINT TAB(15); "JUZHEN U"
290 PRINT
300 FOR I = 1 TO N
310 FOR J = I TO N
320 PRINT TAB(10 * (J - 1)); USING; "##.#####"; A(I, J);
330 NEXT J
340 PRINT
350 NEXT I
360 DATA 1, 2, 3, 4, 1, 4, 9, 16, 1, 8, 27, 64, 1, 16, 81, 256
370 DATA
380 END
500 'SON'
510 IF ABS(A(1,1))〈=E THEN GOTO 750
520 FOR J=2 TO N
530 A(1,J)=A(1,J)/A(1,1)
540 NEXT J
550 P=0
560 FOR K=2 TO N
570 FOR I=K TO N
580 FOR 1TO K-1
590 P=P+A(I,R)*A(R,K)
600 NEXT R
610 A(I,K)= A(I,K)-P
620 P=0
630 NEXT I
640 P=0
650 FOR J=K +1TO N
660 FOR R=1TO K-1
670 P=P+A(K,R)*A(R,J)
680 NEXT R
690 IF ABS(A(K,K))〈=E THEN GOTO 750
700 A(K,J)=(A(K,J)-P)/A(K,K)
710 P=0
720 NEXT J
730 NEXT K
740 W=0:RETURN
750 W=1:RETURN
====================================================================
要求用C语言或者pascal做出来,请大家务必帮忙。