C ALGORITHM 705, COLLECTED ALGORITHMS FROM ACM. C THIS WORK PUBLISHED IN TRANSACTIONS ON MATHEMATICAL SOFTWARE, C VOL. 18, NO. 2, PP. 232-238. C Remark: VOL. 28, NO. 3. PP. 372-375 #! /bin/sh # This is a shell archive, meaning: # 1. Remove everything above the #! /bin/sh line. # 2. Save the resulting text in a file. # 3. Execute the file with /bin/sh (not csh) to create the files: # Doc/ # Doc/Makefile # Doc/Makefile.Dp # Doc/PackingList # Doc/doc # Fortran77/ # Fortran77/Dp/ # Fortran77/Dp/Drivers/ # Fortran77/Dp/Drivers/data4 # Fortran77/Dp/Drivers/data5 # Fortran77/Dp/Drivers/data6 # Fortran77/Dp/Drivers/dr_subs.f # Fortran77/Dp/Drivers/driver1.f # Fortran77/Dp/Drivers/driver2.f # Fortran77/Dp/Drivers/driver3.f # Fortran77/Dp/Drivers/driver4.f # Fortran77/Dp/Drivers/driver5.f # Fortran77/Dp/Drivers/driver6.f # Fortran77/Dp/Drivers/driver7.f # Fortran77/Dp/Drivers/driver8.f # Fortran77/Dp/Drivers/driver9.f # Fortran77/Dp/Drivers/portrand.f # Fortran77/Dp/Drivers/res1 # Fortran77/Dp/Drivers/res2 # Fortran77/Dp/Drivers/res3 # Fortran77/Dp/Drivers/res4 # Fortran77/Dp/Drivers/res5 # Fortran77/Dp/Drivers/res6 # Fortran77/Dp/Drivers/res7 # Fortran77/Dp/Drivers/res8 # Fortran77/Dp/Drivers/res9 # Fortran77/Dp/Src/ # Fortran77/Dp/Src/blas1.f # Fortran77/Dp/Src/linpack.f # Fortran77/Dp/Src/port.f # Fortran77/Dp/Src/src.f # This archive created: Wed Oct 16 14:43:51 2002 export PATH; PATH=/bin:$PATH if test ! -d 'Doc' then mkdir 'Doc' fi cd 'Doc' if test -f 'Makefile' then echo shar: will not over-write existing file "'Makefile'" else cat << "SHAR_EOF" > 'Makefile' # Fortran compiler and linker F77 = epcf90 F77OPTS = -sloppy -C -d5 -g -temp=/tmp -u F77LINK = $(F77) F77LINKOPTS = $(F77OPTS) .f.o: $(F77) $(F77OPTS) -c $*.f all: res1 res2 res3 res4 res5 res6 res7 res8 res9 Objs1= driver1.o dr_subs.o src.o port.o portrand.o linpack.o blas1.o src.o: ../Src/src.f $(F77) $(F77OPTS) -c $? port.o: ../Src/port.f $(F77) $(F77OPTS) -c $? blas1.o: ../Src/blas1.f $(F77) $(F77OPTS) -c $? linpack.o: ../Src/linpack.f $(F77) $(F77OPTS) -c $? driver1: $(Objs1) $(F77LINK) $(F77LINKOPTS) -o driver1 $(Objs1) $(SRCLIBS) $(Libs1) res1: driver1 driver1 >temp diff temp res1 Libs2= $(RANDOM) Objs2= driver2.o dr_subs.o src.o port.o portrand.o linpack.o blas1.o driver2: $(Objs2) $(F77LINK) $(F77LINKOPTS) -o driver2 $(Objs2) $(SRCLIBS) $(Libs2) res2: driver2 driver2 >temp diff temp res2 Libs3= $(RANDOM) Objs3= driver3.o dr_subs.o src.o port.o portrand.o linpack.o blas1.o driver3: $(Objs3) $(F77LINK) $(F77LINKOPTS) -o driver3 $(Objs3) $(SRCLIBS) $(Libs3) res3: driver3 driver3 >temp diff temp res3 Libs4= $(RANDOM) Objs4= driver4.o dr_subs.o src.o port.o portrand.o linpack.o blas1.o driver4: $(Objs4) $(F77LINK) $(F77LINKOPTS) -o driver4 $(Objs4) $(SRCLIBS) $(Libs4) res4: driver4 data4 driver4 temp diff temp res4 Libs5= $(RANDOM) Objs5= driver5.o dr_subs.o src.o port.o portrand.o linpack.o blas1.o driver5: $(Objs5) $(F77LINK) $(F77LINKOPTS) -o driver5 $(Objs5) $(SRCLIBS) $(Libs5) res5: driver5 data5 driver5 temp diff temp res5 Libs6= $(RANDOM) Objs6= driver6.o dr_subs.o src.o port.o portrand.o linpack.o blas1.o driver6: $(Objs6) $(F77LINK) $(F77LINKOPTS) -o driver6 $(Objs6) $(SRCLIBS) $(Libs6) res6: driver6 data6 driver6 temp diff temp res6 Libs7= $(RANDOM) Objs7= driver7.o dr_subs.o src.o port.o portrand.o linpack.o blas1.o driver7: $(Objs7) $(F77LINK) $(F77LINKOPTS) -o driver7 $(Objs7) $(SRCLIBS) $(Libs7) res7: driver7 driver7 >temp diff temp res7 Libs8= $(RANDOM) Objs8= driver8.o dr_subs.o src.o port.o portrand.o linpack.o blas1.o driver8: $(Objs8) $(F77LINK) $(F77LINKOPTS) -o driver8 $(Objs8) $(SRCLIBS) $(Libs8) res8: driver8 driver8 >temp diff temp res8 Libs9= $(RANDOM) Objs9= driver9.o dr_subs.o src.o port.o portrand.o linpack.o blas1.o driver9: $(Objs9) $(F77LINK) $(F77LINKOPTS) -o driver9 $(Objs9) $(SRCLIBS) $(Libs9) res9: driver9 driver9 >temp diff temp res9 clean: rm *.o driver? temp SHAR_EOF fi # end of overwriting check if test -f 'Makefile.Dp' then echo shar: will not over-write existing file "'Makefile.Dp'" else cat << "SHAR_EOF" > 'Makefile.Dp' include makefile.inc all: res1 res2 res3 res4 res5 res6 res7 res8 res9 SRCLIBS= $(LINPACK) $(BLAS) $(PORT) Libs1= $(RANDOM) Objs1= driver1.o dr_subs.o src.o driver1: $(Objs1) $(F77LINK) $(F77LINKOPTS) -o driver1 $(Objs1) $(SRCLIBS) $(Libs1) res1: driver1 driver1 >res1 Libs2= $(RANDOM) Objs2= driver2.o dr_subs.o src.o driver2: $(Objs2) $(F77LINK) $(F77LINKOPTS) -o driver2 $(Objs2) $(SRCLIBS) $(Libs2) res2: driver2 driver2 >res2 Libs3= $(RANDOM) Objs3= driver3.o dr_subs.o src.o driver3: $(Objs3) $(F77LINK) $(F77LINKOPTS) -o driver3 $(Objs3) $(SRCLIBS) $(Libs3) res3: driver3 driver3 >res3 Libs4= $(RANDOM) Objs4= driver4.o dr_subs.o src.o driver4: $(Objs4) $(F77LINK) $(F77LINKOPTS) -o driver4 $(Objs4) $(SRCLIBS) $(Libs4) res4: driver4 data4 driver4 res4 Libs5= $(RANDOM) Objs5= driver5.o dr_subs.o src.o driver5: $(Objs5) $(F77LINK) $(F77LINKOPTS) -o driver5 $(Objs5) $(SRCLIBS) $(Libs5) res5: driver5 data5 driver5 res5 Libs6= $(RANDOM) Objs6= driver6.o dr_subs.o src.o driver6: $(Objs6) $(F77LINK) $(F77LINKOPTS) -o driver6 $(Objs6) $(SRCLIBS) $(Libs6) res6: driver6 data6 driver6 res6 Libs7= $(RANDOM) Objs7= driver7.o dr_subs.o src.o driver7: $(Objs7) $(F77LINK) $(F77LINKOPTS) -o driver7 $(Objs7) $(SRCLIBS) $(Libs7) res7: driver7 driver7 >res7 Libs8= $(RANDOM) Objs8= driver8.o dr_subs.o src.o driver8: $(Objs8) $(F77LINK) $(F77LINKOPTS) -o driver8 $(Objs8) $(SRCLIBS) $(Libs8) res8: driver8 driver8 >res8 Libs9= $(RANDOM) Objs9= driver9.o dr_subs.o src.o driver9: $(Objs9) $(F77LINK) $(F77LINKOPTS) -o driver9 $(Objs9) $(SRCLIBS) $(Libs9) res9: driver9 driver9 >res9 clean: rm *.o driver? temp SHAR_EOF fi # end of overwriting check if test -f 'PackingList' then echo shar: will not over-write existing file "'PackingList'" else cat << "SHAR_EOF" > 'PackingList' Algorithm:705 Language:Fortran77 Precision:Dp Src:src.f SrcLibs:linpack blas port Driver_0:driver1.f dr_subs.f @Src DriverLib_0:random Res_0:stdout=res1 Driver_1:driver2.f dr_subs.f @Src DriverLib_1:random Res_1:stdout=res2 Driver_2:driver3.f dr_subs.f @Src DriverLib_2:random Res_2:stdout=res3 Driver_3:driver4.f dr_subs.f @Src DriverLib_3:random Data_3:stdin=data4 Res_3:stdout=res4 Driver_4:driver5.f dr_subs.f @Src DriverLib_4:random Data_4:stdin=data5 Res_4:stdout=res5 Driver_5:driver6.f dr_subs.f @Src DriverLib_5:random Data_5:stdin=data6 Res_5:stdout=res6 Driver_6:driver7.f dr_subs.f @Src DriverLib_6:random Res_6:stdout=res7 Driver_7:driver8.f dr_subs.f @Src DriverLib_7:random Res_7:stdout=res8 Driver_8:driver9.f dr_subs.f @Src DriverLib_8:random Res_8:stdout=res9 SHAR_EOF fi # end of overwriting check if test -f 'doc' then echo shar: will not over-write existing file "'doc'" else cat << "SHAR_EOF" > 'doc' C ALGORITHM 705, COLLECTED ALGORITHMS FROM ACM. C THIS WORK PUBLISHED IN TRANSACTIONS ON MATHEMATICAL SOFTWARE, C VOL. 18, NO. 2, PP. 232-238. README - software for solving Sylvester equations - double precision version sylg solves A*X*B' + C*X*D' = E sylgc solves A*X*E' + E*X*A' + Q = 0 sylgd solves A*X*A' - E*X*E' + Q = 0 For the sylgx routines, we got (NRM RESID)/(NRM Q) to be about 1.0d-14 in double precision (acc. = about 17 digits). On a UNIX(tm) system one can testa routine by "make"ing the test routines (e.g. "make tsylgc"). Installation: The programs driver1.f, driver2.f, driver3.f are recommended as simple installation tests. They are set up to run a small number of example problems. Further testing: The programs driver1.f, driver2.f, driver3.f will run a larger set of tests if two lines are commented out and two others uncommented, as noted in the code. Programs driver4.f .. driver9.f are also provided for those who wish to do more extensive testing. 17Apr90 J. Gardiner, OSU CIS, Columbus, OH 43210 (614)881-4135 13Dec90 J. Gardiner, OSU CIS, Columbus, OH 43210 (614)881-4135 12Jan01 Tim Hopkins ------------------------------------------------------------------------ driver1.f test the subroutine sylg using predefined problems Calls: sylg msave d1nrm msub mulc trnata; (linpack) dsvdc driver2.f test the subroutine sylgc using predefined problems Calls: sylgc madd mulc trnata d1nrm msave; (linpack) dsvdc driver3.f test the subroutine sylgd using predefined problems Calls: sylgd madd mulc trnata d1nrm msave; (linpack) dsvdc driver4.f test the subroutine sylg using matrices from a file (data4) Calls: sylg msave d1nrm msub mulc trnata; (linpack) dsvdc driver5.f test the subroutine sylgc using matrices from a file (data5) Calls: sylgc madd mulc trnata d1nrm msave; (linpack) dsvdc driver6.f test the subroutine sylgd using matrices from a file (data6) Calls: sylgd madd mulc trnata d1nrm msave; (linpack) dsvdc driver7.f test the subroutine sylg using randomly generated problems Calls: sylg msave d1nrm msub mulc trnata; (linpack) dsvdc driver8.f test the subroutine sylgc using randomly generated problems Calls: sylgc madd mulc trnata d1nrm msave; (linpack) dsvdc driver9.f test the subroutine sylgd using randomly generated problems Calls: sylgd madd mulc trnata d1nrm msave; (linpack) dsvdc res1..res9 Sample output from each of the above drivers. Routine descriptions ==================== bkcon solve S*Y*T' + T*Y*S' + R = 0 Calls: (linpack) dgeco dgesl bkdis solve S*Y*S' - T*Y*T' + R = 0 Calls: (linpack) dgeco dgesl bkhs2 solve P*Y*R' + S*Y*T' = F where P=up-Hess, R=up-tri, S=up-tri, T=quasi-up-tri Calls: hsco hsfa hssl; (linpack) ddot d1nrm compute 1-norm of a matrix Calls: - hsco Hessenberg version of Linpack dgeco Calls: hsfa; (linpack) daxpy ddot dscal dasum hsfa Hessenberg version of Linpack dgefa Calls: (linpack) daxpy dscal idamax hssl Hessenberg version of Linpack dgesl Calls: (linpack) daxpy ddot ktran transform an upper-Hessenberg to a matrix orthogonally similar to its transpose which is also upper-Hessenberg Calls: - madd adds two matrices Calls: - mqfwo computes the symmetric product x'sx Calls: mula msave copies a matrix Calls: - mscale scales a matrix by a scalar Calls: - msub subtracts two matrices Calls: - mula multiplies two matrices, product overwrites first Calls: - mulb multiplies two matrices, product overwrites second Calls: - mulc multiplies two matrices Calls: - qzhesg transform A to upper-Hessenberg, B to upper-triangular Calls: - qzitg transform A to quasi-upper-triangular keeping B upper-triangular Calls: (eispack) epslon qzvalg order off-diagonal elements of A to correspond to conjugate generalized eigenvalues Calls: - sepg computes approximately inf(1-norm(P*Y*R'+S*Y*T')/1-norm(Y)) Calls: bkhs2 mscale ktran d1nrm sepgc computes approximately inf(1-norm(S*Y*T'+T*Y*S')/1-norm(Y)) Calls: bkcon mscale ktran d1nrm sepgd computes approximately inf(1-norm(S*Y*S'-T*Y*T')/1-norm(Y)) Calls: bkdis mscale ktran d1nrm sylg solve A*X*B' + C*X*D' = E where A,B,C,D are square Calls: qzhesg qzitg qzvalg sepg bkhs2 mula mulb trnata sylgc solve A*X*E' + E*X*A' + Q = 0 where Q is symmetric Calls: qzhesg qzitg qzvalg sepgc bkcon mqfwo mulb sylgd solve A*X*A' - E*X*E' + Q = 0 where Q is symmetric Calls: qzhesg qzitg qzvalg sepgd bkdis mqfwo mulb --- last line of README --- SHAR_EOF fi # end of overwriting check cd .. if test ! -d 'Fortran77' then mkdir 'Fortran77' fi cd 'Fortran77' if test ! -d 'Dp' then mkdir 'Dp' fi cd 'Dp' if test ! -d 'Drivers' then mkdir 'Drivers' fi cd 'Drivers' if test -f 'data4' then echo shar: will not over-write existing file "'data4'" else cat << "SHAR_EOF" > 'data4' 2 1 0. 1. 0. 2. 2. 3. 4. 0. 0. 1. -9. -4. y SHAR_EOF fi # end of overwriting check if test -f 'data5' then echo shar: will not over-write existing file "'data5'" else cat << "SHAR_EOF" > 'data5' 3 1. 2. 3. 6. -5. 4. 7. 8. 9. -10. 20. -30. 41. -42. 43. 19. 18. 17. 18. 9. 7. 9. 17. 8. 7. 8. 16. y SHAR_EOF fi # end of overwriting check if test -f 'data6' then echo shar: will not over-write existing file "'data6'" else cat << "SHAR_EOF" > 'data6' 5 3 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. -27. 28. -29. 30. -31. 32. -33. 34. 1. 0. 0. 0. 0. 1. 2. 1. 1. 1. 1. 1. 2. 1. 1. 1. 1. 1. 2. 1. 1. 1. 1. 1. 2. 199. 98. 97. 41. 142. 43. 59. 55. 151. -80. 79. -78. 77. -76. 75. -74. 73. -72. 71. -70. 69. -68. 67. -66. y SHAR_EOF fi # end of overwriting check if test -f 'dr_subs.f' then echo shar: will not over-write existing file "'dr_subs.f'" else cat << "SHAR_EOF" > 'dr_subs.f' C--**--CH2894--705--A:1--28:10:1999 C--**--CH2879--705--P:R--28:10:1999 DOUBLE PRECISION FUNCTION DGAUS(MEAN, STDDEV) C DOUBLE PRECISION MEAN, STDDEV C C THIS ROUTINE GENERATES NORMALLY DISTRIBUTED PSEUDORANDOM NUMBERS C WITH GIVEN MEAN AND STANDARD DEVIATION. C YOU MUST INITIALIZE DXRAND() WITH "X = DXRAND(I)" WHERE I>0. C C WRITTEN - C 14NOV86 M.WETTE, UCSB ECE, SANTA BARBARA, CA 93106 (805)961-3616 C MODIFIED - C 28NOV88 J. GARDINER, OSU CIS, COLUMBUS, OH 43210 (614)292-8658 C EXTERNAL DXRAND DOUBLE PRECISION RBUF, V1, V2, S, DXRAND LOGICAL RBGOOD SAVE RBUF, RBGOOD DATA RBGOOD/.FALSE./ C C CHECK FOR RANDOM NUMBER LEFT OVER IN BUFFER IF (RBGOOD) THEN DGAUS = STDDEV*RBUF + MEAN RBGOOD = .FALSE. RETURN ENDIF C C GET RANDOM VECTOR IN UNIT CIRCLE 20 CONTINUE V1 = 2.0D0*DXRAND(0) - 1.0D0 V2 = 2.0D0*DXRAND(0) - 1.0D0 S = V1*V1 + V2*V2 IF (S .GE. 1.0D0) GOTO 20 C S = SQRT(-2.0D0*LOG(S)/S) RBUF = V1*S RBGOOD = .TRUE. DGAUS = STDDEV*V2*S + MEAN RETURN C --- LAST LINE OF DGAUS --- END SUBROUTINE MADD (NA,NB,NC,M,N,A,B,C) C C *****PARAMETERS: INTEGER NA,NB,NC,M,N DOUBLE PRECISION A(NA,N),B(NB,N),C(NC,N) C C *****LOCAL VARIABLES: INTEGER I,J C C *****SUBROUTINES CALLED: C NONE C C ------------------------------------------------------------------ C C *****PURPOSE: C THIS SUBROUTINE COMPUTES THE MATRIX SUM A+B AND STORES THE C RESULT IN THE ARRAY C. ALL MATRICES ARE M X N. THE SUM C MAY BE OVERWRITTEN INTO A (B) BY DESIGNATING THE ARRAY C C TO BE A (B). C C *****PARAMETER DESCRIPTION: C C ON INPUT: C C NA,NB,NC ROW DIMENSIONS OF THE ARRAYS CONTAINING A,B, C AND C,RESPECTIVELY, AS DECLARED IN THE CALLING C PROGRAM DIMENSION STATEMENT; C C M NUMBER OF ROWS OF THE MATRICES A, B, AND C; C C N NUMBER OF COLUMNS OF THE MATRICES A, B, AND C; C C A AN M X N MATRIX; C C B AN M X N MATRIX. C C ON OUTPUT: C C C AN M X N ARRAY CONTAINING A+B. C C *****HISTORY: C WRITTEN BY ALAN J. LAUB (ELEC. SYS. LAB., M.I.T., RM. 35-331, C CAMBRIDGE, MA 02139, PH.: (617)-253-2125), SEPTEMBER 1977. C MOST RECENT VERSION: SEP. 21, 1977. C C ------------------------------------------------------------------ C DO 20 J=1,N DO 10 I=1,M C(I,J)=A(I,J)+B(I,J) 10 CONTINUE 20 CONTINUE RETURN C C LAST LINE OF MADD C END SUBROUTINE MSAVE (NA,NAS,M,N,A,ASAVE) C C *****PARAMETERS: INTEGER NA,NAS,M,N DOUBLE PRECISION A(NA,N),ASAVE(NAS,N) C C *****LOCAL VARIABLES: INTEGER I,J C C *****SUBROUTINES CALLED: C NONE C C ------------------------------------------------------------------ C C *****PURPOSE: C THIS SUBROUTINE COPIES THE CONTENTS OF THE M X N ARRAY A INTO C THE M X N ARRAY ASAVE. C C *****PARAMETER DESCRIPTION: C C ON INPUT: C C NA,NAS ROW DIMENSIONS OF THE ARRAYS CONTAINING A AND C AS, RESPECTIVELY, AS DECLARED IN THE CALLING C PROGRAM DIMENSION STATEMENT; C C M NUMBER OF ROWS OF THE MATRICES A AND ASAVE; C C N NUMBER OF COLUMNS OF THE MATRICES A AND ASAVE; C C A AN M X N MATRIX. C C ON OUTPUT: C C ASAVE AN M X N ARRAY CONTAINING THE ARRAY A. C C *****HISTORY: C WRITTEN BY ALAN J. LAUB (ELEC. SYS. LAB., M.I.T., RM. 35-331, C CAMBRIDGE, MA 02139, PH.: (617)-253-2125), SEPTEMBER 1977. C MOST RECENT VERSION: SEP. 21, 1977. C C ------------------------------------------------------------------ C DO 20 J=1,N DO 10 I=1,M ASAVE(I,J)=A(I,J) 10 CONTINUE 20 CONTINUE RETURN C C LAST LINE OF MSAVE C END SUBROUTINE MSUB (NA,NB,NC,M,N,A,B,C) C C *****PARAMETERS: INTEGER NA,NB,NC,M,N DOUBLE PRECISION A(NA,N),B(NB,N),C(NC,N) C C *****LOCAL VARIABLES: INTEGER I,J C C *****SUBROUTINES CALLED: C NONE C C ------------------------------------------------------------------ C C *****PURPOSE: C THIS SUBROUTINE COMPUTES THE MATRIX DIFFERENCE A-B AND STORES C THE RESULT IN THE ARRAY C. ALL MATRICES ARE M X N. THE C DIFFERENCE MAY BE OVERWRITTEN INTO A BY DESIGNATING THE C ARRAY C TO BE A. C C *****PARAMETER DESCRIPTION: C C ON INPUT: C C NA,NB,NC ROW DIMENSIONS OF THE ARRAYS CONTAINING A,B, C AND C, RESPECTIVELY, AS DECLARED IN THE C CALLING PROGRAM DIMENSION STATEMENT; C C M NUMBER OF ROWS OF THE MATRICES A,B, AND C; C C N NUMBER OF COLUMNS OF THE MATRICES A,B, AND C; C C A AN M X N MATRIX; C C B AN M X N MATRIX. C C ON OUTPUT: C C C AN M X N ARRAY CONTAINING A-B. C C *****HISTORY: C WRITTEN BY ALAN J. LAUB (ELEC. SYS. LAB., M.I.T., RM. 35-331, C CAMBRIDGE, MA 02139, PH.: (617)-253-2125), SEPTEMBER 1977. C MOST RECENT VERSION: SEP. 21, 1977. C C ------------------------------------------------------------------ C DO 20 J=1,N DO 10 I=1,M C(I,J)=A(I,J)-B(I,J) 10 CONTINUE 20 CONTINUE RETURN C C LAST LINE OF MSUB C END SUBROUTINE MULC (NA,NB,NC,M,N,L,A,B,C) C C *****PARAMETERS: INTEGER NA,NB,NC,L,M,N DOUBLE PRECISION A(NA,N),B(NB,L),C(NC,L) C C *****LOCAL VARIABLES: INTEGER I,J,K C C *****SUBROUTINES CALLED: C NONE C C ------------------------------------------------------------------ C C *****PURPOSE: C THIS SUBROUTINE COMPUTES THE MATRIX PRODUCT A*B AND STORES THE C RESULT IN THE ARRAY C. A IS M X N, B IS N X L, AND C IS C M X L. THE ARRAY C MUST BE DISTINCT FROM BOTH A AND B. C C *****PARAMETER DESCRIPTION: C C ON INPUT: C C NA ROW DIMENSION OF THE ARRAY CONTAINING A AS DECLARED C IN THE CALLING PROGRAM DIMENSION STATEMENT; C C NB ROW DIMENSION OF THE ARRAY CONTAINING B AS DECLARED C IN THE CALLING PROGRAM DIMENSION STATEMENT; C C NC ROW DIMENSION OF THE ARRAY CONTAINING C AS DECLARED C IN THE CALLING PROGRAM DIMENSION STATEMENT; C C L NUMBER OF COLUMNS OF THE MATRICES B AND C; C C M NUMBER OF ROWS OF THE MATRICES A AND C; C C N NUMBER OF COLUMNS OF THE MATRIX A AND NUMBER OF ROWS C OF THE MATRIX B; C C A AN M X N MATRIX; C C B AN N X L MATRIX. C C ON OUTPUT: C C C AN M X L ARRAY CONTAINING A*B. C C *****HISTORY: C ORIGINAL BY ALAN J. LAUB C MODIFIED AND RENAMED BY JUDITH D. GARDINER C C ------------------------------------------------------------------ C DO 40 J=1,L DO 10 I=1,M C(I,J)=0.0D0 10 CONTINUE DO 30 K=1,N DO 20 I=1,M C(I,J)=C(I,J)+A(I,K)*B(K,J) 20 CONTINUE 30 CONTINUE 40 CONTINUE RETURN C C LAST CARD OF MULC C END SUBROUTINE RANDM(A, LDA, M, N, DPAR, JOB) C INTEGER LDA,N,M,JOB DOUBLE PRECISION A(LDA,N),DPAR(3) C C THIS SUBROUTINE IS A GENERAL FACILITY FOR PRODUCING RANDOM MATRI- C CES. SEE JOB PARAMETER FOR OPTIONS. TO USE THIS ROUTINE DXRAND C -MUST- BE INITIALIZED BY THE USER. C C ON ENTRY - C LDA INTEGER C LEADING DECLARED DIMENSION OF A. C C M,N INTEGER C ROW AND COLUMN DIMENSION OF A , RESPECTIVELY. C C DPAR DOUBLE PRECISION (3) C AN ARRAY OF PARAMETERS (SEE JOB BELOW). C C JOB INTEGER C INTEGER IN DECIMAL FORM ABCDE INDICATING THE FOLLOWING C A,B,C (NOT USED, SHOULD BE SET TO ZERO) C D .EQ. 0 MAKE RANDOM DENSE MATRICES C D .EQ. 1 MAKE RANDOM SPARSE MATRICES WITH EACH C ELEMENT HAVING PROBABILITY DPAR(3) OF C BEING ZERO. C E .EQ. 0 USE UNIFORMLY DISTRIBUTED NUMBERS ON THE C INTERVAL [ DPAR(1), DPAR(2) ) . C E .EQ. 1 USE GAUSSIAN RANDOMS WITH MEAN DPAR(1), C AND VARIANCE DPAR(2). C E .EQ. 2 USE EXPONENTIALLY DISTRIBUTED VARIABLES C IN THE RANGE [ DPAR(1), DPAR(2) ). C C ON RETURN - C A DOUBLE PRECISION(LDA,N) C M BY N MATRIX OF RANDOMS C C SUBROUTINES AND FUNCTIONS USED - C (MATU) DGAUS; (FORTRAN) MOD IDINT DXRAND; C C WRITTEN - C 18FEB87 M.WETTE, UCSB ECE, SANTA BARBARA, CA 93106 (805)961-4691 C INTEGER I,J,ITYPE DOUBLE PRECISION DIFF,DM,DS,DA,DB,THRESH LOGICAL SPARSE C EXTERNAL DXRAND DOUBLE PRECISION DXRAND,DGAUS C ITYPE = MOD(JOB,10) THRESH = 0.0D0 SPARSE = (MOD(JOB/10,10) .NE. 0) C IF (ITYPE .NE. 0) GOTO 60 C --- UNIFORM RANDOM --- DIFF = DPAR(2) - DPAR(1) DA = DPAR(1) IF (SPARSE) GOTO 30 DO 20 J = 1,N DO 10 I = 1,M A(I,J) = DIFF*DXRAND(0) + DA 10 CONTINUE 20 CONTINUE RETURN 30 CONTINUE DO 50 J = 1,N DO 40 I = 1,M A(I,J) = 0.0D0 IF (DXRAND(0) .GT. DPAR(3)) * A(I,J) = DIFF*DXRAND(0) + DA 40 CONTINUE 50 CONTINUE RETURN 60 CONTINUE IF (ITYPE .NE. 1) GOTO 120 C --- GAUSSIAN RANDOMS --- DM = DPAR(1) DS = DPAR(2) IF (SPARSE) GOTO 90 DO 80 J = 1,N DO 70 I = 1,M A(I,J) = DGAUS(DM,DS) 70 CONTINUE 80 CONTINUE RETURN 90 CONTINUE DO 110 J = 1,N DO 100 I = 1,M IF (DXRAND(0) .GT. DPAR(3)) * A(I,J) = DGAUS(DM,DS) 100 CONTINUE 110 CONTINUE RETURN 120 CONTINUE IF (ITYPE .NE. 2) GOTO 180 C --- EXPONENTIAL --- DA = DPAR(1) DB = LOG(DPAR(2)/DA) IF (SPARSE) GOTO 150 DO 140 J = 1,N DO 130 I = 1,M A(I,J) = DA*EXP(DB) 130 CONTINUE 140 CONTINUE RETURN 150 CONTINUE DO 170 J = 1,N DO 160 I = 1,M IF (DXRAND(0) .GT. THRESH) * A(I,J) = DA*EXP(DB) 160 CONTINUE 170 CONTINUE RETURN 180 CONTINUE RETURN C C --- LAST LINE OF RANDM --- END DOUBLE PRECISION FUNCTION DXRAND(I) INTEGER I REAL RAND IF (I .GT. 0) THEN CALL SEED(I) DXRAND = 0.0D0 ELSE DXRAND = DBLE(RAND()) ENDIF END SHAR_EOF fi # end of overwriting check if test -f 'driver1.f' then echo shar: will not over-write existing file "'driver1.f'" else cat << "SHAR_EOF" > 'driver1.f' C--**--CH2907--705--P:LAP--28:10:1999 C--**--CH2876--705--B:MA--28:10:1999 C--**--CH2862--705--A:H--28:10:1999 C -- PROGRAM TSYLG -- C C THIS PROGRAM TESTS THE SOFTWARE FOR SOLVING THE GENERAL C SYLVESTER EQUATION C C A * X * B' + C * X * D' = E (' DENOTES TRANSPOSE) C C USING A SET OF ILL-CONDITIONED EQUATIONS. SEE "SOLUTION OF THE C SYLVESTER MATRIX EQUATION AXB'+CXD'=E" BY GARDINER, LAUB, AMATO, C AND MOLER FOR A DESCRIPTION OF THE TEST PROBLEMS. C C THE SOLUTION IS CHECKED BY COMPUTING THE RESIDUAL AND ITS RELATIVE C 1-NORM. THE CONDITION ESTIMATE IS CHECKED FOR SMALL SYSTEMS ONLY C (M*N <= 40) BY FORMING THE KRONECKER PRODUCT MATRIX AND COMPUTING C ITS SINGULAR VALUE DECOMPOSITION. C C SUBROUTINES AND FUNCTIONS CALLED - C SYLG; (LINPACK) DSVDC; C (MATU) MSAVE, D1NRM, MSUB, MULC, TRNATA C C WRITTEN - C 28NOV88 J. GARDINER, OSU CIS, COLUMBUS, OH 43210 (614)292-8658 C REVISED - C 17DEC90 J. GARDINER, OSU CIS, COLUMBUS, OH 43210 (614)292-8658 C C -- MAXIMUM M IS 9, MAXIMUM N IS 8 -- INTEGER NAC, NBD, NE, NW1, NW2, NW3, M, N, IERR INTEGER MMAX, NMAX, MNMAX, WRKLEN, MAXSVD PARAMETER (MMAX=9, NMAX=8, MNMAX=9, MAXSVD=40, + WRKLEN = 2*MMAX*MMAX+NMAX*NMAX+NMAX*MMAX+7*MMAX+MNMAX*MNMAX) DOUBLE PRECISION A0(MMAX,MMAX), B0(NMAX,NMAX), C0(MMAX,MMAX), + D0(NMAX,NMAX), E0(MMAX,NMAX) DOUBLE PRECISION A1(MMAX,MMAX), B1(NMAX,NMAX), C1(MMAX,MMAX), + D1(NMAX,NMAX), E1(MMAX,NMAX) DOUBLE PRECISION WKM1(MMAX,NMAX), WKM2(MMAX,NMAX), + WKM3(MAXSVD,MAXSVD), WKV(WRKLEN) INTEGER IWKV(2*MMAX) C INTEGER I, J, II, JJ, INDX, JNDX, MXN INTEGER IDMY, KT DOUBLE PRECISION TMP, NRMR, NRME, WORST, RCOND, RCDSVD DOUBLE PRECISION DUMY(1), WORSTL, WORSTH, RATIO, S DOUBLE PRECISION D1NRM C --- OUTPUT UNIT FOR WRITE --- NAC = MMAX NBD = NMAX NE = MMAX NW1 = MMAX NW2 = MMAX NW3 = MAXSVD C C -- INITIALIZE -- WORST = 0.0D0 WORSTL = 1.0D100 WORSTH = 0.0D0 C WRITE(*,90000) WRITE(*,90001) 90000 FORMAT(" T T") 90001 FORMAT(" SOLVE A*X*B + C*X*D = E USING SYLG") C C USE THESE TWO LINES TO RUN A COMPLETE TEST C DO 320 M = 2,NAC DO 310 N = 2,NBD C C USE THESE TWO LINES TO RUN A MINIMAL INSTALLATION TEST C C DO 320 M = 3,3 C DO 310 N = 2,2 C WRITE(*,90005) M, N C 90005 FORMAT(/ " M =", I3, " N =", I3) DO 230 KT = 0,40,10 S = (2.0D0)**(-KT) C C GENERATE COEFFICIENT MATRICES -- TRUE SOLUTION IS MATRIX OF ALL ONES C DO 120 I=1,M DO 110 J=1,I A0(I,J) = 1.0D0 A0(J,I) = 0.0D0 C0(J,I) = S C0(I,J) = 0.0D0 110 CONTINUE A0(I,I) = I C0(I,I) = 1.0D0 120 CONTINUE C DO 140 I=1,N DO 130 J=1,I B0(J,I) = S B0(I,J) = 0.0D0 D0(I,J) = 1.0D0 D0(J,I) = 0.0D0 130 CONTINUE B0(I,I) = 1.0D0 D0(I,I) = S - (N-I+1) 140 CONTINUE C DO 160 I=1,M WKV(I) = 0.0D0 WKV(M+I) = 0.0D0 DO 150 J=1,M WKV(I) = WKV(I) + A0(I,J) WKV(M+I) = WKV(M+I) + C0(I,J) 150 CONTINUE 160 CONTINUE DO 190 I=1,N TMP = 0.0D0 DUMY(1) = 0.0D0 DO 170 J=1,N TMP = TMP + B0(I,J) DUMY(1) = DUMY(1) + D0(I,J) 170 CONTINUE DO 180 J=1,M E0(J,I) = TMP * WKV(J) + DUMY(1) * WKV(M+J) 180 CONTINUE 190 CONTINUE C C -- SAVE A COPY -- CALL MSAVE(NAC, NAC, M, M, A0, A1) CALL MSAVE(NAC, NAC, M, M, C0, C1) CALL MSAVE(NBD, NBD, N, N, B0, B1) CALL MSAVE(NBD, NBD, N, N, D0, D1) CALL MSAVE(NE, NE, M, N, E0, E1) C C -- COMPUTE NORM OF E -- NRME = D1NRM(NE, M, N, E0) C C -- COMPUTE SOLUTION, ESTIMATE CONDITION IF SVD COMPUTABLE -- MXN = M*N IF (MXN .LE. MAXSVD) THEN IERR = 1 ELSE IERR = 0 ENDIF CALL SYLG(NAC, NBD, NE, M, N, A0, B0, C0, D0, E0, WKV, IWKV, * IERR, RCOND) IF (IERR .NE. 0) THEN WRITE(*,90003) KT, IERR 90003 FORMAT(" AT ITERATION", I2, " ERROR IN SYLG, IERR=", I2) ENDIF C C -- COMPUTE RESIDUAL -- CALL MULC(NAC, NE, NW1, M, M, N, A1, E0, WKM1) CALL TRNATA(NBD, N, B1) CALL MULC(NW1, NBD, NW2, M, N, N, WKM1, B1, WKM2) CALL TRNATA(NBD, N, B1) CALL MSUB(NE, NW2, NE, M, N, E1, WKM2, E1) CALL MULC(NAC, NE, NW1, M, M, N, C1, E0, WKM1) CALL TRNATA(NBD, N, D1) CALL MULC(NW1, NBD, NW2, M, N, N, WKM1, D1, WKM2) CALL TRNATA(NBD, N, D1) CALL MSUB(NE, NW2, NE, M, N, E1, WKM2, E1) C C -- COMPUTE NORM OF RESIDUAL -- NRMR = D1NRM(NE, M, N, E1) TMP = NRMR/NRME IF (TMP .GT. WORST) WORST = TMP C C -- COMPUTE REAL CONDITION NUMBER -- IF (MXN .LE. MAXSVD) THEN DO 40 J = 1,N DO 30 JJ = 1,M DO 20 I = 1,N DO 10 II = 1,M INDX = M*(I-1) + II JNDX = M*(J-1) + JJ WKM3(INDX,JNDX) = A1(II,JJ)*B1(I,J) & + C1(II,JJ)*D1(I,J) 10 CONTINUE 20 CONTINUE 30 CONTINUE 40 CONTINUE IDMY = 1 CALL DSVDC(WKM3, NW3, MXN, MXN, WKV, WKV(MXN+1), DUMY, IDMY, * DUMY, IDMY, WKM1, 00, IERR) IF (IERR .NE. 0) THEN WRITE(*,90006) KT 90006 FORMAT(" ITERATION", I2, " SVD FAILED") RCDSVD = 0.0D0 ELSE RCDSVD = WKV(MXN) / WKV(1) ENDIF RATIO = RCOND / RCDSVD IF (RATIO .LT. WORSTL) WORSTL = RATIO IF (RATIO .GT. WORSTH) WORSTH = RATIO ENDIF C C -- PRINT RESULTS -- IF (MXN .LE. MAXSVD) THEN WRITE(*,90002) KT, TMP, RCOND, RATIO ELSE WRITE(*,90007) KT, TMP ENDIF 90002 FORMAT(1X, I2, ' (NRM RESID)/(NRM E)=', E10.3, ' RCO +ND(EST)=', E10.3, ' EST/TRUE=', E10.3) C 90007 FORMAT(1X, I2, ' (NRM RESID)/(NRM E)=', E10.3) 230 CONTINUE C 310 CONTINUE 320 CONTINUE C WRITE(*,90004) WORST 90004 FORMAT(/ " WORST CASE RESIDUAL IS", E10.3) WRITE(*,90008) WORSTL, WORSTH C 90008 FORMAT(' WORST CASE RCOND RATIOS (EST/TRUE) ARE', E10.3, ' ( +LOW) AND', E10.3, ' (HIGH)') WRITE(*,90010) 90010 FORMAT(// ' THE RESIDUAL SHOULD BE ON THE ORDER OF 1E-14', + ' OR SMALLER ON MOST MACHINES.') WRITE(*,90011) C 90011 FORMAT(' THE RCOND RATIOS SHOULD BE ON THE ORDER OF 1,', ' I +.E., BETWEEN .1 AND 10.') STOP C --- LAST LINE OF TSYLG --- END SHAR_EOF fi # end of overwriting check if test -f 'driver2.f' then echo shar: will not over-write existing file "'driver2.f'" else cat << "SHAR_EOF" > 'driver2.f' C--**--CH2908--705--P:LAP--28:10:1999 C--**--CH2885--705--C:SU--28:10:1999 C--**--CH2881--705--B:MA--28:10:1999 C--**--CH2863--705--A:H--28:10:1999 C -- PROGRAM TSYLGC -- C C THIS PROGRAM TESTS THE SOFTWARE FOR SOLVING THE SYMMETRIC C SYLVESTER EQUATION C C A*X*E' + E*X*A' + Q = 0 (' DENOTES TRANSPOSE) C C USING A SET OF ILL-CONDITIONED EQUATIONS. SEE "SOLUTION OF THE C SYLVESTER MATRIX EQUATION AXB'+CXD'=E" BY GARDINER, LAUB, AMATO, C AND MOLER FOR A DESCRIPTION OF THE TEST PROBLEMS. C C THE SOLUTION IS CHECKED BY COMPUTING THE RESIDUAL AND ITS RELATIVE C 1-NORM. THE CONDITION ESTIMATE IS CHECKED FOR SMALL SYSTEMS ONLY C (N*N <= 40) BY FORMING THE KRONECKER PRODUCT MATRIX AND COMPUTING C ITS SINGULAR VALUE DECOMPOSITION. C C SUBROUTINES AND FUNCTIONS CALLED - C SYLGC; (LINPACK) DSVDC; (MATU) MADD MULC TRNATA D1NRM MSAVE C C WRITTEN - C 27JAN89 J. GARDINER, OSU CIS, COLUMBUS, OH 43210 (614)292-8658 C REVISED - C 12DEC90 J. GARDINER, OSU CIS, COLUMBUS, OH 43210 (614)292-8658 C C -- MAXIMUM N IS 8 -- INTEGER NAE, NQ, NW, N, IERR, NWX, IDMY, KT INTEGER NMAX, WRKLEN, MAXSVD PARAMETER (NMAX=8, WRKLEN=2*NMAX*NMAX+3*NMAX, + MAXSVD=40) DOUBLE PRECISION A(NMAX,NMAX), E(NMAX,NMAX), Q(NMAX,NMAX) DOUBLE PRECISION WKM1(NMAX,NMAX), WKM2(NMAX,NMAX), + WKV(WRKLEN) C INTEGER I, J, NXN, II, JJ, INDX, JNDX DOUBLE PRECISION A1(NMAX,NMAX), E1(NMAX,NMAX), Q1(NMAX,NMAX), + WKMX(MAXSVD,MAXSVD) DOUBLE PRECISION TMP, NRMR, NRMQ, WORST, RCOND, RCDSVD DOUBLE PRECISION WORSTL, WORSTH, RATIO, DUMY(1), ST DOUBLE PRECISION D1NRM C --- OUTPUT UNIT FOR WRITE --- NAE = NMAX NQ = NMAX NW = NMAX NWX = MAXSVD C C -- INITIALIZE -- WORST = 0.0D0 WORSTL = 1.0D100 WORSTH = 0.0D0 C WRITE(*,90000) WRITE(*,90001) 90000 FORMAT(" T T") 90001 FORMAT(" SOLVE A*X*E + E*X*A + Q = 0 USING SYLGC") C C USE THIS LINE TO RUN A COMPLETE TEST C DO 300 N = 1,NMAX C C USE THIS LINE TO RUN A MINIMAL INSTALLATION TEST C C DO 300 N = 5,5 C WRITE(*,90005) N C 90005 FORMAT(/ " N =", I3) DO 230 KT = 0,40,10 ST = (2.0D0)**(-KT) C C GENERATE COEFFICIENT MATRICES -- TRUE SOLUTION IS MATRIX OF ALL ONES C DO 80 I=1,N DO 70 J=1,I A(I,J) = 1.0D0 A(J,I) = 0.0D0 E(J,I) = ST E(I,J) = 0.0D0 70 CONTINUE A(I,I) = ST + (I-1) E(I,I) = 1.0D0 80 CONTINUE C DO 160 I=1,N WKV(I) = 0.0D0 DO 150 J=1,N WKV(I) = WKV(I) + A(I,J) 150 CONTINUE 160 CONTINUE DO 190 I=1,N TMP = 0.0D0 DO 170 J=1,N TMP = TMP + E(I,J) 170 CONTINUE DO 180 J=1,N Q(J,I) = TMP * WKV(J) 180 CONTINUE 190 CONTINUE DO 210 I=1,N DO 200 J=1,I Q(I,J) = -(Q(I,J) + Q(J,I)) Q(J,I) = Q(I,J) 200 CONTINUE 210 CONTINUE C C -- SAVE A COPY -- CALL MSAVE(NAE, NAE, N, N, A, A1) CALL MSAVE(NAE, NAE, N, N, E, E1) CALL MSAVE(NQ, NQ, N, N, Q, Q1) C C -- COMPUTE NORM OF Q -- NRMQ = D1NRM(NQ, N, N, Q) C C -- COMPUTE SOLUTION, ESTIMATE CONDITION IF SVD COMPUTABLE -- NXN = N*N IF (NXN .LE. MAXSVD) THEN IERR = 1 ELSE IERR = 0 ENDIF CALL SYLGC(NAE, NQ, N, A, E, Q, WKV, IERR, RCOND) IF (IERR .NE. 0) THEN WRITE(*,90003) KT, IERR 90003 FORMAT(" AT ITERATION", I2, " ERROR IN SYLGC, IERR=", I2) ENDIF C C -- COMPUTE RESIDUAL -- CALL MULC(NAE, NQ, NW, N, N, N, A1, Q, WKM1) CALL TRNATA(NAE, N, E1) CALL MULC(NW, NAE, NW, N, N, N, WKM1, E1, WKM2) CALL TRNATA(NAE, N, E1) CALL MADD(NQ, NW, NQ, N, N, Q1, WKM2, Q1) CALL MULC(NAE, NQ, NW, N, N, N, E1, Q, WKM1) CALL TRNATA(NAE, N, A1) CALL MULC(NW, NAE, NW, N, N, N, WKM1, A1, WKM2) CALL TRNATA(NAE, N, A1) CALL MADD(NQ, NW, NQ, N, N, Q1, WKM2, Q1) C C -- COMPUTE NORM OF RESIDUAL -- NRMR = D1NRM(NQ, N, N, Q1) TMP = NRMR/NRMQ IF (TMP .GT. WORST) WORST = TMP C C -- COMPUTE REAL CONDITION NUMBER IF (NXN .LE. MAXSVD) THEN DO 140 J = 1,N DO 130 JJ = 1,N DO 120 I = 1,N DO 110 II = 1,N INDX = N*(I-1) + II JNDX = N*(J-1) + JJ WKMX(INDX,JNDX) = A1(II,JJ)*E1(I,J) * + E1(II,JJ)*A1(I,J) 110 CONTINUE 120 CONTINUE 130 CONTINUE 140 CONTINUE IDMY = 1 CALL DSVDC(WKMX, NWX, NXN, NXN, WKV, WKV(NXN+1), DUMY, IDMY, * DUMY, IDMY, WKM1, 00, IERR) IF (IERR .NE. 0) THEN WRITE(*,90006) KT 90006 FORMAT(" ITERATION", I2, " SVD FAILED") RCDSVD = 0.0D0 ELSE RCDSVD = WKV(NXN) / WKV(1) ENDIF RATIO = RCOND / RCDSVD IF (RATIO .LT. WORSTL) WORSTL = RATIO IF (RATIO .GT. WORSTH) WORSTH = RATIO ENDIF C C -- PRINT RESULTS -- IF (NXN .LE. MAXSVD) THEN WRITE(*,90002) KT, TMP, RCOND, RATIO ELSE WRITE(*,90007) KT, TMP ENDIF 90002 FORMAT(1X, I2, ' (NRM RESID)/(NRM Q)=', E10.3, ' RCO +ND(EST)=', E10.3, ' EST/TRUE=', E10.3) C C 90007 FORMAT(1X, I2, ' (NRM RESID)/(NRM Q)=', E10.3) 230 CONTINUE 300 CONTINUE C WRITE(*,90004) WORST 90004 FORMAT(/ " WORST CASE RESIDUAL IS", E10.3) WRITE(*,90008) WORSTL, WORSTH C 90008 FORMAT(' WORST CASE RCOND RATIOS (EST/TRUE) ARE', E10.3, ' ( +LOW) AND', E10.3, ' (HIGH)') WRITE(*,90010) 90010 FORMAT(// ' THE RESIDUAL SHOULD BE ON THE ORDER OF 1E-14', + ' OR SMALLER ON MOST MACHINES.') WRITE(*,90011) C 90011 FORMAT(' THE RCOND RATIOS SHOULD BE ON THE ORDER OF 1,', ' I +.E., BETWEEN .1 AND 10.') STOP C --- LAST LINE OF TSYLGC --- END SHAR_EOF fi # end of overwriting check if test -f 'driver3.f' then echo shar: will not over-write existing file "'driver3.f'" else cat << "SHAR_EOF" > 'driver3.f' C--**--CH3665--705--C:SU--8:6:2000 C--**--CH2912--705--P:FIX--28:10:1999 C--**--CH2909--705--P:LAP--28:10:1999 C--**--CH2903--705--P:RW--28:10:1999 C--**--CH2895--705--B:FIX--28:10:1999 C--**--CH2886--705--B:MA--28:10:1999 C--**--CH2864--705--A:H--28:10:1999 C -- PROGRAM TSYLGD -- C C C THIS PROGRAM TESTS THE SOFTWARE FOR SOLVING THE SYMMETRIC C SYLVESTER EQUATION C C A*X*A' - E*X*E' + Q = 0 (' DENOTES TRANSPOSE) C C USING A SET OF ILL-CONDITIONED EQUATIONS. SEE "SOLUTION OF THE C SYLVESTER MATRIX EQUATION AXB'+CXD'=E" BY GARDINER, LAUB, AMATO, C AND MOLER FOR A DESCRIPTION OF THE TEST PROBLEMS. C C THE SOLUTION IS CHECKED BY COMPUTING THE RESIDUAL AND ITS RELATIVE C 1-NORM. THE CONDITION ESTIMATE IS CHECKED FOR SMALL SYSTEMS ONLY C (N*N <= 40) BY FORMING THE KRONECKER PRODUCT MATRIX AND COMPUTING C ITS SINGULAR VALUE DECOMPOSITION. C C SUBROUTINES AND FUNCTIONS CALLED - C SYLGD; (LINPACK) DSVDC; (MATU) MADD MULC TRNATA D1NRM MSAVE MSUB C C WRITTEN - C 27JAN89 J. GARDINER, OSU CIS, COLUMBUS, OH 43210 (614)292-8658 C REVISED - C 14DEC90 J. GARDINER, OSU CIS, COLUMBUS, OH 43210 (614)292-8658 C C -- MAXIMUM N IS 8 -- INTEGER NAE, NQ, NW, N, IERR, NWX, IDMY, KT C INTEGER MAXN INTEGER NMAX, WRKLEN, MAXSVD PARAMETER (NMAX=8, WRKLEN=2*NMAX*NMAX+3*NMAX,MAXSVD=40) DOUBLE PRECISION A(NMAX,NMAX), E(NMAX,NMAX), Q(NMAX,NMAX) DOUBLE PRECISION WKM1(NMAX,NMAX), WKM2(NMAX,NMAX), + WKV(WRKLEN) C INTEGER I, J, NXN, II, JJ, INDX, JNDX DOUBLE PRECISION A1(NMAX,NMAX), E1(NMAX,NMAX), Q1(NMAX,NMAX), + WKMX(MAXSVD,MAXSVD) DOUBLE PRECISION TMP, NRMR, NRMQ, WORST, RCOND, RCDSVD DOUBLE PRECISION WORSTL, WORSTH, RATIO, DUMY(1), ST DOUBLE PRECISION D1NRM NAE = NMAX NQ = NMAX NW = NMAX NWX = MAXSVD C C -- INITIALIZE -- WORST = 0.0D0 WORSTL = 1.0D100 WORSTH = 0.0D0 C NTEST = 5 C WRITE(*,90000) WRITE(*,90001) 90000 FORMAT(" T T") 90001 FORMAT(" SOLVE A*X*A - E*X*E + Q = 0 USING SYLGD") C C USE THIS LINE TO RUN A COMPLETE TEST C DO 300 N = 2,NMAX C C USE THIS LINE TO RUN A MINIMAL INSTALLATION TEST C C DO 300 N = 5,5 C WRITE(*,90005) N C 90005 FORMAT(/ " N =", I3) DO 230 KT = 0,40,10 ST = (2.0D0)**(-KT) C C GENERATE COEFFICIENT MATRICES -- TRUE SOLUTION IS MATRIX OF ALL ONES C DO 80 I=1,N DO 70 J=1,I A(I,J) = 1.0D0 A(J,I) = 0.0D0 E(J,I) = ST E(I,J) = 0.0D0 70 CONTINUE A(I,I) = ST + I E(I,I) = 1.0D0 80 CONTINUE C DO 160 I=1,N WKV(I) = 0.0D0 WKV(I+N) = 0.0D0 DO 150 J=1,N WKV(I) = WKV(I) + A(I,J) WKV(I+N) = WKV(I+N) + E(I,J) 150 CONTINUE 160 CONTINUE DO 190 I=1,N TMP = 0.0D0 DUMY(1) = 0.0D0 DO 170 J=1,N TMP = TMP + A(I,J) DUMY(1) = DUMY(1) + E(I,J) 170 CONTINUE DO 180 J=1,N Q(J,I) = -( TMP * WKV(J) - DUMY(1) * WKV(J+N) ) 180 CONTINUE 190 CONTINUE C C -- SAVE A COPY -- CALL MSAVE(NAE, NAE, N, N, A, A1) CALL MSAVE(NAE, NAE, N, N, E, E1) CALL MSAVE(NQ, NQ, N, N, Q, Q1) C C -- COMPUTE NORM OF Q -- NRMQ = D1NRM(NQ, N, N, Q) C C -- COMPUTE SOLUTION, ESTIMATE CONDITION IF SVD COMPUTABLE -- NXN = N*N IF (NXN .LE. MAXSVD) THEN IERR = 1 ELSE IERR = 0 ENDIF CALL SYLGD(NAE, NQ, N, A, E, Q, WKV, IERR, RCOND) IF (IERR .NE. 0) THEN WRITE(*,90003) KT, IERR 90003 FORMAT(" AT ITERATION", I2, " ERROR IN SYLGD, IERR=", I2) ENDIF C C -- COMPUTE RESIDUAL -- CALL MULC(NAE, NQ, NW, N, N, N, A1, Q, WKM1) CALL TRNATA(NAE, N, A1) CALL MULC(NW, NAE, NW, N, N, N, WKM1, A1, WKM2) CALL TRNATA(NAE, N, A1) CALL MADD(NQ, NW, NQ, N, N, Q1, WKM2, Q1) CALL MULC(NAE, NQ, NW, N, N, N, E1, Q, WKM1) CALL TRNATA(NAE, N, E1) CALL MULC(NW, NAE, NW, N, N, N, WKM1, E1, WKM2) CALL TRNATA(NAE, N, E1) CALL MSUB(NQ, NW, NQ, N, N, Q1, WKM2, Q1) C C -- COMPUTE NORM OF RESIDUAL -- NRMR = D1NRM(NQ, N, N, Q1) TMP = NRMR/NRMQ IF (TMP .GT. WORST) WORST = TMP C C -- COMPUTE REAL CONDITION NUMBER IF (NXN .LE. MAXSVD) THEN DO 140 J = 1,N DO 130 JJ = 1,N DO 120 I = 1,N DO 110 II = 1,N INDX = N*(I-1) + II JNDX = N*(J-1) + JJ WKMX(INDX,JNDX) = A1(II,JJ)*A1(I,J) * - E1(II,JJ)*E1(I,J) 110 CONTINUE 120 CONTINUE 130 CONTINUE 140 CONTINUE IDMY = 1 CALL DSVDC(WKMX, NWX, NXN, NXN, WKV, WKV(NXN+1), DUMY, IDMY, * DUMY, IDMY, WKM1, 00, IERR) IF (IERR .NE. 0) THEN WRITE(*,90006) KT 90006 FORMAT(" ITERATION", I2, " SVD FAILED") RCDSVD = 0.0D0 ELSE RCDSVD = WKV(NXN) / WKV(1) ENDIF RATIO = RCOND / RCDSVD IF (RATIO .LT. WORSTL) WORSTL = RATIO IF (RATIO .GT. WORSTH) WORSTH = RATIO ENDIF C C -- PRINT RESULTS -- IF (NXN .LE. MAXSVD) THEN WRITE(*,90002) KT, TMP, RCOND, RATIO ELSE WRITE(*,90007) KT, TMP ENDIF 90002 FORMAT(1X, I2, ' (NRM RESID)/(NRM Q)=', E10.3, ' RCO +ND(EST)=', E10.3, ' EST/TRUE=', E10.3) C C 90007 FORMAT(1X, I2, ' (NRM RESID)/(NRM Q)=', E10.3) 230 CONTINUE 300 CONTINUE C WRITE(*,90004) WORST 90004 FORMAT(/ " WORST CASE RESIDUAL IS", E10.3) WRITE(*,90008) WORSTL, WORSTH C 90008 FORMAT(' WORST CASE RCOND RATIOS (EST/TRUE) ARE', E10.3, ' ( +LOW) AND', E10.3, ' (HIGH)') WRITE(*,90010) 90010 FORMAT(// ' THE RESIDUAL SHOULD BE ON THE ORDER OF 1E-14', + ' OR SMALLER ON MOST MACHINES.') WRITE(*,90011) C 90011 FORMAT(' THE RCOND RATIOS SHOULD BE ON THE ORDER OF 1,', ' I +.E., BETWEEN .1 AND 10.') STOP C --- LAST LINE OF TSYLGD --- END SHAR_EOF fi # end of overwriting check if test -f 'driver4.f' then echo shar: will not over-write existing file "'driver4.f'" else cat << "SHAR_EOF" > 'driver4.f' C--**--CH2919--705--P:FIX--28:10:1999 C--**--CH2910--705--P:LAP--28:10:1999 C--**--CH2896--705--B:FIX--28:10:1999 C--**--CH2887--705--B:MA--28:10:1999 C--**--CH2865--705--A:H--28:10:1999 C--**--CH2859--705--P:RW--28:10:1999 C -- PROGRAM TSYLGF -- C C THIS PROGRAM TESTS THE SOFTWARE FOR SOLVING THE GENERAL C SYLVESTER EQUATION C C A * X * B' + C * X * D' = E (' DENOTES TRANSPOSE) C C READING THE COEFFICIENT MATRICES FROM A FILE. C C THE SOLUTION IS CHECKED BY COMPUTING THE RESIDUAL AND ITS RELATIVE C 1-NORM. THE CONDITION ESTIMATE IS CHECKED FOR SMALL SYSTEMS ONLY C (M*N <= 40) BY FORMING THE KRONECKER PRODUCT MATRIX AND COMPUTING C ITS SINGULAR VALUE DECOMPOSITION. C C INPUT FILE FORMAT (SEE EXAMPLE FILE TEST1.IN): C INPUT IS FREE FORMAT; MATRICES ARE READ BY ROWS. C DIMENSIONS M AND N (INTEGER) C A; EACH ROW MUST BEGIN ON A NEW LINE AND MAY TAKE AS MANY LINES C AS NECESSARY. C B; C; D; E; SAME COMMENT. C C SUBROUTINES AND FUNCTIONS CALLED - C SYLG; (LINPACK) DSVDC; C (MATU) MSAVE, D1NRM, MSUB, MULC, TRNATA C C WRITTEN - C 12DEC90 J. GARDINER, OSU CIS, COLUMBUS, OH 43210 (614)292-8658 C C -- MAXIMUM M IS 9, MAXIMUM N IS 8 -- INTEGER NAC, NBD, NE, NW, M, N, IERR INTEGER MMAX, NMAX, MNMAX, WRKLEN, MAXSVD PARAMETER (MMAX=9, NMAX=8, MNMAX=9, MAXSVD=40, + WRKLEN = 2*MMAX*MMAX+NMAX*NMAX+NMAX*MMAX+7*MMAX+MNMAX*MNMAX) DOUBLE PRECISION A0(MMAX,MMAX), B0(NMAX,NMAX), C0(MMAX,MMAX), + D0(NMAX,NMAX), E0(MMAX,NMAX) DOUBLE PRECISION A1(MMAX,MMAX), B1(NMAX,NMAX), C1(MMAX,MMAX), + D1(NMAX,NMAX), E1(MMAX,NMAX) DOUBLE PRECISION WKM1(MMAX,MMAX), WKM2(NMAX,NMAX), + WRKSVD(MAXSVD,MAXSVD), WKV(WRKLEN) INTEGER IWKV(2*MMAX) C INTEGER I, J, II, JJ, INDX, JNDX, MXN INTEGER IDMY DOUBLE PRECISION NRMR, NRME, RCOND, RCDSVD DOUBLE PRECISION DUMY(1), RATIO DOUBLE PRECISION D1NRM C CHARACTER*20 INNAME, OUTNAM CHARACTER YESNO C NAC = MMAX NBD = NMAX NE = MMAX NW = NMAX C C -- INITIALIZE -- WRITE(*,90000) WRITE(*,90001) 90000 FORMAT(" T T") C C WRITE(*,91002) C91002 FORMAT(/' ENTER NAME OF FILE CONTAINING COEFFICIENT MATRICES ') C READ(5,91003) INNAME C91003 FORMAT(A) C OPEN(2,FILE=INNAME) C WRITE(*,91004) C91004 FORMAT(/' ENTER NAME OF FILE FOR OUTPUT OF SOLUTION MATRIX') C READ(5,91003) OUTNAM C OPEN(3,FILE=OUTNAM) C C -- READ COEFFICIENT MATRICES -- 90001 FORMAT(" SOLVE A*X*B + C*X*D = E USING SYLG") READ(*,*) M, N IF (M .GT. NAC .OR. N .GT. NBD) THEN WRITE(*,91005) M, N, NAC, NBD 91005 FORMAT(/' DIMENSION OF PROBLEM IS TOO LARGE: M =',I2,', N =', + I2 / ' MAXIMUM: M =',I2,', N =',I2) STOP ENDIF WRITE(*,91008) M, N C 91008 FORMAT(/' M =',I2,', N =',I2) DO 201 I=1,M READ(*,*)(A0(I,J),J=1,M) 201 CONTINUE DO 202 I=1,N READ(*,*)(B0(I,J),J=1,N) 202 CONTINUE DO 203 I=1,M READ(*,*)(C0(I,J),J=1,M) 203 CONTINUE DO 204 I=1,N READ(*,*)(D0(I,J),J=1,N) 204 CONTINUE DO 205 I=1,M READ(*,*)(E0(I,J),J=1,N) 205 CONTINUE C C -- SAVE A COPY -- CALL MSAVE(NAC, NAC, M, M, A0, A1) CALL MSAVE(NAC, NAC, M, M, C0, C1) CALL MSAVE(NBD, NBD, N, N, B0, B1) CALL MSAVE(NBD, NBD, N, N, D0, D1) CALL MSAVE(NE, NE, M, N, E0, E1) C C -- COMPUTE NORM OF E -- NRME = D1NRM(NE, M, N, E0) C C -- COMPUTE SOLUTION AND ESTIMATE CONDITION IERR = 1 CALL SYLG(NAC, NBD, NE, M, N, A0, B0, C0, D0, E0, WKV, IWKV, * IERR, RCOND) IF (IERR .NE. 0) THEN WRITE(*,90003) IERR 90003 FORMAT(" ERROR FROM SYLG, IERR=", I2) ENDIF C C -- SAVE SOLUTION -- DO 301 I=1,M WRITE(*,92001) (E0(I,J),J=1,N) 92001 FORMAT(1X,6E12.4) 301 CONTINUE C C -- COMPUTE RESIDUAL -- CALL MULC(NAC, NE, NW, M, M, N, A1, E0, WKM1) CALL TRNATA(NBD, N, B1) CALL MULC(NW, NBD, NW, M, N, N, WKM1, B1, WKM2) CALL TRNATA(NBD, N, B1) CALL MSUB(NE, NW, NE, M, N, E1, WKM2, E1) CALL MULC(NAC, NE, NW, M, M, N, C1, E0, WKM1) CALL TRNATA(NBD, N, D1) CALL MULC(NW, NBD, NW, M, N, N, WKM1, D1, WKM2) CALL TRNATA(NBD, N, D1) CALL MSUB(NE, NW, NE, M, N, E1, WKM2, E1) C C -- COMPUTE NORM OF RESIDUAL -- NRMR = D1NRM(NE, M, N, E1) / NRME C C -- PRINT RESULTS -- WRITE(*,90002) NRMR, RCOND C C -- COMPUTE REAL CONDITION NUMBER IF REQUESTED -- 90002 FORMAT(1X, ' (NRM RESID)/(NRM E)=', E10.3, ' RCOND(E +ST)=', E10.3) MXN = M*N IF (MXN .LE. MAXSVD) THEN WRITE(*,91006) 91006 FORMAT(/' DO YOU WISH TO HAVE THE ACTUAL CONDITION NUMBER', + ' COMPUTED? (Y OR N) ') READ(5,*)YESNO IF (YESNO .EQ. 'y' .OR. YESNO .EQ. 'Y') THEN DO 40 J = 1,N DO 30 JJ = 1,M DO 20 I = 1,N DO 10 II = 1,M INDX = M*(I-1) + II JNDX = M*(J-1) + JJ WRKSVD(INDX,JNDX) = A1(II,JJ)*B1(I,J) * + C1(II,JJ)*D1(I,J) 10 CONTINUE 20 CONTINUE 30 CONTINUE 40 CONTINUE IDMY = 1 CALL DSVDC(WRKSVD, MAXSVD, MXN, MXN, WKV, WKV(MXN+1), DUMY, * IDMY, DUMY, IDMY, WKM1, 00, IERR) IF (IERR .NE. 0) THEN WRITE(*,90006) 90006 FORMAT(" SVD FAILED") RCDSVD = 0.0D0 ELSE RCDSVD = WKV(MXN) / WKV(1) ENDIF RATIO = RCOND / RCDSVD C WRITE(*,90007) RCDSVD, RATIO 90007 FORMAT(1X, ' RCOND(TRUE)=', E10.3, ' EST/TRUE=', E10.3) ENDIF ENDIF C CLOSE(2) CLOSE(3) STOP C --- LAST LINE OF TSYLGF --- END SHAR_EOF fi # end of overwriting check if test -f 'driver5.f' then echo shar: will not over-write existing file "'driver5.f'" else cat << "SHAR_EOF" > 'driver5.f' C--**--CH2913--705--P:LAP--28:10:1999 C--**--CH2897--705--C:SU--28:10:1999 C--**--CH2888--705--B:MA--28:10:1999 C--**--CH2866--705--A:H--28:10:1999 C--**--CH2860--705--P:RW--28:10:1999 C -- PROGRAM TSYLGCF -- C C THIS PROGRAM TESTS THE SOFTWARE FOR SOLVING THE SYMMETRIC C SYLVESTER EQUATION C C A*X*E' + E*X*A' + Q = 0 (' DENOTES TRANSPOSE) C C READING THE COEFFICIENT MATRICES FROM A FILE. C C THE SOLUTION IS CHECKED BY COMPUTING THE RESIDUAL AND ITS RELATIVE C 1-NORM. THE CONDITION ESTIMATE IS CHECKED FOR SMALL SYSTEMS ONLY C (N*N <= 40) BY FORMING THE KRONECKER PRODUCT MATRIX AND COMPUTING C ITS SINGULAR VALUE DECOMPOSITION. C C INPUT FILE FORMAT (SEE EXAMPLE FILE TESTCD.IN): C INPUT IS FREE FORMAT; MATRICES ARE READ BY ROWS. C DIMENSION N (INTEGER) C A; EACH ROW MUST BEGIN ON A NEW LINE AND MAY TAKE AS MANY LINES C AS NECESSARY. C E; Q; SAME COMMENT. C C SOLUTION MATRIX X IS WRITTEN TO AN OUTPUT FILE (SEE EXAMPLE FILE C TESTC.OUT). C C SUBROUTINES AND FUNCTIONS CALLED - C SYLGC; (LINPACK) DSVDC; (MATU) MADD MULC TRNATA D1NRM MSAVE C C WRITTEN - C 14DEC90 J. GARDINER, OSU CIS, COLUMBUS, OH 43210 (614)292-8658 C C -- MAXIMUM N IS 8 -- INTEGER NAE, NQ, NW, N, IERR, NWX, IDMY INTEGER NMAX, WRKLEN, MAXSVD PARAMETER (NMAX=8, WRKLEN=2*NMAX*NMAX+3*NMAX, + MAXSVD=40) DOUBLE PRECISION A(NMAX,NMAX), E(NMAX,NMAX), Q(NMAX,NMAX) DOUBLE PRECISION WKM1(NMAX,NMAX), WKM2(NMAX,NMAX), + WKV(WRKLEN) C INTEGER I, J, NXN, II, JJ, INDX, JNDX DOUBLE PRECISION A1(NMAX,NMAX), E1(NMAX,NMAX), Q1(NMAX,NMAX), + WKMX(MAXSVD,MAXSVD) DOUBLE PRECISION NRMR, NRMQ, RCOND, RCDSVD DOUBLE PRECISION RATIO, DUMY(1) DOUBLE PRECISION D1NRM C CHARACTER*20 INNAME, OUTNAM CHARACTER YESNO C NAE = NMAX NQ = NMAX NW = NMAX NWX = MAXSVD C C -- INITIALIZE -- WRITE(*,90000) WRITE(*,90001) 90000 FORMAT(" T T") C C C WRITE(*,91002) C91002 FORMAT(/' ENTER NAME OF FILE CONTAINING COEFFICIENT MATRICES ') C READ(5,91003) INNAME C91003 FORMAT(A) C OPEN(2,FILE=INNAME) C WRITE(*,91004) C91004 FORMAT(/' ENTER NAME OF FILE FOR OUTPUT OF SOLUTION MATRIX') C READ(5,91003) OUTNAM C OPEN(3,FILE=OUTNAM) C C -- READ COEFFICIENT MATRICES -- 90001 FORMAT(" SOLVE A*X*E + E*X*A + Q = 0 USING SYLGC") READ(*,*) N IF (N .GT. NAE) THEN WRITE(*,91005) N, NAE 91005 FORMAT(/' DIMENSION OF PROBLEM IS TOO LARGE: N =',I2, + ' MAXIMUM IS ',I2) STOP ENDIF WRITE(*,91008) N C 91008 FORMAT(/' N =',I2) DO 201 I=1,N READ(*,*)(A(I,J),J=1,N) 201 CONTINUE DO 202 I=1,N READ(*,*)(E(I,J),J=1,N) 202 CONTINUE DO 203 I=1,N READ(*,*)(Q(I,J),J=1,N) 203 CONTINUE C C -- SAVE A COPY -- CALL MSAVE(NAE, NAE, N, N, A, A1) CALL MSAVE(NAE, NAE, N, N, E, E1) CALL MSAVE(NQ, NQ, N, N, Q, Q1) C C -- COMPUTE NORM OF Q -- NRMQ = D1NRM(NQ, N, N, Q) C C -- COMPUTE SOLUTION AND ESTIMATE CONDITION -- IERR = 1 CALL SYLGC(NAE, NQ, N, A, E, Q, WKV, IERR, RCOND) IF (IERR .NE. 0) THEN WRITE(*,90003) IERR 90003 FORMAT(" ERROR FROM SYLGC, IERR=", I2) ENDIF C C -- SAVE SOLUTION -- DO 301 I=1,N WRITE(*,92001) (Q(I,J),J=1,N) 92001 FORMAT(1X,6E12.4) 301 CONTINUE C C -- COMPUTE RESIDUAL -- CALL MULC(NAE, NQ, NW, N, N, N, A1, Q, WKM1) CALL TRNATA(NAE, N, E1) CALL MULC(NW, NAE, NW, N, N, N, WKM1, E1, WKM2) CALL TRNATA(NAE, N, E1) CALL MADD(NQ, NW, NQ, N, N, Q1, WKM2, Q1) CALL MULC(NAE, NQ, NW, N, N, N, E1, Q, WKM1) CALL TRNATA(NAE, N, A1) CALL MULC(NW, NAE, NW, N, N, N, WKM1, A1, WKM2) CALL TRNATA(NAE, N, A1) CALL MADD(NQ, NW, NQ, N, N, Q1, WKM2, Q1) C C -- COMPUTE NORM OF RESIDUAL -- NRMR = D1NRM(NQ, N, N, Q1) / NRMQ C C -- PRINT RESULTS -- WRITE(*,90002) NRMR, RCOND C C -- COMPUTE REAL CONDITION NUMBER IF REQUESTED -- 90002 FORMAT(1X, ' (NRM RESID)/(NRM Q)=', E10.3, ' RCOND(E +ST)=', E10.3) NXN = N*N IF (NXN .LE. MAXSVD) THEN WRITE(*,91006) 91006 FORMAT(/' DO YOU WISH TO HAVE THE ACTUAL CONDITION NUMBER', + ' COMPUTED? (Y OR N) ') READ(5,*)YESNO IF (YESNO .EQ. 'y' .OR. YESNO .EQ. 'Y') THEN DO 140 J = 1,N DO 130 JJ = 1,N DO 120 I = 1,N DO 110 II = 1,N INDX = N*(I-1) + II JNDX = N*(J-1) + JJ WKMX(INDX,JNDX) = A1(II,JJ)*E1(I,J) * + E1(II,JJ)*A1(I,J) 110 CONTINUE 120 CONTINUE 130 CONTINUE 140 CONTINUE IDMY = 1 CALL DSVDC(WKMX, NWX, NXN, NXN, WKV, WKV(NXN+1), DUMY, IDMY, * DUMY, IDMY, WKM1, 00, IERR) IF (IERR .NE. 0) THEN WRITE(*,90006) 90006 FORMAT(" SVD FAILED") RCDSVD = 0.0D0 ELSE RCDSVD = WKV(NXN) / WKV(1) ENDIF RATIO = RCOND / RCDSVD C WRITE(*,90007) RCDSVD, RATIO 90007 FORMAT(1X, ' RCOND(TRUE)=', E10.3, ' EST/TRUE=', E10.3) ENDIF ENDIF C CLOSE(2) CLOSE(3) STOP C --- LAST LINE OF TSYLGCF --- END SHAR_EOF fi # end of overwriting check if test -f 'driver6.f' then echo shar: will not over-write existing file "'driver6.f'" else cat << "SHAR_EOF" > 'driver6.f' C--**--CH2914--705--P:LAP--28:10:1999 C--**--CH2898--705--C:SU--28:10:1999 C--**--CH2889--705--B:MA--28:10:1999 C--**--CH2867--705--A:H--28:10:1999 C--**--CH2861--705--P:RW--28:10:1999 C -- PROGRAM TSYLGDF -- C C THIS PROGRAM TESTS THE SOFTWARE FOR SOLVING THE SYMMETRIC C SYLVESTER EQUATION C C A*X*A' - E*X*E' + Q = 0 (' DENOTES TRANSPOSE) C C READING THE COEFFICIENT MATRICES FROM A FILE. C C THE SOLUTION IS CHECKED BY COMPUTING THE RESIDUAL AND ITS RELATIVE C 1-NORM. THE CONDITION ESTIMATE IS CHECKED FOR SMALL SYSTEMS ONLY C (N*N <= 40) BY FORMING THE KRONECKER PRODUCT MATRIX AND COMPUTING C ITS SINGULAR VALUE DECOMPOSITION. C C INPUT FILE FORMAT (SEE EXAMPLE FILE TESTCD.IN): C INPUT IS FREE FORMAT; MATRICES ARE READ BY ROWS. C DIMENSION N (INTEGER) C A; EACH ROW MUST BEGIN ON A NEW LINE AND MAY TAKE AS MANY LINES C AS NECESSARY. C E; Q; SAME COMMENT. C C SOLUTION MATRIX X IS WRITTEN TO AN OUTPUT FILE (SEE EXAMPLE FILE C TESTD.OUT). C C SUBROUTINES AND FUNCTIONS CALLED - C SYLGD; (LINPACK) DSVDC; (MATU) MADD MULC TRNATA D1NRM MSAVE MSUB C C WRITTEN - C 14DEC90 J. GARDINER, OSU CIS, COLUMBUS, OH 43210 (614)292-8658 C C -- MAXIMUM N IS 8 -- INTEGER NAE, NQ, NW, N, IERR, NWX, IDMY INTEGER NMAX, WRKLEN, MAXSVD PARAMETER (NMAX=8, WRKLEN=2*NMAX*NMAX+3*NMAX,MAXSVD=40) DOUBLE PRECISION A(NMAX,NMAX), E(NMAX,NMAX), Q(NMAX,NMAX) DOUBLE PRECISION WKM1(NMAX,NMAX), WKM2(NMAX,NMAX), + WKV(WRKLEN) C INTEGER I, J, NXN, II, JJ, INDX, JNDX DOUBLE PRECISION A1(NMAX,NMAX), E1(NMAX,NMAX), Q1(NMAX,NMAX), + WKMX(MAXSVD,MAXSVD) DOUBLE PRECISION NRMR, NRMQ, RCOND, RCDSVD DOUBLE PRECISION RATIO, DUMY(1) DOUBLE PRECISION D1NRM C CHARACTER*20 INNAME, OUTNAM CHARACTER YESNO C C C -- INITIALIZE -- NAE = NMAX NQ = NMAX NW = NMAX NWX = MAXSVD WRITE(*,90000) WRITE(*,90001) 90000 FORMAT(" T T") C C C WRITE(*,91002) C91002 FORMAT(/' ENTER NAME OF FILE CONTAINING COEFFICIENT MATRICES ') C READ(5,91003) INNAME C91003 FORMAT(A) C OPEN(2,FILE=INNAME) C WRITE(*,91004) C91004 FORMAT(/' ENTER NAME OF FILE FOR OUTPUT OF SOLUTION MATRIX') C READ(5,91003) OUTNAM C OPEN(3,FILE=OUTNAM) C C -- READ COEFFICIENT MATRICES -- 90001 FORMAT(" SOLVE A*X*A - E*X*E + Q = 0 USING SYLGD") READ(*,*) N IF (N .GT. NAE) THEN WRITE(*,91005) N, NAE 91005 FORMAT(/' DIMENSION OF PROBLEM IS TOO LARGE: N =',I2, + ' MAXIMUM IS ',I2) STOP ENDIF WRITE(*,91008) N C 91008 FORMAT(/' N =',I2) DO 201 I=1,N READ(*,*)(A(I,J),J=1,N) 201 CONTINUE DO 202 I=1,N READ(*,*)(E(I,J),J=1,N) 202 CONTINUE DO 203 I=1,N READ(*,*)(Q(I,J),J=1,N) 203 CONTINUE C C -- SAVE A COPY -- CALL MSAVE(NAE, NAE, N, N, A, A1) CALL MSAVE(NAE, NAE, N, N, E, E1) CALL MSAVE(NQ, NQ, N, N, Q, Q1) C C -- COMPUTE NORM OF Q -- NRMQ = D1NRM(NQ, N, N, Q) C C -- COMPUTE SOLUTION AND ESTIMATE CONDITION -- IERR = 1 CALL SYLGD(NAE, NQ, N, A, E, Q, WKV, IERR, RCOND) IF (IERR .NE. 0) THEN WRITE(*,90003) IERR 90003 FORMAT(" ERROR FROM SYLGD, IERR=", I2) ENDIF C C -- SAVE SOLUTION -- DO 301 I=1,N WRITE(*,92001) (Q(I,J),J=1,N) 92001 FORMAT(1X,6E12.4) 301 CONTINUE C C -- COMPUTE RESIDUAL -- CALL MULC(NAE, NQ, NW, N, N, N, A1, Q, WKM1) CALL TRNATA(NAE, N, A1) CALL MULC(NW, NAE, NW, N, N, N, WKM1, A1, WKM2) CALL TRNATA(NAE, N, A1) CALL MADD(NQ, NW, NQ, N, N, Q1, WKM2, Q1) CALL MULC(NAE, NQ, NW, N, N, N, E1, Q, WKM1) CALL TRNATA(NAE, N, E1) CALL MULC(NW, NAE, NW, N, N, N, WKM1, E1, WKM2) CALL TRNATA(NAE, N, E1) CALL MSUB(NQ, NW, NQ, N, N, Q1, WKM2, Q1) C C -- COMPUTE NORM OF RESIDUAL -- NRMR = D1NRM(NQ, N, N, Q1) / NRMQ C C -- PRINT RESULTS -- WRITE(*,90002) NRMR, RCOND C C -- COMPUTE REAL CONDITION NUMBER IF REQUESTED -- 90002 FORMAT(1X, ' (NRM RESID)/(NRM Q)=', E10.3, ' RCOND(E +ST)=', E10.3) NXN = N*N IF (NXN .LE. MAXSVD) THEN WRITE(*,91006) 91006 FORMAT(/' DO YOU WISH TO HAVE THE ACTUAL CONDITION NUMBER', + ' COMPUTED? (Y OR N) ') READ(5,*)YESNO IF (YESNO .EQ. 'y' .OR. YESNO .EQ. 'Y') THEN DO 140 J = 1,N DO 130 JJ = 1,N DO 120 I = 1,N DO 110 II = 1,N INDX = N*(I-1) + II JNDX = N*(J-1) + JJ WKMX(INDX,JNDX) = A1(II,JJ)*A1(I,J) * - E1(II,JJ)*E1(I,J) 110 CONTINUE 120 CONTINUE 130 CONTINUE 140 CONTINUE IDMY = 1 CALL DSVDC(WKMX, NWX, NXN, NXN, WKV, WKV(NXN+1), DUMY, IDMY, * DUMY, IDMY, WKM1, 00, IERR) IF (IERR .NE. 0) THEN WRITE(*,90006) 90006 FORMAT(" SVD FAILED") RCDSVD = 0.0D0 ELSE RCDSVD = WKV(NXN) / WKV(1) ENDIF RATIO = RCOND / RCDSVD C WRITE(*,90007) RCDSVD, RATIO 90007 FORMAT(1X, ' RCOND(TRUE)=', E10.3, ' EST/TRUE=', E10.3) ENDIF ENDIF C CLOSE(2) CLOSE(3) STOP C --- LAST LINE OF TSYLGDF --- END SHAR_EOF fi # end of overwriting check if test -f 'driver7.f' then echo shar: will not over-write existing file "'driver7.f'" else cat << "SHAR_EOF" > 'driver7.f' C--**--CH3666--705--C:GEN--8:6:2000 C--**--CH2915--705--P:LAP--28:10:1999 C--**--CH2904--705--P:RW--28:10:1999 C--**--CH2899--705--P:R--28:10:1999 C--**--CH2890--705--B:MA--28:10:1999 C--**--CH2868--705--A:H--28:10:1999 C -- PROGRAM TSYLGR -- C C THIS PROGRAM TESTS THE SOFTWARE FOR SOLVING THE GENERAL C SYLVESTER EQUATION C C A * X * B' + C * X * D' = E (' DENOTES TRANSPOSE) C C USING RANDOMLY GENERATED COEFFICIENT MATRICES. MATRIX ELEMENTS C HAVE A GAUSSIAN DISTRIBUTION WITH MEAN 0 AND STANDARD DEVIATION 1. C C TSYLGR MAY NOT BE PORTABLE. THE FUNCTION DXRAND MUST BE PROVIDED B C THE USER ON SYSTEMS OTHER THAN UNIX. DXRAND IS A DOUBLE PRECISION C PSEUDORANDOM NUMBER GENERATOR WHICH GIVES A UNIFORM DISTRIBUTION I C THE INTERVAL [0,1]. DXRAND IS INITIALIZED WITH T=DXRAND(K), K AN C INTEGER, K>0. SUBSEQUENT CALLS ARE T=DXRAND(0). C C SUBROUTINES AND FUNCTIONS CALLED - C SYLG; (LINPACK) DSVDC; C RANDM; (MATU) MSAVE, D1NRM, MSUB, MULC, TRNATA; DXRAND C C WRITTEN - C 18FEB87 M.WETTE, UCSB ECE, SANTA BARBARA, CA 93106 (805)961-4691 C MODIFIED - C 28NOV88 J. GARDINER, OSU CIS, COLUMBUS, OH 43210 (614)292-8658 C 12DEC90 J. GARDINER, OSU CIS, COLUMBUS, OH 43210 (614)292-8658 C C -- MAXIMUM M IS 9, MAXIMUM N IS 8 -- INTEGER NAC, NBD, NE, NW, M, N, IERR INTEGER MMAX, NMAX, MNMAX, WRKLEN, MAXSVD PARAMETER (MMAX=9, NMAX=8, MNMAX=9, MAXSVD=40, + WRKLEN = 2*MMAX*MMAX+NMAX*NMAX+NMAX*MMAX+7*MMAX+MNMAX*MNMAX) DOUBLE PRECISION A0(MMAX,MMAX), B0(NMAX,NMAX), C0(MMAX,MMAX), + D0(NMAX,NMAX), E0(MMAX,NMAX) DOUBLE PRECISION A1(MMAX,MMAX), B1(NMAX,NMAX), C1(MMAX,MMAX), + D1(NMAX,NMAX), E1(MMAX,NMAX) DOUBLE PRECISION WKM1(MMAX,NMAX), WKM2(MMAX,NMAX), + WRKSVD(MAXSVD,MAXSVD), WKV(WRKLEN) INTEGER IWKV(2*MMAX) C INTEGER I, J, LL, II, JJ, INDX, JNDX, MXN, NTEST INTEGER IDMY DOUBLE PRECISION TMP, NRMR, NRME, DPAR(3), WORST, RCOND, RCDSVD DOUBLE PRECISION DUMY(1), WORSTL, WORSTH, RATIO DOUBLE PRECISION DXRAND, D1NRM C C -- INITIALIZE -- NAC = MMAX NBD = NMAX NE = MMAX NW=MMAX WORST = 0.0D0 WORSTL = 1.0D100 WORSTH = 0.0D0 NTEST = 5 TMP = DXRAND(13) DPAR(1) = 0.0D0 DPAR(2) = 1.0D2 C WRITE(*,90000) WRITE(*,90001) 90000 FORMAT(" T T") C 90001 FORMAT(" SOLVE A*X*B + C*X*D = E USING SYLG") DO 320 M = 1,NAC DO 310 N = 1,NBD C WRITE(*,90005) M, N C 90005 FORMAT(/ " M =", I3, " N =", I3) DO 230 LL = 1,NTEST C C -- GENERATE NORMALLY DIST. RANDOM DATA -- CALL RANDM(A0, NAC, M, M, DPAR, 01) CALL RANDM(B0, NBD, N, N, DPAR, 01) CALL RANDM(C0, NAC, M, M, DPAR, 01) CALL RANDM(D0, NBD, N, N, DPAR, 01) CALL RANDM(E0, NE, M, N, DPAR, 01) C C -- SAVE A COPY -- CALL MSAVE(NAC, NAC, M, M, A0, A1) CALL MSAVE(NAC, NAC, M, M, C0, C1) CALL MSAVE(NBD, NBD, N, N, B0, B1) CALL MSAVE(NBD, NBD, N, N, D0, D1) CALL MSAVE(NE, NE, M, N, E0, E1) C C -- COMPUTE NORM OF E -- NRME = D1NRM(NE, M, N, E0) C C -- COMPUTE SOLUTION, ESTIMATE CONDITION IF SVD COMPUTABLE -- MXN = M*N IF (MXN .LE. MAXSVD) THEN IERR = 1 ELSE IERR = 0 ENDIF CALL SYLG(NAC, NBD, NE, M, N, A0, B0, C0, D0, E0, WKV, IWKV, * IERR, RCOND) IF (IERR .NE. 0) THEN WRITE(*,90003) LL, IERR 90003 FORMAT(" AT ITERATION", I2, " ERROR IN SYLG, IERR=", I2) ENDIF C C -- COMPUTE RESIDUAL -- CALL MULC(NAC, NE, NW, M, M, N, A1, E0, WKM1) CALL TRNATA(NBD, N, B1) CALL MULC(NW, NBD, NE, M, N, N, WKM1, B1, WKM2) CALL TRNATA(NBD, N, B1) CALL MSUB(NE, NE, NE, M, N, E1, WKM2, E1) CALL MULC(NAC, NE, NW, M, M, N, C1, E0, WKM1) CALL TRNATA(NBD, N, D1) CALL MULC(NW, NBD, NE, M, N, N, WKM1, D1, WKM2) CALL TRNATA(NBD, N, D1) CALL MSUB(NE, NE, NE, M, N, E1, WKM2, E1) C C -- COMPUTE NORM OF RESIDUAL -- NRMR = D1NRM(NE, M, N, E1) TMP = NRMR/NRME IF (TMP .GT. WORST) WORST = TMP C C -- COMPUTE REAL CONDITION NUMBER -- IF (MXN .LE. MAXSVD) THEN DO 40 J = 1,N DO 30 JJ = 1,M DO 20 I = 1,N DO 10 II = 1,M INDX = M*(I-1) + II JNDX = M*(J-1) + JJ WRKSVD(INDX,JNDX) = A1(II,JJ)*B1(I,J) & + C1(II,JJ)*D1(I,J) 10 CONTINUE 20 CONTINUE 30 CONTINUE 40 CONTINUE IDMY = 1 CALL DSVDC(WRKSVD, MAXSVD, MXN, MXN, WKV, WKV(MXN+1), DUMY, * IDMY, DUMY, IDMY, WKM1, 00, IERR) IF (IERR .NE. 0) THEN WRITE(*,90006) LL 90006 FORMAT(" ITERATION", I2, " SVD FAILED") RCDSVD = 0.0D0 ELSE RCDSVD = WKV(MXN) / WKV(1) ENDIF RATIO = RCOND / RCDSVD IF (RATIO .LT. WORSTL) WORSTL = RATIO IF (RATIO .GT. WORSTH) WORSTH = RATIO ENDIF C C -- PRINT RESULTS -- IF (MXN .LE. MAXSVD) THEN WRITE(*,90002) LL, TMP, RCOND, RATIO ELSE WRITE(*,90007) LL, TMP ENDIF 90002 FORMAT(1X, I2, ' (NRM RESID)/(NRM E)=', E10.3, ' RCO +ND(EST)=', E10.3, ' EST/TRUE=', E10.3) C 90007 FORMAT(1X, I2, ' (NRM RESID)/(NRM E)=', E10.3) 230 CONTINUE C 310 CONTINUE 320 CONTINUE C WRITE(*,90004) WORST 90004 FORMAT(/ " WORST CASE RESIDUAL IS", E10.3) WRITE(*,90008) WORSTL, WORSTH C 90008 FORMAT(' WORST CASE RCOND RATIOS (EST/TRUE) ARE', E10.3, ' ( +LOW) AND', E10.3, ' (HIGH)') STOP C --- LAST LINE OF TSYLGR --- END SHAR_EOF fi # end of overwriting check if test -f 'driver8.f' then echo shar: will not over-write existing file "'driver8.f'" else cat << "SHAR_EOF" > 'driver8.f' C--**--CH2916--705--P:LAP--28:10:1999 C--**--CH2905--705--P:RW--28:10:1999 C--**--CH2900--705--P:R--28:10:1999 C--**--CH2891--705--B:MA--28:10:1999 C--**--CH2869--705--A:H--28:10:1999 C -- PROGRAM TSYLGCR -- C C THIS PROGRAM TESTS THE SOFTWARE FOR SOLVING THE SYMMETRIC C SYLVESTER EQUATION C C A*X*E' + E*X*A' + Q = 0 (' DENOTES TRANSPOSE) C C USING RANDOMLY GENERATED COEFFICIENT MATRICES. MATRIX ELEMENTS C HAVE A GAUSSIAN DISTRIBUTION WITH MEAN 0 AND STANDARD DEVIATION 1. C Q IS TAKEN TO BE THE SYMMETRIC PART OF A RANDOM MATRIX. C C TSYLGCR MAY NOT BE PORTABLE. THE FUNCTION DXRAND MUST BE PROVIDED C THE USER ON SYSTEMS OTHER THAN UNIX. DXRAND IS A DOUBLE PRECISION C PSEUDORANDOM NUMBER GENERATOR WHICH GIVES A UNIFORM DISTRIBUTION I C THE INTERVAL [0,1]. DXRAND IS INITIALIZED WITH T=DXRAND(K), K AN C INTEGER, K>0. SUBSEQUENT CALLS ARE T=DXRAND(0). C C SUBROUTINES AND FUNCTIONS CALLED - C SYLGC; (LINPACK) DSVDC; C RANDM; (MATU) MADD MSUB MULC MSAVE D1NRM; DXRAND C C WRITTEN - C 26FEB87 M.WETTE, UCSB ECE, SANTA BARBARA, CA 93106 (805)961-4691 C REVISED - C 27JAN89 J. GARDINER, OSU CIS, COLUMBUS, OH 43210 (614)292-8658 C 14DEC90 J. GARDINER, OSU CIS, COLUMBUS, OH 43210 (614)292-8658 C C -- MAXIMUM N IS 8 -- INTEGER NAE, NQ, NW, N, IERR, MAXN, NWX, IDMY INTEGER NMAX, WRKLEN, MAXSVD PARAMETER (NMAX=8, WRKLEN=2*NMAX*NMAX+3*NMAX, + MAXSVD=40) DOUBLE PRECISION A(NMAX,NMAX), E(NMAX,NMAX), Q(NMAX,NMAX) DOUBLE PRECISION WKM1(NMAX,NMAX), WKM2(NMAX,NMAX), + WKV(WRKLEN) C INTEGER I, J, LL, NTEST, NXN, II, JJ, INDX, JNDX DOUBLE PRECISION A1(NMAX,NMAX), E1(NMAX,NMAX), Q1(NMAX,NMAX), + WKMX(MAXSVD,MAXSVD) DOUBLE PRECISION TMP, NRMR, NRMQ, DPAR(3), WORST, RCOND, RCDSVD DOUBLE PRECISION WORSTL, WORSTH, RATIO, DUMY(1) DOUBLE PRECISION DXRAND, D1NRM C C -- INITIALIZE -- MAXN = NMAX NAE = NMAX NQ = NMAX NW = NMAX NWX = MAXSVD WORST = 0.0D0 WORSTL = 1.0D100 WORSTH = 0.0D0 NTEST = 5 TMP = DXRAND(13) DPAR(1) = 0.0D0 DPAR(2) = 1.0D2 C WRITE(*,90000) WRITE(*,90001) 90000 FORMAT(" T T") C 90001 FORMAT(" SOLVE A*X*E + E*X*A + Q = 0 USING SYLGC") DO 300 N = 1,MAXN C WRITE(*,90005) N C 90005 FORMAT(/ " N =", I3) DO 230 LL = 1,NTEST C C -- GENERATE NORMALLY DIST. RANDOM DATA -- CALL RANDM(A, NAE, N, N, DPAR, 01) CALL RANDM(E, NAE, N, N, DPAR, 01) CALL RANDM(Q, NQ, N, N, DPAR, 01) DO 20 J = 1,N DO 10 I = J,N Q(I,J) = (Q(I,J) + Q(J,I)) / 2.0D0 Q(J,I) = Q(I,J) 10 CONTINUE 20 CONTINUE C C -- SAVE A COPY -- CALL MSAVE(NAE, NAE, N, N, A, A1) CALL MSAVE(NAE, NAE, N, N, E, E1) CALL MSAVE(NQ, NQ, N, N, Q, Q1) C C -- COMPUTE NORM OF Q -- NRMQ = D1NRM(NQ, N, N, Q) C C -- COMPUTE SOLUTION, ESTIMATE CONDITION IF SVD COMPUTABLE -- NXN = N*N IF (NXN .LE. MAXSVD) THEN IERR = 1 ELSE IERR = 0 ENDIF CALL SYLGC(NAE, NQ, N, A, E, Q, WKV, IERR, RCOND) IF (IERR .NE. 0) THEN WRITE(*,90003) LL, IERR 90003 FORMAT(" AT ITERATION", I2, " ERROR IN SYLGC, IERR=", I2) ENDIF C C -- COMPUTE RESIDUAL -- CALL MULC(NAE, NQ, NW, N, N, N, A1, Q, WKM1) CALL TRNATA(NAE, N, E1) CALL MULC(NW, NAE, NW, N, N, N, WKM1, E1, WKM2) CALL TRNATA(NAE, N, E1) CALL MADD(NQ, NW, NQ, N, N, Q1, WKM2, Q1) CALL MULC(NAE, NQ, NW, N, N, N, E1, Q, WKM1) CALL TRNATA(NAE, N, A1) CALL MULC(NW, NAE, NW, N, N, N, WKM1, A1, WKM2) CALL TRNATA(NAE, N, A1) CALL MADD(NQ, NW, NQ, N, N, Q1, WKM2, Q1) C C -- COMPUTE NORM OF RESIDUAL -- NRMR = D1NRM(NQ, N, N, Q1) TMP = NRMR/NRMQ IF (TMP .GT. WORST) WORST = TMP C C -- COMPUTE REAL CONDITION NUMBER IF (NXN .LE. MAXSVD) THEN DO 140 J = 1,N DO 130 JJ = 1,N DO 120 I = 1,N DO 110 II = 1,N INDX = N*(I-1) + II JNDX = N*(J-1) + JJ WKMX(INDX,JNDX) = A1(II,JJ)*E1(I,J) * + E1(II,JJ)*A1(I,J) 110 CONTINUE 120 CONTINUE 130 CONTINUE 140 CONTINUE IDMY = 1 CALL DSVDC(WKMX, NWX, NXN, NXN, WKV, WKV(NXN+1), DUMY, IDMY, * DUMY, IDMY, WKM1, 00, IERR) IF (IERR .NE. 0) THEN WRITE(*,90006) LL 90006 FORMAT(" ITERATION", I2, " SVD FAILED") RCDSVD = 0.0D0 ELSE RCDSVD = WKV(NXN) / WKV(1) ENDIF RATIO = RCOND / RCDSVD IF (RATIO .LT. WORSTL) WORSTL = RATIO IF (RATIO .GT. WORSTH) WORSTH = RATIO ENDIF C C -- PRINT RESULTS -- IF (NXN .LE. MAXSVD) THEN WRITE(*,90002) LL, TMP, RCOND, RATIO ELSE WRITE(*,90007) LL, TMP ENDIF 90002 FORMAT(1X, I2, ' (NRM RESID)/(NRM Q)=', E10.3, ' RCO +ND(EST)=', E10.3, ' EST/TRUE=', E10.3) C C 90007 FORMAT(1X, I2, ' (NRM RESID)/(NRM Q)=', E10.3) 230 CONTINUE 300 CONTINUE C WRITE(*,90004) WORST 90004 FORMAT(/ " WORST CASE RESIDUAL IS", E10.3) WRITE(*,90008) WORSTL, WORSTH C 90008 FORMAT(' WORST CASE RCOND RATIOS (EST/TRUE) ARE', E10.3, ' ( +LOW) AND', E10.3, ' (HIGH)') STOP C --- LAST LINE OF TSYLGCR --- END SHAR_EOF fi # end of overwriting check if test -f 'driver9.f' then echo shar: will not over-write existing file "'driver9.f'" else cat << "SHAR_EOF" > 'driver9.f' C--**--CH2917--705--P:LAP--28:10:1999 C--**--CH2906--705--P:RW--28:10:1999 C--**--CH2901--705--P:R--28:10:1999 C--**--CH2892--705--B:MA--28:10:1999 C--**--CH2870--705--A:H--28:10:1999 C -- PROGRAM TSYLGDR -- C C THIS PROGRAM TESTS THE SOFTWARE FOR SOLVING THE SYMMETRIC C SYLVESTER EQUATION C C A*X*A' - E*X*E' + Q = 0 (' DENOTES TRANSPOSE) C C USING RANDOMLY GENERATED COEFFICIENT MATRICES. MATRIX ELEMENTS C HAVE A GAUSSIAN DISTRIBUTION WITH MEAN 0 AND STANDARD DEVIATION 1. C Q IS TAKEN TO BE THE SYMMETRIC PART OF A RANDOM MATRIX. C C TSYLGDR MAY NOT BE PORTABLE. THE FUNCTION DXRAND MUST BE PROVIDED C THE USER ON SYSTEMS OTHER THAN UNIX. DXRAND IS A DOUBLE PRECISION C PSEUDORANDOM NUMBER GENERATOR WHICH GIVES A UNIFORM DISTRIBUTION I C THE INTERVAL [0,1]. DXRAND IS INITIALIZED WITH T=DXRAND(K), K AN C INTEGER, K>0. SUBSEQUENT CALLS ARE T=DXRAND(0). C C SUBROUTINES AND FUNCTIONS CALLED - C SYLGD; (LINPACK) DSVDC; C RANDM; (MATU) MADD MSUB MULC MSAVE D1NRM; DXRAND C C WRITTEN - C 26FEB87 M.WETTE, UCSB ECE, SANTA BARBARA, CA 93106 (805)961-4691 C REVISED - C 27JAN89 J. GARDINER, OSU CIS, COLUMBUS, OH 43210 (614)292-8658 C 14DEC90 J. GARDINER, OSU CIS, COLUMBUS, OH 43210 (614)292-8658 C C -- MAXIMUM N IS 8 -- INTEGER NAE, NQ, NW, N, IERR, MAXN, NWX, IDMY INTEGER NMAX, WRKLEN, MAXSVD PARAMETER (NMAX=8, WRKLEN=2*NMAX*NMAX+3*NMAX,MAXSVD=40) DOUBLE PRECISION A(NMAX,NMAX), E(NMAX,NMAX), Q(NMAX,NMAX) DOUBLE PRECISION WKM1(NMAX,NMAX), WKM2(NMAX,NMAX), + WKV(WRKLEN) C INTEGER I, J, LL, NTEST, NXN, II, JJ, INDX, JNDX DOUBLE PRECISION A1(NMAX,NMAX), E1(NMAX,NMAX), Q1(NMAX,NMAX), + WKMX(MAXSVD,MAXSVD) DOUBLE PRECISION TMP, NRMR, NRMQ, DPAR(3), WORST, RCOND, RCDSVD DOUBLE PRECISION WORSTL, WORSTH, RATIO, DUMY(1) DOUBLE PRECISION DXRAND, D1NRM C C -- INITIALIZE -- MAXN = NMAX NAE = NMAX NQ = NMAX NW = NMAX NWX = MAXSVD WORST = 0.0D0 WORSTL = 1.0D100 WORSTH = 0.0D0 NTEST = 5 TMP = DXRAND(13) DPAR(1) = 0.0D0 DPAR(2) = 1.0D2 C WRITE(*,90000) WRITE(*,90001) 90000 FORMAT(" T T") C 90001 FORMAT(" SOLVE A*X*E + E*X*A + Q = 0 USING SYLGD") DO 300 N = 1,MAXN C WRITE(*,90005) N C 90005 FORMAT(/ " N =", I3) DO 230 LL = 1,NTEST C C -- GENERATE NORMALLY DIST. RANDOM DATA -- CALL RANDM(A, NAE, N, N, DPAR, 01) CALL RANDM(E, NAE, N, N, DPAR, 01) CALL RANDM(Q, NQ, N, N, DPAR, 01) DO 20 J = 1,N DO 10 I = J,N Q(I,J) = (Q(I,J) + Q(J,I)) / 2.0D0 Q(J,I) = Q(I,J) 10 CONTINUE 20 CONTINUE C C -- SAVE A COPY -- CALL MSAVE(NAE, NAE, N, N, A, A1) CALL MSAVE(NAE, NAE, N, N, E, E1) CALL MSAVE(NQ, NQ, N, N, Q, Q1) C C -- COMPUTE NORM OF Q -- NRMQ = D1NRM(NQ, N, N, Q) C C -- COMPUTE SOLUTION, ESTIMATE CONDITION IF SVD COMPUTABLE -- NXN = N*N IF (NXN .LE. MAXSVD) THEN IERR = 1 ELSE IERR = 0 ENDIF CALL SYLGD(NAE, NQ, N, A, E, Q, WKV, IERR, RCOND) IF (IERR .NE. 0) THEN WRITE(*,90003) LL, IERR 90003 FORMAT(" AT ITERATION", I2, " ERROR IN SYLGD, IERR=", I2) ENDIF C C -- COMPUTE RESIDUAL -- CALL MULC(NAE, NQ, NW, N, N, N, A1, Q, WKM1) CALL TRNATA(NAE, N, A1) CALL MULC(NW, NAE, NW, N, N, N, WKM1, A1, WKM2) CALL TRNATA(NAE, N, A1) CALL MADD(NQ, NW, NQ, N, N, Q1, WKM2, Q1) CALL MULC(NAE, NQ, NW, N, N, N, E1, Q, WKM1) CALL TRNATA(NAE, N, E1) CALL MULC(NW, NAE, NW, N, N, N, WKM1, E1, WKM2) CALL TRNATA(NAE, N, E1) CALL MSUB(NQ, NW, NQ, N, N, Q1, WKM2, Q1) C C -- COMPUTE NORM OF RESIDUAL -- NRMR = D1NRM(NQ, N, N, Q1) TMP = NRMR/NRMQ IF (TMP .GT. WORST) WORST = TMP C C -- COMPUTE REAL CONDITION NUMBER IF (NXN .LE. MAXSVD) THEN DO 140 J = 1,N DO 130 JJ = 1,N DO 120 I = 1,N DO 110 II = 1,N INDX = N*(I-1) + II JNDX = N*(J-1) + JJ WKMX(INDX,JNDX) = A1(II,JJ)*A1(I,J) * - E1(II,JJ)*E1(I,J) 110 CONTINUE 120 CONTINUE 130 CONTINUE 140 CONTINUE IDMY = 1 CALL DSVDC(WKMX, NWX, NXN, NXN, WKV, WKV(NXN+1), DUMY, IDMY, * DUMY, IDMY, WKM1, 00, IERR) IF (IERR .NE. 0) THEN WRITE(*,90006) LL 90006 FORMAT(" ITERATION", I2, " SVD FAILED") RCDSVD = 0.0D0 ELSE RCDSVD = WKV(NXN) / WKV(1) ENDIF RATIO = RCOND / RCDSVD IF (RATIO .LT. WORSTL) WORSTL = RATIO IF (RATIO .GT. WORSTH) WORSTH = RATIO ENDIF C C -- PRINT RESULTS -- IF (NXN .LE. MAXSVD) THEN WRITE(*,90002) LL, TMP, RCOND, RATIO ELSE WRITE(*,90007) LL, TMP ENDIF 90002 FORMAT(1X, I2, ' (NRM RESID)/(NRM Q)=', E10.3, ' RCO +ND(EST)=', E10.3, ' EST/TRUE=', E10.3) C C 90007 FORMAT(1X, I2, ' (NRM RESID)/(NRM Q)=', E10.3) 230 CONTINUE 300 CONTINUE C WRITE(*,90004) WORST 90004 FORMAT(/ " WORST CASE RESIDUAL IS", E10.3) WRITE(*,90008) WORSTL, WORSTH C 90008 FORMAT(' WORST CASE RCOND RATIOS (EST/TRUE) ARE', E10.3, ' ( +LOW) AND', E10.3, ' (HIGH)') STOP C --- LAST LINE OF TSYLGDR --- END SHAR_EOF fi # end of overwriting check if test -f 'portrand.f' then echo shar: will not over-write existing file "'portrand.f'" else cat << "SHAR_EOF" > 'portrand.f' REAL FUNCTION RAND() C..PORTABLE RANDOM NUMBER GENERATOR C..USING THE RECURSION - C.. C.. IX=IX*A MOD P INTEGER A,P,IX,B15,B16,XHI,XALO,LEFTLO,FHI,K C..7**5, 2**15, 2**16, 2**31-1 PARAMETER (A=16807, B15=32768, B16=65536, + P=2147483647) COMMON /RANCOM/ IX SAVE /RANCOM/ C C..GET 15 HIGH ORDER BITS OF IX XHI=IX/B16 C..GET 16 LO BITS OF IX AND FORM LO PRODUCT XALO=(IX-XHI*B16)*A C..GET 15 HI ORDER BITS OF LO PRODUCT LEFTLO=XALO/B16 C..FORM THE 31 HIGHEST BITS OF FULL PRODUCT FHI=XHI*A + LEFTLO C..GET OVERFLOW PAST 31ST BIT OF FULL PRODUCT K=FHI/B15 C..ASSEMBLE ALL THE PARTS AND PRESUBTRACT P C..THE PARENTHESES ARE ESSENTIAL IX=(((XALO-LEFTLO*B16)-P)+(FHI-K*B15)*B16)+K C..ADD P BACK IN IF NECESSARY IF(IX.LT.0)IX=IX+P C..MULTIPLY BY 1/(2**31-1) RAND=FLOAT(IX)*4.656612875E-10 RETURN END subroutine seed(iseed) c c seed the portable random number generator c integer iseed, ix common /rancom/ ix SAVE /RANCOM/ ix = iseed end SHAR_EOF fi # end of overwriting check if test -f 'res1' then echo shar: will not over-write existing file "'res1'" else cat << "SHAR_EOF" > 'res1' T T SOLVE A*X*B + C*X*D = E USING SYLG M = 2 N = 2 0 (NRM RESID)/(NRM E)= 0.508E-15 RCOND(EST)= 0.909E-01 EST/TRUE= 0.623E+00 10 (NRM RESID)/(NRM E)= 0.610E-15 RCOND(EST)= 0.351E-03 EST/TRUE= 0.360E+00 20 (NRM RESID)/(NRM E)= 0.722E-15 RCOND(EST)= 0.343E-06 EST/TRUE= 0.360E+00 30 (NRM RESID)/(NRM E)= 0.611E-15 RCOND(EST)= 0.335E-09 EST/TRUE= 0.360E+00 40 (NRM RESID)/(NRM E)= 0.389E-15 RCOND(EST)= 0.327E-12 EST/TRUE= 0.360E+00 M = 2 N = 3 0 (NRM RESID)/(NRM E)= 0.888E-16 RCOND(EST)= 0.410E-01 EST/TRUE= 0.430E+00 10 (NRM RESID)/(NRM E)= 0.518E-15 RCOND(EST)= 0.138E-03 EST/TRUE= 0.317E+00 20 (NRM RESID)/(NRM E)= 0.444E-15 RCOND(EST)= 0.135E-06 EST/TRUE= 0.317E+00 30 (NRM RESID)/(NRM E)= 0.407E-15 RCOND(EST)= 0.132E-09 EST/TRUE= 0.317E+00 40 (NRM RESID)/(NRM E)= 0.444E-15 RCOND(EST)= 0.129E-12 EST/TRUE= 0.317E+00 M = 2 N = 4 0 (NRM RESID)/(NRM E)= 0.256E-15 RCOND(EST)= 0.322E-01 EST/TRUE= 0.458E+00 10 (NRM RESID)/(NRM E)= 0.105E-14 RCOND(EST)= 0.102E-03 EST/TRUE= 0.398E+00 20 (NRM RESID)/(NRM E)= 0.833E-15 RCOND(EST)= 0.992E-07 EST/TRUE= 0.397E+00 30 (NRM RESID)/(NRM E)= 0.611E-15 RCOND(EST)= 0.809E-10 EST/TRUE= 0.331E+00 40 (NRM RESID)/(NRM E)= 0.611E-15 RCOND(EST)= 0.946E-13 EST/TRUE= 0.397E+00 M = 2 N = 5 0 (NRM RESID)/(NRM E)= 0.444E-15 RCOND(EST)= 0.273E-01 EST/TRUE= 0.495E+00 10 (NRM RESID)/(NRM E)= 0.799E-15 RCOND(EST)= 0.107E-03 EST/TRUE= 0.621E+00 20 (NRM RESID)/(NRM E)= 0.888E-15 RCOND(EST)= 0.104E-06 EST/TRUE= 0.618E+00 30 (NRM RESID)/(NRM E)= 0.115E-14 RCOND(EST)= 0.101E-09 EST/TRUE= 0.618E+00 40 (NRM RESID)/(NRM E)= 0.977E-15 RCOND(EST)= 0.990E-13 EST/TRUE= 0.617E+00 M = 2 N = 6 0 (NRM RESID)/(NRM E)= 0.608E-15 RCOND(EST)= 0.245E-01 EST/TRUE= 0.540E+00 10 (NRM RESID)/(NRM E)= 0.925E-15 RCOND(EST)= 0.701E-04 EST/TRUE= 0.555E+00 20 (NRM RESID)/(NRM E)= 0.163E-14 RCOND(EST)= 0.677E-07 EST/TRUE= 0.552E+00 30 (NRM RESID)/(NRM E)= 0.592E-15 RCOND(EST)= 0.661E-10 EST/TRUE= 0.552E+00 40 (NRM RESID)/(NRM E)= 0.814E-15 RCOND(EST)= 0.646E-13 EST/TRUE= 0.552E+00 M = 2 N = 7 0 (NRM RESID)/(NRM E)= 0.525E-15 RCOND(EST)= 0.213E-01 EST/TRUE= 0.555E+00 10 (NRM RESID)/(NRM E)= 0.114E-14 RCOND(EST)= 0.713E-04 EST/TRUE= 0.733E+00 20 (NRM RESID)/(NRM E)= 0.888E-15 RCOND(EST)= 0.688E-07 EST/TRUE= 0.729E+00 30 (NRM RESID)/(NRM E)= 0.397E-15 RCOND(EST)= 0.672E-10 EST/TRUE= 0.729E+00 40 (NRM RESID)/(NRM E)= 0.476E-15 RCOND(EST)= 0.656E-13 EST/TRUE= 0.729E+00 M = 2 N = 8 0 (NRM RESID)/(NRM E)= 0.135E-14 RCOND(EST)= 0.185E-01 EST/TRUE= 0.559E+00 10 (NRM RESID)/(NRM E)= 0.153E-14 RCOND(EST)= 0.538E-04 EST/TRUE= 0.690E+00 20 (NRM RESID)/(NRM E)= 0.500E-15 RCOND(EST)= 0.519E-07 EST/TRUE= 0.687E+00 30 (NRM RESID)/(NRM E)= 0.999E-15 RCOND(EST)= 0.507E-10 EST/TRUE= 0.687E+00 40 (NRM RESID)/(NRM E)= 0.122E-14 RCOND(EST)= 0.495E-13 EST/TRUE= 0.689E+00 M = 3 N = 2 0 (NRM RESID)/(NRM E)= 0.740E-15 RCOND(EST)= 0.146E-01 EST/TRUE= 0.468E+00 10 (NRM RESID)/(NRM E)= 0.740E-15 RCOND(EST)= 0.456E-04 EST/TRUE= 0.395E+00 20 (NRM RESID)/(NRM E)= 0.432E-15 RCOND(EST)= 0.441E-07 EST/TRUE= 0.394E+00 30 (NRM RESID)/(NRM E)= 0.678E-15 RCOND(EST)= 0.430E-10 EST/TRUE= 0.394E+00 40 (NRM RESID)/(NRM E)= 0.173E-15 RCOND(EST)= 0.421E-13 EST/TRUE= 0.394E+00 M = 3 N = 3 0 (NRM RESID)/(NRM E)= 0.285E-15 RCOND(EST)= 0.358E-02 EST/TRUE= 0.511E+00 10 (NRM RESID)/(NRM E)= 0.490E-15 RCOND(EST)= 0.222E-04 EST/TRUE= 0.288E+00 20 (NRM RESID)/(NRM E)= 0.444E-15 RCOND(EST)= 0.214E-07 EST/TRUE= 0.288E+00 30 (NRM RESID)/(NRM E)= 0.407E-15 RCOND(EST)= 0.209E-10 EST/TRUE= 0.288E+00 40 (NRM RESID)/(NRM E)= 0.333E-15 RCOND(EST)= 0.204E-13 EST/TRUE= 0.288E+00 M = 3 N = 4 0 (NRM RESID)/(NRM E)= 0.293E-15 RCOND(EST)= 0.145E-02 EST/TRUE= 0.459E+00 10 (NRM RESID)/(NRM E)= 0.109E-14 RCOND(EST)= 0.165E-04 EST/TRUE= 0.310E+00 20 (NRM RESID)/(NRM E)= 0.918E-15 RCOND(EST)= 0.157E-07 EST/TRUE= 0.309E+00 30 (NRM RESID)/(NRM E)= 0.503E-15 RCOND(EST)= 0.136E-10 EST/TRUE= 0.274E+00 40 (NRM RESID)/(NRM E)= 0.533E-15 RCOND(EST)= 0.150E-13 EST/TRUE= 0.309E+00 M = 3 N = 5 0 (NRM RESID)/(NRM E)= 0.431E-15 RCOND(EST)= 0.726E-03 EST/TRUE= 0.411E+00 10 (NRM RESID)/(NRM E)= 0.641E-15 RCOND(EST)= 0.123E-04 EST/TRUE= 0.332E+00 20 (NRM RESID)/(NRM E)= 0.777E-15 RCOND(EST)= 0.117E-07 EST/TRUE= 0.332E+00 30 (NRM RESID)/(NRM E)= 0.106E-14 RCOND(EST)= 0.114E-10 EST/TRUE= 0.332E+00 40 (NRM RESID)/(NRM E)= 0.765E-15 RCOND(EST)= 0.112E-13 EST/TRUE= 0.333E+00 M = 3 N = 6 0 (NRM RESID)/(NRM E)= 0.539E-15 RCOND(EST)= 0.413E-03 EST/TRUE= 0.372E+00 10 (NRM RESID)/(NRM E)= 0.740E-15 RCOND(EST)= 0.875E-05 EST/TRUE= 0.315E+00 20 (NRM RESID)/(NRM E)= 0.133E-14 RCOND(EST)= 0.825E-08 EST/TRUE= 0.314E+00 30 (NRM RESID)/(NRM E)= 0.634E-15 RCOND(EST)= 0.806E-11 EST/TRUE= 0.314E+00 40 (NRM RESID)/(NRM E)= 0.825E-15 RCOND(EST)= 0.787E-14 EST/TRUE= 0.315E+00 M = 3 N = 7 0 (NRM RESID)/(NRM E)= 0.743E-15 RCOND(EST)= 0.264E-03 EST/TRUE= 0.351E+00 10 (NRM RESID)/(NRM E)= 0.925E-15 RCOND(EST)= 0.849E-05 EST/TRUE= 0.389E+00 20 (NRM RESID)/(NRM E)= 0.481E-15 RCOND(EST)= 0.795E-08 EST/TRUE= 0.388E+00 30 (NRM RESID)/(NRM E)= 0.481E-15 RCOND(EST)= 0.777E-11 EST/TRUE= 0.388E+00 40 (NRM RESID)/(NRM E)= 0.555E-15 RCOND(EST)= 0.759E-14 EST/TRUE= 0.389E+00 M = 3 N = 8 0 (NRM RESID)/(NRM E)= 0.108E-14 RCOND(EST)= 0.210E-03 EST/TRUE= 0.389E+00 10 (NRM RESID)/(NRM E)= 0.145E-14 RCOND(EST)= 0.677E-05 EST/TRUE= 0.380E+00 20 (NRM RESID)/(NRM E)= 0.724E-15 RCOND(EST)= 0.630E-08 EST/TRUE= 0.380E+00 30 (NRM RESID)/(NRM E)= 0.987E-15 RCOND(EST)= 0.615E-11 EST/TRUE= 0.380E+00 40 (NRM RESID)/(NRM E)= 0.921E-15 RCOND(EST)= 0.599E-14 EST/TRUE= 0.380E+00 M = 4 N = 2 0 (NRM RESID)/(NRM E)= 0.752E-15 RCOND(EST)= 0.118E-01 EST/TRUE= 0.432E+00 10 (NRM RESID)/(NRM E)= 0.631E-15 RCOND(EST)= 0.437E-04 EST/TRUE= 0.536E+00 20 (NRM RESID)/(NRM E)= 0.965E-15 RCOND(EST)= 0.424E-07 EST/TRUE= 0.535E+00 30 (NRM RESID)/(NRM E)= 0.888E-15 RCOND(EST)= 0.414E-10 EST/TRUE= 0.535E+00 40 (NRM RESID)/(NRM E)= 0.382E-15 RCOND(EST)= 0.404E-13 EST/TRUE= 0.535E+00 M = 4 N = 3 0 (NRM RESID)/(NRM E)= 0.205E-15 RCOND(EST)= 0.424E-02 EST/TRUE= 0.640E+00 10 (NRM RESID)/(NRM E)= 0.438E-15 RCOND(EST)= 0.135E-04 EST/TRUE= 0.312E+00 20 (NRM RESID)/(NRM E)= 0.411E-15 RCOND(EST)= 0.130E-07 EST/TRUE= 0.312E+00 30 (NRM RESID)/(NRM E)= 0.488E-15 RCOND(EST)= 0.127E-10 EST/TRUE= 0.312E+00 40 (NRM RESID)/(NRM E)= 0.222E-15 RCOND(EST)= 0.124E-13 EST/TRUE= 0.312E+00 M = 4 N = 4 0 (NRM RESID)/(NRM E)= 0.315E-15 RCOND(EST)= 0.167E-02 EST/TRUE= 0.563E+00 10 (NRM RESID)/(NRM E)= 0.980E-15 RCOND(EST)= 0.944E-05 EST/TRUE= 0.307E+00 20 (NRM RESID)/(NRM E)= 0.981E-15 RCOND(EST)= 0.902E-08 EST/TRUE= 0.307E+00 30 (NRM RESID)/(NRM E)= 0.629E-15 RCOND(EST)= 0.702E-11 EST/TRUE= 0.244E+00 40 (NRM RESID)/(NRM E)= 0.463E-15 RCOND(EST)= 0.860E-14 EST/TRUE= 0.307E+00 M = 4 N = 5 0 (NRM RESID)/(NRM E)= 0.258E-15 RCOND(EST)= 0.745E-03 EST/TRUE= 0.429E+00 10 (NRM RESID)/(NRM E)= 0.507E-15 RCOND(EST)= 0.683E-05 EST/TRUE= 0.284E+00 20 (NRM RESID)/(NRM E)= 0.539E-15 RCOND(EST)= 0.646E-08 EST/TRUE= 0.284E+00 30 (NRM RESID)/(NRM E)= 0.983E-15 RCOND(EST)= 0.631E-11 EST/TRUE= 0.284E+00 40 (NRM RESID)/(NRM E)= 0.476E-15 RCOND(EST)= 0.616E-14 EST/TRUE= 0.284E+00 M = 4 N = 6 0 (NRM RESID)/(NRM E)= 0.432E-15 RCOND(EST)= 0.409E-03 EST/TRUE= 0.354E+00 10 (NRM RESID)/(NRM E)= 0.915E-15 RCOND(EST)= 0.502E-05 EST/TRUE= 0.281E+00 20 (NRM RESID)/(NRM E)= 0.129E-14 RCOND(EST)= 0.472E-08 EST/TRUE= 0.281E+00 30 (NRM RESID)/(NRM E)= 0.874E-15 RCOND(EST)= 0.461E-11 EST/TRUE= 0.281E+00 40 (NRM RESID)/(NRM E)= 0.680E-15 RCOND(EST)= 0.450E-14 EST/TRUE= 0.282E+00 M = 4 N = 7 0 (NRM RESID)/(NRM E)= 0.645E-15 RCOND(EST)= 0.284E-03 EST/TRUE= 0.340E+00 10 (NRM RESID)/(NRM E)= 0.690E-15 RCOND(EST)= 0.488E-05 EST/TRUE= 0.353E+00 20 (NRM RESID)/(NRM E)= 0.518E-15 RCOND(EST)= 0.455E-08 EST/TRUE= 0.352E+00 30 (NRM RESID)/(NRM E)= 0.475E-15 RCOND(EST)= 0.445E-11 EST/TRUE= 0.352E+00 40 (NRM RESID)/(NRM E)= 0.765E-15 RCOND(EST)= 0.434E-14 EST/TRUE= 0.352E+00 M = 4 N = 8 0 (NRM RESID)/(NRM E)= 0.111E-14 RCOND(EST)= 0.452E-03 EST/TRUE= 0.719E+00 10 (NRM RESID)/(NRM E)= 0.118E-14 RCOND(EST)= 0.395E-05 EST/TRUE= 0.355E+00 20 (NRM RESID)/(NRM E)= 0.511E-15 RCOND(EST)= 0.366E-08 EST/TRUE= 0.354E+00 30 (NRM RESID)/(NRM E)= 0.933E-15 RCOND(EST)= 0.357E-11 EST/TRUE= 0.354E+00 40 (NRM RESID)/(NRM E)= 0.644E-15 RCOND(EST)= 0.349E-14 EST/TRUE= 0.353E+00 M = 5 N = 2 0 (NRM RESID)/(NRM E)= 0.607E-15 RCOND(EST)= 0.100E-01 EST/TRUE= 0.423E+00 10 (NRM RESID)/(NRM E)= 0.773E-15 RCOND(EST)= 0.408E-04 EST/TRUE= 0.648E+00 20 (NRM RESID)/(NRM E)= 0.759E-15 RCOND(EST)= 0.396E-07 EST/TRUE= 0.647E+00 30 (NRM RESID)/(NRM E)= 0.746E-15 RCOND(EST)= 0.387E-10 EST/TRUE= 0.647E+00 40 (NRM RESID)/(NRM E)= 0.289E-15 RCOND(EST)= 0.377E-13 EST/TRUE= 0.647E+00 M = 5 N = 3 0 (NRM RESID)/(NRM E)= 0.233E-15 RCOND(EST)= 0.366E-02 EST/TRUE= 0.586E+00 10 (NRM RESID)/(NRM E)= 0.473E-15 RCOND(EST)= 0.122E-04 EST/TRUE= 0.360E+00 20 (NRM RESID)/(NRM E)= 0.681E-15 RCOND(EST)= 0.118E-07 EST/TRUE= 0.361E+00 30 (NRM RESID)/(NRM E)= 0.563E-15 RCOND(EST)= 0.115E-10 EST/TRUE= 0.361E+00 40 (NRM RESID)/(NRM E)= 0.178E-15 RCOND(EST)= 0.112E-13 EST/TRUE= 0.361E+00 M = 5 N = 4 0 (NRM RESID)/(NRM E)= 0.288E-15 RCOND(EST)= 0.124E-02 EST/TRUE= 0.861E+00 10 (NRM RESID)/(NRM E)= 0.101E-14 RCOND(EST)= 0.665E-05 EST/TRUE= 0.302E+00 20 (NRM RESID)/(NRM E)= 0.124E-14 RCOND(EST)= 0.635E-08 EST/TRUE= 0.302E+00 30 (NRM RESID)/(NRM E)= 0.450E-15 RCOND(EST)= 0.562E-11 EST/TRUE= 0.274E+00 40 (NRM RESID)/(NRM E)= 0.406E-15 RCOND(EST)= 0.605E-14 EST/TRUE= 0.302E+00 M = 5 N = 5 0 (NRM RESID)/(NRM E)= 0.499E-15 RCOND(EST)= 0.210E-03 EST/TRUE= 0.954E+00 10 (NRM RESID)/(NRM E)= 0.471E-15 RCOND(EST)= 0.518E-05 EST/TRUE= 0.311E+00 20 (NRM RESID)/(NRM E)= 0.450E-15 RCOND(EST)= 0.492E-08 EST/TRUE= 0.313E+00 30 (NRM RESID)/(NRM E)= 0.977E-15 RCOND(EST)= 0.480E-11 EST/TRUE= 0.313E+00 40 (NRM RESID)/(NRM E)= 0.422E-15 RCOND(EST)= 0.468E-14 EST/TRUE= 0.312E+00 M = 5 N = 6 0 (NRM RESID)/(NRM E)= 0.547E-15 RCOND(EST)= 0.627E-04 EST/TRUE= 0.926E+00 10 (NRM RESID)/(NRM E)= 0.907E-15 RCOND(EST)= 0.358E-05 EST/TRUE= 0.265E+00 20 (NRM RESID)/(NRM E)= 0.116E-14 RCOND(EST)= 0.337E-08 EST/TRUE= 0.266E+00 30 (NRM RESID)/(NRM E)= 0.888E-15 RCOND(EST)= 0.329E-11 EST/TRUE= 0.266E+00 40 (NRM RESID)/(NRM E)= 0.701E-15 RCOND(EST)= 0.322E-14 EST/TRUE= 0.265E+00 M = 5 N = 7 0 (NRM RESID)/(NRM E)= 0.820E-15 RCOND(EST)= 0.248E-04 EST/TRUE= 0.889E+00 10 (NRM RESID)/(NRM E)= 0.985E-15 RCOND(EST)= 0.348E-05 EST/TRUE= 0.318E+00 20 (NRM RESID)/(NRM E)= 0.497E-15 RCOND(EST)= 0.325E-08 EST/TRUE= 0.319E+00 30 (NRM RESID)/(NRM E)= 0.506E-15 RCOND(EST)= 0.318E-11 EST/TRUE= 0.319E+00 40 (NRM RESID)/(NRM E)= 0.853E-15 RCOND(EST)= 0.310E-14 EST/TRUE= 0.317E+00 M = 5 N = 8 0 (NRM RESID)/(NRM E)= 0.984E-15 RCOND(EST)= 0.114E-04 EST/TRUE= 0.841E+00 10 (NRM RESID)/(NRM E)= 0.131E-14 RCOND(EST)= 0.287E-05 EST/TRUE= 0.328E+00 20 (NRM RESID)/(NRM E)= 0.565E-15 RCOND(EST)= 0.266E-08 EST/TRUE= 0.330E+00 30 (NRM RESID)/(NRM E)= 0.120E-14 RCOND(EST)= 0.260E-11 EST/TRUE= 0.330E+00 40 (NRM RESID)/(NRM E)= 0.646E-15 RCOND(EST)= 0.254E-14 EST/TRUE= 0.328E+00 M = 6 N = 2 0 (NRM RESID)/(NRM E)= 0.911E-15 RCOND(EST)= 0.900E-02 EST/TRUE= 0.432E+00 10 (NRM RESID)/(NRM E)= 0.555E-15 RCOND(EST)= 0.377E-04 EST/TRUE= 0.736E+00 20 (NRM RESID)/(NRM E)= 0.904E-15 RCOND(EST)= 0.366E-07 EST/TRUE= 0.735E+00 30 (NRM RESID)/(NRM E)= 0.802E-15 RCOND(EST)= 0.357E-10 EST/TRUE= 0.735E+00 40 (NRM RESID)/(NRM E)= 0.549E-15 RCOND(EST)= 0.349E-13 EST/TRUE= 0.735E+00 M = 6 N = 3 0 (NRM RESID)/(NRM E)= 0.434E-15 RCOND(EST)= 0.317E-02 EST/TRUE= 0.546E+00 10 (NRM RESID)/(NRM E)= 0.518E-15 RCOND(EST)= 0.115E-04 EST/TRUE= 0.417E+00 20 (NRM RESID)/(NRM E)= 0.455E-15 RCOND(EST)= 0.112E-07 EST/TRUE= 0.418E+00 30 (NRM RESID)/(NRM E)= 0.391E-15 RCOND(EST)= 0.109E-10 EST/TRUE= 0.418E+00 40 (NRM RESID)/(NRM E)= 0.222E-15 RCOND(EST)= 0.107E-13 EST/TRUE= 0.418E+00 M = 6 N = 4 0 (NRM RESID)/(NRM E)= 0.645E-15 RCOND(EST)= 0.115E-02 EST/TRUE= 0.812E+00 10 (NRM RESID)/(NRM E)= 0.869E-15 RCOND(EST)= 0.651E-05 EST/TRUE= 0.359E+00 20 (NRM RESID)/(NRM E)= 0.114E-14 RCOND(EST)= 0.626E-08 EST/TRUE= 0.359E+00 30 (NRM RESID)/(NRM E)= 0.282E-15 RCOND(EST)= 0.515E-11 EST/TRUE= 0.303E+00 40 (NRM RESID)/(NRM E)= 0.463E-15 RCOND(EST)= 0.598E-14 EST/TRUE= 0.360E+00 M = 6 N = 5 0 (NRM RESID)/(NRM E)= 0.558E-15 RCOND(EST)= 0.387E-03 EST/TRUE= 0.114E+01 10 (NRM RESID)/(NRM E)= 0.649E-15 RCOND(EST)= 0.430E-05 EST/TRUE= 0.328E+00 20 (NRM RESID)/(NRM E)= 0.321E-15 RCOND(EST)= 0.407E-08 EST/TRUE= 0.328E+00 30 (NRM RESID)/(NRM E)= 0.872E-15 RCOND(EST)= 0.397E-11 EST/TRUE= 0.328E+00 40 (NRM RESID)/(NRM E)= 0.650E-15 RCOND(EST)= 0.389E-14 EST/TRUE= 0.328E+00 M = 6 N = 6 0 (NRM RESID)/(NRM E)= 0.631E-15 RCOND(EST)= 0.757E-04 EST/TRUE= 0.119E+01 10 (NRM RESID)/(NRM E)= 0.821E-15 RCOND(EST)= 0.279E-05 EST/TRUE= 0.269E+00 20 (NRM RESID)/(NRM E)= 0.117E-14 RCOND(EST)= 0.261E-08 EST/TRUE= 0.269E+00 30 (NRM RESID)/(NRM E)= 0.866E-15 RCOND(EST)= 0.255E-11 EST/TRUE= 0.269E+00 40 (NRM RESID)/(NRM E)= 0.703E-15 RCOND(EST)= 0.250E-14 EST/TRUE= 0.270E+00 M = 6 N = 7 0 (NRM RESID)/(NRM E)= 0.572E-15 10 (NRM RESID)/(NRM E)= 0.974E-15 20 (NRM RESID)/(NRM E)= 0.404E-15 30 (NRM RESID)/(NRM E)= 0.481E-15 40 (NRM RESID)/(NRM E)= 0.915E-15 M = 6 N = 8 0 (NRM RESID)/(NRM E)= 0.117E-14 10 (NRM RESID)/(NRM E)= 0.142E-14 20 (NRM RESID)/(NRM E)= 0.506E-15 30 (NRM RESID)/(NRM E)= 0.102E-14 40 (NRM RESID)/(NRM E)= 0.901E-15 M = 7 N = 2 0 (NRM RESID)/(NRM E)= 0.722E-15 RCOND(EST)= 0.802E-02 EST/TRUE= 0.433E+00 10 (NRM RESID)/(NRM E)= 0.779E-15 RCOND(EST)= 0.348E-04 EST/TRUE= 0.806E+00 20 (NRM RESID)/(NRM E)= 0.666E-15 RCOND(EST)= 0.338E-07 EST/TRUE= 0.805E+00 30 (NRM RESID)/(NRM E)= 0.911E-15 RCOND(EST)= 0.330E-10 EST/TRUE= 0.805E+00 40 (NRM RESID)/(NRM E)= 0.800E-15 RCOND(EST)= 0.322E-13 EST/TRUE= 0.805E+00 M = 7 N = 3 0 (NRM RESID)/(NRM E)= 0.336E-15 RCOND(EST)= 0.283E-02 EST/TRUE= 0.525E+00 10 (NRM RESID)/(NRM E)= 0.333E-15 RCOND(EST)= 0.107E-04 EST/TRUE= 0.457E+00 20 (NRM RESID)/(NRM E)= 0.539E-15 RCOND(EST)= 0.104E-07 EST/TRUE= 0.458E+00 30 (NRM RESID)/(NRM E)= 0.591E-15 RCOND(EST)= 0.102E-10 EST/TRUE= 0.458E+00 40 (NRM RESID)/(NRM E)= 0.151E-15 RCOND(EST)= 0.993E-14 EST/TRUE= 0.458E+00 M = 7 N = 4 0 (NRM RESID)/(NRM E)= 0.408E-15 RCOND(EST)= 0.105E-02 EST/TRUE= 0.772E+00 10 (NRM RESID)/(NRM E)= 0.873E-15 RCOND(EST)= 0.598E-05 EST/TRUE= 0.387E+00 20 (NRM RESID)/(NRM E)= 0.846E-15 RCOND(EST)= 0.577E-08 EST/TRUE= 0.388E+00 30 (NRM RESID)/(NRM E)= 0.338E-15 RCOND(EST)= 0.474E-11 EST/TRUE= 0.327E+00 40 (NRM RESID)/(NRM E)= 0.486E-15 RCOND(EST)= 0.550E-14 EST/TRUE= 0.390E+00 M = 7 N = 5 0 (NRM RESID)/(NRM E)= 0.543E-15 RCOND(EST)= 0.393E-03 EST/TRUE= 0.116E+01 10 (NRM RESID)/(NRM E)= 0.615E-15 RCOND(EST)= 0.377E-05 EST/TRUE= 0.337E+00 20 (NRM RESID)/(NRM E)= 0.634E-15 RCOND(EST)= 0.358E-08 EST/TRUE= 0.336E+00 30 (NRM RESID)/(NRM E)= 0.110E-14 RCOND(EST)= 0.350E-11 EST/TRUE= 0.336E+00 40 (NRM RESID)/(NRM E)= 0.723E-15 RCOND(EST)= 0.342E-14 EST/TRUE= 0.337E+00 M = 7 N = 6 0 (NRM RESID)/(NRM E)= 0.696E-15 10 (NRM RESID)/(NRM E)= 0.858E-15 20 (NRM RESID)/(NRM E)= 0.946E-15 30 (NRM RESID)/(NRM E)= 0.105E-14 40 (NRM RESID)/(NRM E)= 0.721E-15 M = 7 N = 7 0 (NRM RESID)/(NRM E)= 0.630E-15 10 (NRM RESID)/(NRM E)= 0.898E-15 20 (NRM RESID)/(NRM E)= 0.434E-15 30 (NRM RESID)/(NRM E)= 0.486E-15 40 (NRM RESID)/(NRM E)= 0.108E-14 M = 7 N = 8 0 (NRM RESID)/(NRM E)= 0.114E-14 10 (NRM RESID)/(NRM E)= 0.106E-14 20 (NRM RESID)/(NRM E)= 0.590E-15 30 (NRM RESID)/(NRM E)= 0.937E-15 40 (NRM RESID)/(NRM E)= 0.810E-15 M = 8 N = 2 0 (NRM RESID)/(NRM E)= 0.496E-15 RCOND(EST)= 0.701E-02 EST/TRUE= 0.420E+00 10 (NRM RESID)/(NRM E)= 0.666E-15 RCOND(EST)= 0.321E-04 EST/TRUE= 0.861E+00 20 (NRM RESID)/(NRM E)= 0.914E-15 RCOND(EST)= 0.312E-07 EST/TRUE= 0.860E+00 30 (NRM RESID)/(NRM E)= 0.770E-15 RCOND(EST)= 0.305E-10 EST/TRUE= 0.860E+00 40 (NRM RESID)/(NRM E)= 0.670E-15 RCOND(EST)= 0.298E-13 EST/TRUE= 0.860E+00 M = 8 N = 3 0 (NRM RESID)/(NRM E)= 0.407E-15 RCOND(EST)= 0.256E-02 EST/TRUE= 0.509E+00 10 (NRM RESID)/(NRM E)= 0.401E-15 RCOND(EST)= 0.985E-05 EST/TRUE= 0.483E+00 20 (NRM RESID)/(NRM E)= 0.540E-15 RCOND(EST)= 0.955E-08 EST/TRUE= 0.485E+00 30 (NRM RESID)/(NRM E)= 0.629E-15 RCOND(EST)= 0.933E-11 EST/TRUE= 0.485E+00 40 (NRM RESID)/(NRM E)= 0.281E-15 RCOND(EST)= 0.911E-14 EST/TRUE= 0.484E+00 M = 8 N = 4 0 (NRM RESID)/(NRM E)= 0.388E-15 RCOND(EST)= 0.950E-03 EST/TRUE= 0.734E+00 10 (NRM RESID)/(NRM E)= 0.887E-15 RCOND(EST)= 0.562E-05 EST/TRUE= 0.418E+00 20 (NRM RESID)/(NRM E)= 0.118E-14 RCOND(EST)= 0.542E-08 EST/TRUE= 0.419E+00 30 (NRM RESID)/(NRM E)= 0.416E-15 RCOND(EST)= 0.465E-11 EST/TRUE= 0.368E+00 40 (NRM RESID)/(NRM E)= 0.444E-15 RCOND(EST)= 0.518E-14 EST/TRUE= 0.420E+00 M = 8 N = 5 0 (NRM RESID)/(NRM E)= 0.479E-15 RCOND(EST)= 0.362E-03 EST/TRUE= 0.109E+01 10 (NRM RESID)/(NRM E)= 0.640E-15 RCOND(EST)= 0.385E-05 EST/TRUE= 0.395E+00 20 (NRM RESID)/(NRM E)= 0.585E-15 RCOND(EST)= 0.368E-08 EST/TRUE= 0.394E+00 30 (NRM RESID)/(NRM E)= 0.118E-14 RCOND(EST)= 0.359E-11 EST/TRUE= 0.394E+00 40 (NRM RESID)/(NRM E)= 0.707E-15 RCOND(EST)= 0.351E-14 EST/TRUE= 0.394E+00 M = 8 N = 6 0 (NRM RESID)/(NRM E)= 0.923E-15 10 (NRM RESID)/(NRM E)= 0.832E-15 20 (NRM RESID)/(NRM E)= 0.851E-15 30 (NRM RESID)/(NRM E)= 0.860E-15 40 (NRM RESID)/(NRM E)= 0.465E-15 M = 8 N = 7 0 (NRM RESID)/(NRM E)= 0.536E-15 10 (NRM RESID)/(NRM E)= 0.109E-14 20 (NRM RESID)/(NRM E)= 0.564E-15 30 (NRM RESID)/(NRM E)= 0.623E-15 40 (NRM RESID)/(NRM E)= 0.114E-14 M = 8 N = 8 0 (NRM RESID)/(NRM E)= 0.864E-15 10 (NRM RESID)/(NRM E)= 0.132E-14 20 (NRM RESID)/(NRM E)= 0.674E-15 30 (NRM RESID)/(NRM E)= 0.108E-14 40 (NRM RESID)/(NRM E)= 0.948E-15 M = 9 N = 2 0 (NRM RESID)/(NRM E)= 0.722E-15 RCOND(EST)= 0.637E-02 EST/TRUE= 0.420E+00 10 (NRM RESID)/(NRM E)= 0.618E-15 RCOND(EST)= 0.298E-04 EST/TRUE= 0.906E+00 20 (NRM RESID)/(NRM E)= 0.119E-14 RCOND(EST)= 0.289E-07 EST/TRUE= 0.905E+00 30 (NRM RESID)/(NRM E)= 0.358E-15 RCOND(EST)= 0.282E-10 EST/TRUE= 0.905E+00 40 (NRM RESID)/(NRM E)= 0.615E-15 RCOND(EST)= 0.276E-13 EST/TRUE= 0.907E+00 M = 9 N = 3 0 (NRM RESID)/(NRM E)= 0.358E-15 RCOND(EST)= 0.232E-02 EST/TRUE= 0.495E+00 10 (NRM RESID)/(NRM E)= 0.493E-15 RCOND(EST)= 0.928E-05 EST/TRUE= 0.516E+00 20 (NRM RESID)/(NRM E)= 0.770E-15 RCOND(EST)= 0.901E-08 EST/TRUE= 0.517E+00 30 (NRM RESID)/(NRM E)= 0.348E-15 RCOND(EST)= 0.880E-11 EST/TRUE= 0.517E+00 40 (NRM RESID)/(NRM E)= 0.348E-15 RCOND(EST)= 0.859E-14 EST/TRUE= 0.517E+00 M = 9 N = 4 0 (NRM RESID)/(NRM E)= 0.449E-15 RCOND(EST)= 0.872E-03 EST/TRUE= 0.706E+00 10 (NRM RESID)/(NRM E)= 0.968E-15 RCOND(EST)= 0.533E-05 EST/TRUE= 0.448E+00 20 (NRM RESID)/(NRM E)= 0.938E-15 RCOND(EST)= 0.515E-08 EST/TRUE= 0.450E+00 30 (NRM RESID)/(NRM E)= 0.318E-15 RCOND(EST)= 0.449E-11 EST/TRUE= 0.401E+00 40 (NRM RESID)/(NRM E)= 0.507E-15 RCOND(EST)= 0.492E-14 EST/TRUE= 0.449E+00 M = 9 N = 5 0 (NRM RESID)/(NRM E)= 0.359E-15 10 (NRM RESID)/(NRM E)= 0.528E-15 20 (NRM RESID)/(NRM E)= 0.401E-15 30 (NRM RESID)/(NRM E)= 0.954E-15 40 (NRM RESID)/(NRM E)= 0.718E-15 M = 9 N = 6 0 (NRM RESID)/(NRM E)= 0.698E-15 10 (NRM RESID)/(NRM E)= 0.872E-15 20 (NRM RESID)/(NRM E)= 0.820E-15 30 (NRM RESID)/(NRM E)= 0.660E-15 40 (NRM RESID)/(NRM E)= 0.501E-15 M = 9 N = 7 0 (NRM RESID)/(NRM E)= 0.592E-15 10 (NRM RESID)/(NRM E)= 0.982E-15 20 (NRM RESID)/(NRM E)= 0.458E-15 30 (NRM RESID)/(NRM E)= 0.712E-15 40 (NRM RESID)/(NRM E)= 0.130E-14 M = 9 N = 8 0 (NRM RESID)/(NRM E)= 0.113E-14 10 (NRM RESID)/(NRM E)= 0.179E-14 20 (NRM RESID)/(NRM E)= 0.809E-15 30 (NRM RESID)/(NRM E)= 0.954E-15 40 (NRM RESID)/(NRM E)= 0.822E-15 WORST CASE RESIDUAL IS 0.179E-14 WORST CASE RCOND RATIOS (EST/TRUE) ARE 0.244E+00 (LOW) AND 0.119E+01 (HIGH) THE RESIDUAL SHOULD BE ON THE ORDER OF 1E-14 OR SMALLER ON MOST MACHINES. THE RCOND RATIOS SHOULD BE ON THE ORDER OF 1, I.E., BETWEEN .1 AND 10. SHAR_EOF fi # end of overwriting check if test -f 'res2' then echo shar: will not over-write existing file "'res2'" else cat << "SHAR_EOF" > 'res2' T T SOLVE A*X*E + E*X*A + Q = 0 USING SYLGC N = 1 0 (NRM RESID)/(NRM Q)= 0.000E+00 RCOND(EST)= 0.100E+01 EST/TRUE= 0.100E+01 10 (NRM RESID)/(NRM Q)= 0.000E+00 RCOND(EST)= 0.100E+01 EST/TRUE= 0.100E+01 20 (NRM RESID)/(NRM Q)= 0.000E+00 RCOND(EST)= 0.100E+01 EST/TRUE= 0.100E+01 30 (NRM RESID)/(NRM Q)= 0.000E+00 RCOND(EST)= 0.100E+01 EST/TRUE= 0.100E+01 40 (NRM RESID)/(NRM Q)= 0.000E+00 RCOND(EST)= 0.100E+01 EST/TRUE= 0.100E+01 N = 2 0 (NRM RESID)/(NRM Q)= 0.000E+00 RCOND(EST)= 0.117E+00 EST/TRUE= 0.852E+00 10 (NRM RESID)/(NRM Q)= 0.296E-15 RCOND(EST)= 0.487E-03 EST/TRUE= 0.128E+01 20 (NRM RESID)/(NRM Q)= 0.296E-15 RCOND(EST)= 0.477E-06 EST/TRUE= 0.128E+01 30 (NRM RESID)/(NRM Q)= 0.296E-15 RCOND(EST)= 0.466E-09 EST/TRUE= 0.128E+01 40 (NRM RESID)/(NRM Q)= 0.296E-15 RCOND(EST)= 0.455E-12 EST/TRUE= 0.128E+01 N = 3 0 (NRM RESID)/(NRM Q)= 0.763E-15 RCOND(EST)= 0.286E-01 EST/TRUE= 0.508E+00 10 (NRM RESID)/(NRM Q)= 0.148E-15 RCOND(EST)= 0.143E-03 EST/TRUE= 0.723E+00 20 (NRM RESID)/(NRM Q)= 0.493E-15 RCOND(EST)= 0.140E-06 EST/TRUE= 0.725E+00 30 (NRM RESID)/(NRM Q)= 0.209E-15 RCOND(EST)= 0.136E-09 EST/TRUE= 0.725E+00 40 (NRM RESID)/(NRM Q)= 0.299E-15 RCOND(EST)= 0.133E-12 EST/TRUE= 0.725E+00 N = 4 0 (NRM RESID)/(NRM Q)= 0.136E-14 RCOND(EST)= 0.127E-01 EST/TRUE= 0.460E+00 10 (NRM RESID)/(NRM Q)= 0.789E-15 RCOND(EST)= 0.682E-04 EST/TRUE= 0.512E+00 20 (NRM RESID)/(NRM Q)= 0.666E-15 RCOND(EST)= 0.668E-07 EST/TRUE= 0.513E+00 30 (NRM RESID)/(NRM Q)= 0.641E-15 RCOND(EST)= 0.964E-10 EST/TRUE= 0.758E+00 40 (NRM RESID)/(NRM Q)= 0.148E-14 RCOND(EST)= 0.942E-13 EST/TRUE= 0.759E+00 N = 5 0 (NRM RESID)/(NRM Q)= 0.102E-14 RCOND(EST)= 0.520E-02 EST/TRUE= 0.379E+00 10 (NRM RESID)/(NRM Q)= 0.120E-14 RCOND(EST)= 0.778E-04 EST/TRUE= 0.772E+00 20 (NRM RESID)/(NRM Q)= 0.933E-15 RCOND(EST)= 0.764E-07 EST/TRUE= 0.776E+00 30 (NRM RESID)/(NRM Q)= 0.629E-15 RCOND(EST)= 0.746E-10 EST/TRUE= 0.776E+00 40 (NRM RESID)/(NRM Q)= 0.355E-15 RCOND(EST)= 0.728E-13 EST/TRUE= 0.775E+00 N = 6 0 (NRM RESID)/(NRM Q)= 0.164E-14 RCOND(EST)= 0.221E-02 EST/TRUE= 0.372E+00 10 (NRM RESID)/(NRM Q)= 0.203E-14 RCOND(EST)= 0.429E-04 EST/TRUE= 0.530E+00 20 (NRM RESID)/(NRM Q)= 0.533E-15 RCOND(EST)= 0.423E-07 EST/TRUE= 0.534E+00 30 (NRM RESID)/(NRM Q)= 0.612E-15 RCOND(EST)= 0.413E-10 EST/TRUE= 0.534E+00 40 (NRM RESID)/(NRM Q)= 0.829E-15 RCOND(EST)= 0.403E-13 EST/TRUE= 0.534E+00 N = 7 0 (NRM RESID)/(NRM Q)= 0.220E-14 10 (NRM RESID)/(NRM Q)= 0.128E-14 20 (NRM RESID)/(NRM Q)= 0.126E-14 30 (NRM RESID)/(NRM Q)= 0.525E-15 40 (NRM RESID)/(NRM Q)= 0.846E-15 N = 8 0 (NRM RESID)/(NRM Q)= 0.135E-14 10 (NRM RESID)/(NRM Q)= 0.178E-14 20 (NRM RESID)/(NRM Q)= 0.825E-15 30 (NRM RESID)/(NRM Q)= 0.994E-15 40 (NRM RESID)/(NRM Q)= 0.166E-14 WORST CASE RESIDUAL IS 0.220E-14 WORST CASE RCOND RATIOS (EST/TRUE) ARE 0.372E+00 (LOW) AND 0.128E+01 (HIGH) THE RESIDUAL SHOULD BE ON THE ORDER OF 1E-14 OR SMALLER ON MOST MACHINES. THE RCOND RATIOS SHOULD BE ON THE ORDER OF 1, I.E., BETWEEN .1 AND 10. SHAR_EOF fi # end of overwriting check if test -f 'res3' then echo shar: will not over-write existing file "'res3'" else cat << "SHAR_EOF" > 'res3' T T SOLVE A*X*A - E*X*E + Q = 0 USING SYLGD N = 2 0 (NRM RESID)/(NRM Q)= 0.000E+00 RCOND(EST)= 0.236E+00 EST/TRUE= 0.720E+00 10 (NRM RESID)/(NRM Q)= 0.311E-15 RCOND(EST)= 0.390E-03 EST/TRUE= 0.872E+00 20 (NRM RESID)/(NRM Q)= 0.111E-15 RCOND(EST)= 0.381E-06 EST/TRUE= 0.874E+00 30 (NRM RESID)/(NRM Q)= 0.222E-15 RCOND(EST)= 0.373E-09 EST/TRUE= 0.874E+00 40 (NRM RESID)/(NRM Q)= 0.222E-15 RCOND(EST)= 0.364E-12 EST/TRUE= 0.874E+00 N = 3 0 (NRM RESID)/(NRM Q)= 0.760E-15 RCOND(EST)= 0.665E-01 EST/TRUE= 0.395E+00 10 (NRM RESID)/(NRM Q)= 0.523E-15 RCOND(EST)= 0.952E-04 EST/TRUE= 0.561E+00 20 (NRM RESID)/(NRM Q)= 0.708E-15 RCOND(EST)= 0.931E-07 EST/TRUE= 0.562E+00 30 (NRM RESID)/(NRM Q)= 0.605E-15 RCOND(EST)= 0.909E-10 EST/TRUE= 0.562E+00 40 (NRM RESID)/(NRM Q)= 0.272E-15 RCOND(EST)= 0.888E-13 EST/TRUE= 0.562E+00 N = 4 0 (NRM RESID)/(NRM Q)= 0.563E-15 RCOND(EST)= 0.656E-01 EST/TRUE= 0.635E+00 10 (NRM RESID)/(NRM Q)= 0.351E-15 RCOND(EST)= 0.329E-04 EST/TRUE= 0.363E+00 20 (NRM RESID)/(NRM Q)= 0.442E-15 RCOND(EST)= 0.322E-07 EST/TRUE= 0.364E+00 30 (NRM RESID)/(NRM Q)= 0.489E-15 RCOND(EST)= 0.315E-10 EST/TRUE= 0.364E+00 40 (NRM RESID)/(NRM Q)= 0.854E-15 RCOND(EST)= 0.307E-13 EST/TRUE= 0.364E+00 N = 5 0 (NRM RESID)/(NRM Q)= 0.164E-14 RCOND(EST)= 0.278E-01 EST/TRUE= 0.398E+00 10 (NRM RESID)/(NRM Q)= 0.461E-15 RCOND(EST)= 0.364E-04 EST/TRUE= 0.642E+00 20 (NRM RESID)/(NRM Q)= 0.691E-15 RCOND(EST)= 0.357E-07 EST/TRUE= 0.645E+00 30 (NRM RESID)/(NRM Q)= 0.751E-15 RCOND(EST)= 0.348E-10 EST/TRUE= 0.645E+00 40 (NRM RESID)/(NRM Q)= 0.544E-15 RCOND(EST)= 0.340E-13 EST/TRUE= 0.645E+00 N = 6 0 (NRM RESID)/(NRM Q)= 0.203E-14 RCOND(EST)= 0.225E-01 EST/TRUE= 0.445E+00 10 (NRM RESID)/(NRM Q)= 0.162E-14 RCOND(EST)= 0.148E-04 EST/TRUE= 0.381E+00 20 (NRM RESID)/(NRM Q)= 0.102E-14 RCOND(EST)= 0.145E-07 EST/TRUE= 0.383E+00 30 (NRM RESID)/(NRM Q)= 0.682E-15 RCOND(EST)= 0.142E-10 EST/TRUE= 0.383E+00 40 (NRM RESID)/(NRM Q)= 0.170E-14 RCOND(EST)= 0.139E-13 EST/TRUE= 0.383E+00 N = 7 0 (NRM RESID)/(NRM Q)= 0.173E-14 10 (NRM RESID)/(NRM Q)= 0.149E-14 20 (NRM RESID)/(NRM Q)= 0.643E-15 30 (NRM RESID)/(NRM Q)= 0.845E-15 40 (NRM RESID)/(NRM Q)= 0.887E-15 N = 8 0 (NRM RESID)/(NRM Q)= 0.990E-15 10 (NRM RESID)/(NRM Q)= 0.140E-14 20 (NRM RESID)/(NRM Q)= 0.151E-14 30 (NRM RESID)/(NRM Q)= 0.135E-14 40 (NRM RESID)/(NRM Q)= 0.973E-15 WORST CASE RESIDUAL IS 0.203E-14 WORST CASE RCOND RATIOS (EST/TRUE) ARE 0.363E+00 (LOW) AND 0.874E+00 (HIGH) THE RESIDUAL SHOULD BE ON THE ORDER OF 1E-14 OR SMALLER ON MOST MACHINES. THE RCOND RATIOS SHOULD BE ON THE ORDER OF 1, I.E., BETWEEN .1 AND 10. SHAR_EOF fi # end of overwriting check if test -f 'res4' then echo shar: will not over-write existing file "'res4'" else cat << "SHAR_EOF" > 'res4' T T SOLVE A*X*B + C*X*D = E USING SYLG M = 2, N = 1 -0.1000E+01 -0.1000E+01 (NRM RESID)/(NRM E)= 0.000E+00 RCOND(EST)= 0.149E+00 DO YOU WISH TO HAVE THE ACTUAL CONDITION NUMBER COMPUTED? (Y OR N) RCOND(TRUE)= 0.205E+00 EST/TRUE= 0.727E+00 SHAR_EOF fi # end of overwriting check if test -f 'res5' then echo shar: will not over-write existing file "'res5'" else cat << "SHAR_EOF" > 'res5' T T SOLVE A*X*E + E*X*A + Q = 0 USING SYLGC N = 3 -0.2828E+00 0.1207E+00 0.7553E-01 0.1207E+00 0.3802E-01 -0.1554E+00 0.7553E-01 -0.1554E+00 0.9797E-01 (NRM RESID)/(NRM Q)= 0.246E-14 RCOND(EST)= 0.847E-02 DO YOU WISH TO HAVE THE ACTUAL CONDITION NUMBER COMPUTED? (Y OR N) RCOND(TRUE)= 0.203E-01 EST/TRUE= 0.418E+00 SHAR_EOF fi # end of overwriting check if test -f 'res6' then echo shar: will not over-write existing file "'res6'" else cat << "SHAR_EOF" > 'res6' T T SOLVE A*X*A - E*X*E + Q = 0 USING SYLGD N = 5 0.9957E+01 -0.2289E+02 -0.3361E+02 0.2581E+02 0.1963E+02 -0.2289E+02 -0.4787E+02 -0.2944E+02 0.4595E+02 0.4209E+02 -0.3361E+02 -0.2944E+02 0.1919E+00 0.2509E+02 0.2677E+02 0.2581E+02 0.4595E+02 0.2509E+02 -0.4278E+02 -0.4072E+02 0.1963E+02 0.4209E+02 0.2677E+02 -0.4072E+02 -0.3895E+02 (NRM RESID)/(NRM Q)= 0.141E+01 RCOND(EST)= 0.506E-04 DO YOU WISH TO HAVE THE ACTUAL CONDITION NUMBER COMPUTED? (Y OR N) RCOND(TRUE)= 0.424E-04 EST/TRUE= 0.119E+01 SHAR_EOF fi # end of overwriting check if test -f 'res7' then echo shar: will not over-write existing file "'res7'" else cat << "SHAR_EOF" > 'res7' T T SOLVE A*X*B + C*X*D = E USING SYLG M = 1 N = 1 1 (NRM RESID)/(NRM E)= 0.385E-16 RCOND(EST)= 0.710E+00 EST/TRUE= 0.710E+00 2 (NRM RESID)/(NRM E)= 0.155E-15 RCOND(EST)= 0.685E+00 EST/TRUE= 0.685E+00 3 (NRM RESID)/(NRM E)= 0.127E-15 RCOND(EST)= 0.100E+01 EST/TRUE= 0.100E+01 4 (NRM RESID)/(NRM E)= 0.267E-15 RCOND(EST)= 0.538E+00 EST/TRUE= 0.538E+00 5 (NRM RESID)/(NRM E)= 0.000E+00 RCOND(EST)= 0.100E+01 EST/TRUE= 0.100E+01 M = 1 N = 2 1 (NRM RESID)/(NRM E)= 0.333E-14 RCOND(EST)= 0.686E-01 EST/TRUE= 0.502E+00 2 (NRM RESID)/(NRM E)= 0.141E-14 RCOND(EST)= 0.241E+00 EST/TRUE= 0.514E+00 3 (NRM RESID)/(NRM E)= 0.327E-14 RCOND(EST)= 0.234E-01 EST/TRUE= 0.909E+00 4 (NRM RESID)/(NRM E)= 0.441E-15 RCOND(EST)= 0.638E+00 EST/TRUE= 0.162E+01 5 (NRM RESID)/(NRM E)= 0.207E-15 RCOND(EST)= 0.197E+00 EST/TRUE= 0.570E+00 M = 1 N = 3 1 (NRM RESID)/(NRM E)= 0.109E-14 RCOND(EST)= 0.578E+00 EST/TRUE= 0.902E+00 2 (NRM RESID)/(NRM E)= 0.600E-15 RCOND(EST)= 0.408E+00 EST/TRUE= 0.108E+01 3 (NRM RESID)/(NRM E)= 0.588E-15 RCOND(EST)= 0.480E-01 EST/TRUE= 0.179E+01 4 (NRM RESID)/(NRM E)= 0.704E-15 RCOND(EST)= 0.179E+00 EST/TRUE= 0.134E+01 5 (NRM RESID)/(NRM E)= 0.647E-14 RCOND(EST)= 0.688E-01 EST/TRUE= 0.739E+00 M = 1 N = 4 1 (NRM RESID)/(NRM E)= 0.471E-15 RCOND(EST)= 0.855E-01 EST/TRUE= 0.613E+00 2 (NRM RESID)/(NRM E)= 0.292E-15 RCOND(EST)= 0.267E+00 EST/TRUE= 0.902E+00 3 (NRM RESID)/(NRM E)= 0.583E-15 RCOND(EST)= 0.343E+00 EST/TRUE= 0.145E+01 4 (NRM RESID)/(NRM E)= 0.267E-14 RCOND(EST)= 0.605E-01 EST/TRUE= 0.879E+00 5 (NRM RESID)/(NRM E)= 0.371E-15 RCOND(EST)= 0.113E+00 EST/TRUE= 0.111E+01 M = 1 N = 5 1 (NRM RESID)/(NRM E)= 0.411E-14 RCOND(EST)= 0.624E-01 EST/TRUE= 0.865E+00 2 (NRM RESID)/(NRM E)= 0.121E-14 RCOND(EST)= 0.166E-01 EST/TRUE= 0.854E+00 3 (NRM RESID)/(NRM E)= 0.697E-14 RCOND(EST)= 0.286E-01 EST/TRUE= 0.182E+01 4 (NRM RESID)/(NRM E)= 0.379E-14 RCOND(EST)= 0.331E-01 EST/TRUE= 0.792E+00 5 (NRM RESID)/(NRM E)= 0.149E-14 RCOND(EST)= 0.160E-01 EST/TRUE= 0.540E+00 M = 1 N = 6 1 (NRM RESID)/(NRM E)= 0.455E-15 RCOND(EST)= 0.171E+00 EST/TRUE= 0.118E+01 2 (NRM RESID)/(NRM E)= 0.865E-15 RCOND(EST)= 0.135E+00 EST/TRUE= 0.994E+00 3 (NRM RESID)/(NRM E)= 0.296E-14 RCOND(EST)= 0.545E-01 EST/TRUE= 0.101E+01 4 (NRM RESID)/(NRM E)= 0.202E-13 RCOND(EST)= 0.527E-02 EST/TRUE= 0.772E+00 5 (NRM RESID)/(NRM E)= 0.129E-13 RCOND(EST)= 0.820E-02 EST/TRUE= 0.125E+01 M = 1 N = 7 1 (NRM RESID)/(NRM E)= 0.149E-13 RCOND(EST)= 0.137E-01 EST/TRUE= 0.133E+01 2 (NRM RESID)/(NRM E)= 0.259E-14 RCOND(EST)= 0.348E-01 EST/TRUE= 0.831E+00 3 (NRM RESID)/(NRM E)= 0.453E-14 RCOND(EST)= 0.380E-01 EST/TRUE= 0.183E+01 4 (NRM RESID)/(NRM E)= 0.208E-14 RCOND(EST)= 0.441E-01 EST/TRUE= 0.103E+01 5 (NRM RESID)/(NRM E)= 0.104E-13 RCOND(EST)= 0.251E-01 EST/TRUE= 0.135E+01 M = 1 N = 8 1 (NRM RESID)/(NRM E)= 0.281E-14 RCOND(EST)= 0.721E-01 EST/TRUE= 0.841E+00 2 (NRM RESID)/(NRM E)= 0.215E-13 RCOND(EST)= 0.540E-01 EST/TRUE= 0.298E+01 3 (NRM RESID)/(NRM E)= 0.227E-14 RCOND(EST)= 0.159E+00 EST/TRUE= 0.119E+01 4 (NRM RESID)/(NRM E)= 0.130E-14 RCOND(EST)= 0.401E-01 EST/TRUE= 0.146E+01 5 (NRM RESID)/(NRM E)= 0.124E-13 RCOND(EST)= 0.635E-01 EST/TRUE= 0.137E+01 M = 2 N = 1 1 (NRM RESID)/(NRM E)= 0.160E-15 RCOND(EST)= 0.494E+00 EST/TRUE= 0.596E+00 2 (NRM RESID)/(NRM E)= 0.530E-15 RCOND(EST)= 0.402E+00 EST/TRUE= 0.548E+00 3 (NRM RESID)/(NRM E)= 0.151E-15 RCOND(EST)= 0.446E+00 EST/TRUE= 0.543E+00 4 (NRM RESID)/(NRM E)= 0.501E-15 RCOND(EST)= 0.113E+00 EST/TRUE= 0.506E+00 5 (NRM RESID)/(NRM E)= 0.110E-14 RCOND(EST)= 0.104E+00 EST/TRUE= 0.947E+00 M = 2 N = 2 1 (NRM RESID)/(NRM E)= 0.153E-14 RCOND(EST)= 0.195E-01 EST/TRUE= 0.748E+00 2 (NRM RESID)/(NRM E)= 0.977E-15 RCOND(EST)= 0.302E-01 EST/TRUE= 0.113E+01 3 (NRM RESID)/(NRM E)= 0.604E-15 RCOND(EST)= 0.766E-01 EST/TRUE= 0.876E+00 4 (NRM RESID)/(NRM E)= 0.918E-15 RCOND(EST)= 0.186E-01 EST/TRUE= 0.721E+00 5 (NRM RESID)/(NRM E)= 0.900E-15 RCOND(EST)= 0.702E-01 EST/TRUE= 0.727E+00 M = 2 N = 3 1 (NRM RESID)/(NRM E)= 0.149E-14 RCOND(EST)= 0.284E-01 EST/TRUE= 0.844E+00 2 (NRM RESID)/(NRM E)= 0.406E-14 RCOND(EST)= 0.198E-01 EST/TRUE= 0.763E+00 3 (NRM RESID)/(NRM E)= 0.693E-15 RCOND(EST)= 0.763E-01 EST/TRUE= 0.909E+00 4 (NRM RESID)/(NRM E)= 0.178E-14 RCOND(EST)= 0.207E-01 EST/TRUE= 0.149E+01 5 (NRM RESID)/(NRM E)= 0.174E-14 RCOND(EST)= 0.112E-01 EST/TRUE= 0.938E+00 M = 2 N = 4 1 (NRM RESID)/(NRM E)= 0.446E-14 RCOND(EST)= 0.209E-01 EST/TRUE= 0.620E+00 2 (NRM RESID)/(NRM E)= 0.282E-14 RCOND(EST)= 0.437E-01 EST/TRUE= 0.129E+01 3 (NRM RESID)/(NRM E)= 0.189E-13 RCOND(EST)= 0.596E-02 EST/TRUE= 0.481E+00 4 (NRM RESID)/(NRM E)= 0.648E-14 RCOND(EST)= 0.199E-01 EST/TRUE= 0.110E+01 5 (NRM RESID)/(NRM E)= 0.288E-14 RCOND(EST)= 0.171E-01 EST/TRUE= 0.412E+00 M = 2 N = 5 1 (NRM RESID)/(NRM E)= 0.235E-14 RCOND(EST)= 0.271E-01 EST/TRUE= 0.854E+00 2 (NRM RESID)/(NRM E)= 0.312E-14 RCOND(EST)= 0.153E-01 EST/TRUE= 0.107E+01 3 (NRM RESID)/(NRM E)= 0.134E-14 RCOND(EST)= 0.145E-01 EST/TRUE= 0.535E+00 4 (NRM RESID)/(NRM E)= 0.128E-14 RCOND(EST)= 0.499E-01 EST/TRUE= 0.849E+00 5 (NRM RESID)/(NRM E)= 0.229E-13 RCOND(EST)= 0.650E-02 EST/TRUE= 0.762E+00 M = 2 N = 6 1 (NRM RESID)/(NRM E)= 0.164E-14 RCOND(EST)= 0.361E-01 EST/TRUE= 0.862E+00 2 (NRM RESID)/(NRM E)= 0.592E-14 RCOND(EST)= 0.234E-01 EST/TRUE= 0.618E+00 3 (NRM RESID)/(NRM E)= 0.245E-13 RCOND(EST)= 0.347E-02 EST/TRUE= 0.986E+00 4 (NRM RESID)/(NRM E)= 0.392E-14 RCOND(EST)= 0.421E-01 EST/TRUE= 0.114E+01 5 (NRM RESID)/(NRM E)= 0.714E-14 RCOND(EST)= 0.219E-01 EST/TRUE= 0.174E+01 M = 2 N = 7 1 (NRM RESID)/(NRM E)= 0.374E-14 RCOND(EST)= 0.169E-01 EST/TRUE= 0.863E+00 2 (NRM RESID)/(NRM E)= 0.378E-14 RCOND(EST)= 0.279E-01 EST/TRUE= 0.828E+00 3 (NRM RESID)/(NRM E)= 0.381E-14 RCOND(EST)= 0.649E-01 EST/TRUE= 0.194E+01 4 (NRM RESID)/(NRM E)= 0.738E-14 RCOND(EST)= 0.580E-02 EST/TRUE= 0.126E+01 5 (NRM RESID)/(NRM E)= 0.184E-13 RCOND(EST)= 0.380E-02 EST/TRUE= 0.373E+00 M = 2 N = 8 1 (NRM RESID)/(NRM E)= 0.402E-14 RCOND(EST)= 0.241E-01 EST/TRUE= 0.809E+00 2 (NRM RESID)/(NRM E)= 0.209E-14 RCOND(EST)= 0.219E-01 EST/TRUE= 0.834E+00 3 (NRM RESID)/(NRM E)= 0.108E-13 RCOND(EST)= 0.208E-02 EST/TRUE= 0.721E+00 4 (NRM RESID)/(NRM E)= 0.222E-13 RCOND(EST)= 0.244E-02 EST/TRUE= 0.680E+00 5 (NRM RESID)/(NRM E)= 0.436E-14 RCOND(EST)= 0.274E-01 EST/TRUE= 0.129E+01 M = 3 N = 1 1 (NRM RESID)/(NRM E)= 0.223E-14 RCOND(EST)= 0.568E-01 EST/TRUE= 0.998E+00 2 (NRM RESID)/(NRM E)= 0.161E-15 RCOND(EST)= 0.200E+00 EST/TRUE= 0.532E+00 3 (NRM RESID)/(NRM E)= 0.140E-15 RCOND(EST)= 0.158E+00 EST/TRUE= 0.556E+00 4 (NRM RESID)/(NRM E)= 0.278E-15 RCOND(EST)= 0.631E-01 EST/TRUE= 0.663E+00 5 (NRM RESID)/(NRM E)= 0.533E-15 RCOND(EST)= 0.147E+00 EST/TRUE= 0.672E+00 M = 3 N = 2 1 (NRM RESID)/(NRM E)= 0.698E-15 RCOND(EST)= 0.316E-01 EST/TRUE= 0.596E+00 2 (NRM RESID)/(NRM E)= 0.151E-14 RCOND(EST)= 0.344E-01 EST/TRUE= 0.569E+00 3 (NRM RESID)/(NRM E)= 0.121E-14 RCOND(EST)= 0.453E-01 EST/TRUE= 0.403E+00 4 (NRM RESID)/(NRM E)= 0.685E-15 RCOND(EST)= 0.425E-01 EST/TRUE= 0.590E+00 5 (NRM RESID)/(NRM E)= 0.724E-15 RCOND(EST)= 0.507E-01 EST/TRUE= 0.725E+00 M = 3 N = 3 1 (NRM RESID)/(NRM E)= 0.227E-14 RCOND(EST)= 0.129E-01 EST/TRUE= 0.678E+00 2 (NRM RESID)/(NRM E)= 0.302E-14 RCOND(EST)= 0.150E-01 EST/TRUE= 0.759E+00 3 (NRM RESID)/(NRM E)= 0.266E-14 RCOND(EST)= 0.405E-02 EST/TRUE= 0.544E+00 4 (NRM RESID)/(NRM E)= 0.102E-14 RCOND(EST)= 0.475E-01 EST/TRUE= 0.694E+00 5 (NRM RESID)/(NRM E)= 0.283E-14 RCOND(EST)= 0.634E-02 EST/TRUE= 0.347E+00 M = 3 N = 4 1 (NRM RESID)/(NRM E)= 0.160E-14 RCOND(EST)= 0.432E-01 EST/TRUE= 0.110E+01 2 (NRM RESID)/(NRM E)= 0.239E-14 RCOND(EST)= 0.116E-01 EST/TRUE= 0.993E+00 3 (NRM RESID)/(NRM E)= 0.265E-14 RCOND(EST)= 0.653E-02 EST/TRUE= 0.421E+00 4 (NRM RESID)/(NRM E)= 0.420E-14 RCOND(EST)= 0.547E-01 EST/TRUE= 0.150E+01 5 (NRM RESID)/(NRM E)= 0.715E-14 RCOND(EST)= 0.787E-02 EST/TRUE= 0.873E+00 M = 3 N = 5 1 (NRM RESID)/(NRM E)= 0.967E-14 RCOND(EST)= 0.634E-02 EST/TRUE= 0.604E+00 2 (NRM RESID)/(NRM E)= 0.316E-14 RCOND(EST)= 0.981E-02 EST/TRUE= 0.539E+00 3 (NRM RESID)/(NRM E)= 0.399E-14 RCOND(EST)= 0.367E-02 EST/TRUE= 0.512E+00 4 (NRM RESID)/(NRM E)= 0.817E-14 RCOND(EST)= 0.832E-02 EST/TRUE= 0.431E+00 5 (NRM RESID)/(NRM E)= 0.621E-14 RCOND(EST)= 0.119E-01 EST/TRUE= 0.187E+01 M = 3 N = 6 1 (NRM RESID)/(NRM E)= 0.117E-13 RCOND(EST)= 0.301E-02 EST/TRUE= 0.790E+00 2 (NRM RESID)/(NRM E)= 0.142E-14 RCOND(EST)= 0.259E-01 EST/TRUE= 0.581E+00 3 (NRM RESID)/(NRM E)= 0.225E-14 RCOND(EST)= 0.486E-01 EST/TRUE= 0.112E+01 4 (NRM RESID)/(NRM E)= 0.701E-14 RCOND(EST)= 0.156E-01 EST/TRUE= 0.150E+01 5 (NRM RESID)/(NRM E)= 0.190E-14 RCOND(EST)= 0.501E-01 EST/TRUE= 0.922E+00 M = 3 N = 7 1 (NRM RESID)/(NRM E)= 0.605E-14 RCOND(EST)= 0.453E-02 EST/TRUE= 0.816E+00 2 (NRM RESID)/(NRM E)= 0.235E-14 RCOND(EST)= 0.192E-01 EST/TRUE= 0.103E+01 3 (NRM RESID)/(NRM E)= 0.108E-13 RCOND(EST)= 0.245E-02 EST/TRUE= 0.632E+00 4 (NRM RESID)/(NRM E)= 0.187E-13 RCOND(EST)= 0.139E-02 EST/TRUE= 0.639E+00 5 (NRM RESID)/(NRM E)= 0.161E-14 RCOND(EST)= 0.804E-02 EST/TRUE= 0.623E+00 M = 3 N = 8 1 (NRM RESID)/(NRM E)= 0.241E-14 RCOND(EST)= 0.821E-02 EST/TRUE= 0.514E+00 2 (NRM RESID)/(NRM E)= 0.156E-13 RCOND(EST)= 0.314E-02 EST/TRUE= 0.795E+00 3 (NRM RESID)/(NRM E)= 0.613E-14 RCOND(EST)= 0.277E-02 EST/TRUE= 0.550E+00 4 (NRM RESID)/(NRM E)= 0.132E-13 RCOND(EST)= 0.216E-02 EST/TRUE= 0.376E+00 5 (NRM RESID)/(NRM E)= 0.311E-14 RCOND(EST)= 0.183E-01 EST/TRUE= 0.110E+01 M = 4 N = 1 1 (NRM RESID)/(NRM E)= 0.645E-15 RCOND(EST)= 0.385E-01 EST/TRUE= 0.474E+00 2 (NRM RESID)/(NRM E)= 0.311E-14 RCOND(EST)= 0.111E-01 EST/TRUE= 0.126E+01 3 (NRM RESID)/(NRM E)= 0.105E-14 RCOND(EST)= 0.815E-01 EST/TRUE= 0.632E+00 4 (NRM RESID)/(NRM E)= 0.769E-15 RCOND(EST)= 0.131E+00 EST/TRUE= 0.808E+00 5 (NRM RESID)/(NRM E)= 0.138E-13 RCOND(EST)= 0.391E-02 EST/TRUE= 0.682E+00 M = 4 N = 2 1 (NRM RESID)/(NRM E)= 0.393E-13 RCOND(EST)= 0.521E-03 EST/TRUE= 0.349E+00 2 (NRM RESID)/(NRM E)= 0.896E-15 RCOND(EST)= 0.461E-01 EST/TRUE= 0.483E+00 3 (NRM RESID)/(NRM E)= 0.769E-15 RCOND(EST)= 0.443E-01 EST/TRUE= 0.515E+00 4 (NRM RESID)/(NRM E)= 0.443E-15 RCOND(EST)= 0.460E-01 EST/TRUE= 0.643E+00 5 (NRM RESID)/(NRM E)= 0.194E-13 RCOND(EST)= 0.119E-02 EST/TRUE= 0.430E+00 M = 4 N = 3 1 (NRM RESID)/(NRM E)= 0.668E-14 RCOND(EST)= 0.127E-02 EST/TRUE= 0.105E+01 2 (NRM RESID)/(NRM E)= 0.103E-13 RCOND(EST)= 0.129E-02 EST/TRUE= 0.288E+00 3 (NRM RESID)/(NRM E)= 0.113E-14 RCOND(EST)= 0.239E-01 EST/TRUE= 0.406E+00 4 (NRM RESID)/(NRM E)= 0.784E-15 RCOND(EST)= 0.261E-01 EST/TRUE= 0.938E+00 5 (NRM RESID)/(NRM E)= 0.248E-14 RCOND(EST)= 0.116E-01 EST/TRUE= 0.430E+00 M = 4 N = 4 1 (NRM RESID)/(NRM E)= 0.812E-14 RCOND(EST)= 0.290E-02 EST/TRUE= 0.338E+00 2 (NRM RESID)/(NRM E)= 0.304E-14 RCOND(EST)= 0.295E-02 EST/TRUE= 0.770E+00 3 (NRM RESID)/(NRM E)= 0.578E-14 RCOND(EST)= 0.181E-01 EST/TRUE= 0.990E+00 4 (NRM RESID)/(NRM E)= 0.163E-14 RCOND(EST)= 0.249E-01 EST/TRUE= 0.482E+00 5 (NRM RESID)/(NRM E)= 0.621E-14 RCOND(EST)= 0.138E-02 EST/TRUE= 0.604E+00 M = 4 N = 5 1 (NRM RESID)/(NRM E)= 0.523E-14 RCOND(EST)= 0.141E-02 EST/TRUE= 0.328E+00 2 (NRM RESID)/(NRM E)= 0.206E-14 RCOND(EST)= 0.569E-02 EST/TRUE= 0.421E+00 3 (NRM RESID)/(NRM E)= 0.212E-14 RCOND(EST)= 0.230E-01 EST/TRUE= 0.842E+00 4 (NRM RESID)/(NRM E)= 0.194E-14 RCOND(EST)= 0.233E-01 EST/TRUE= 0.108E+01 5 (NRM RESID)/(NRM E)= 0.392E-14 RCOND(EST)= 0.117E-01 EST/TRUE= 0.114E+01 M = 4 N = 6 1 (NRM RESID)/(NRM E)= 0.146E-12 RCOND(EST)= 0.108E-03 EST/TRUE= 0.686E+00 2 (NRM RESID)/(NRM E)= 0.365E-14 RCOND(EST)= 0.144E-01 EST/TRUE= 0.100E+01 3 (NRM RESID)/(NRM E)= 0.564E-13 RCOND(EST)= 0.764E-04 EST/TRUE= 0.274E+00 4 (NRM RESID)/(NRM E)= 0.403E-14 RCOND(EST)= 0.111E-01 EST/TRUE= 0.111E+01 5 (NRM RESID)/(NRM E)= 0.496E-14 RCOND(EST)= 0.260E-01 EST/TRUE= 0.590E+00 M = 4 N = 7 1 (NRM RESID)/(NRM E)= 0.420E-13 RCOND(EST)= 0.988E-03 EST/TRUE= 0.496E+00 2 (NRM RESID)/(NRM E)= 0.134E-13 RCOND(EST)= 0.220E-02 EST/TRUE= 0.102E+01 3 (NRM RESID)/(NRM E)= 0.550E-14 RCOND(EST)= 0.343E-02 EST/TRUE= 0.564E+00 4 (NRM RESID)/(NRM E)= 0.122E-13 RCOND(EST)= 0.141E-02 EST/TRUE= 0.327E+00 5 (NRM RESID)/(NRM E)= 0.618E-14 RCOND(EST)= 0.710E-02 EST/TRUE= 0.875E+00 M = 4 N = 8 1 (NRM RESID)/(NRM E)= 0.500E-13 RCOND(EST)= 0.164E-02 EST/TRUE= 0.876E+00 2 (NRM RESID)/(NRM E)= 0.569E-14 RCOND(EST)= 0.298E-02 EST/TRUE= 0.607E+00 3 (NRM RESID)/(NRM E)= 0.474E-13 RCOND(EST)= 0.266E-03 EST/TRUE= 0.625E+00 4 (NRM RESID)/(NRM E)= 0.520E-12 RCOND(EST)= 0.185E-03 EST/TRUE= 0.158E+01 5 (NRM RESID)/(NRM E)= 0.364E-13 RCOND(EST)= 0.541E-03 EST/TRUE= 0.599E+00 M = 5 N = 1 1 (NRM RESID)/(NRM E)= 0.133E-14 RCOND(EST)= 0.769E-01 EST/TRUE= 0.996E+00 2 (NRM RESID)/(NRM E)= 0.569E-15 RCOND(EST)= 0.186E+00 EST/TRUE= 0.635E+00 3 (NRM RESID)/(NRM E)= 0.668E-15 RCOND(EST)= 0.616E-01 EST/TRUE= 0.663E+00 4 (NRM RESID)/(NRM E)= 0.137E-14 RCOND(EST)= 0.372E-01 EST/TRUE= 0.634E+00 5 (NRM RESID)/(NRM E)= 0.382E-15 RCOND(EST)= 0.153E+00 EST/TRUE= 0.561E+00 M = 5 N = 2 1 (NRM RESID)/(NRM E)= 0.123E-14 RCOND(EST)= 0.247E-02 EST/TRUE= 0.167E+01 2 (NRM RESID)/(NRM E)= 0.482E-14 RCOND(EST)= 0.125E-01 EST/TRUE= 0.522E+00 3 (NRM RESID)/(NRM E)= 0.657E-14 RCOND(EST)= 0.414E-02 EST/TRUE= 0.557E+00 4 (NRM RESID)/(NRM E)= 0.204E-14 RCOND(EST)= 0.587E-02 EST/TRUE= 0.619E+00 5 (NRM RESID)/(NRM E)= 0.523E-14 RCOND(EST)= 0.690E-02 EST/TRUE= 0.308E+00 M = 5 N = 3 1 (NRM RESID)/(NRM E)= 0.422E-14 RCOND(EST)= 0.469E-02 EST/TRUE= 0.563E+00 2 (NRM RESID)/(NRM E)= 0.114E-13 RCOND(EST)= 0.473E-03 EST/TRUE= 0.820E+00 3 (NRM RESID)/(NRM E)= 0.578E-14 RCOND(EST)= 0.452E-02 EST/TRUE= 0.409E+00 4 (NRM RESID)/(NRM E)= 0.352E-14 RCOND(EST)= 0.131E-01 EST/TRUE= 0.619E+00 5 (NRM RESID)/(NRM E)= 0.242E-13 RCOND(EST)= 0.111E-02 EST/TRUE= 0.949E+00 M = 5 N = 4 1 (NRM RESID)/(NRM E)= 0.283E-14 RCOND(EST)= 0.122E-01 EST/TRUE= 0.806E+00 2 (NRM RESID)/(NRM E)= 0.280E-14 RCOND(EST)= 0.578E-02 EST/TRUE= 0.921E+00 3 (NRM RESID)/(NRM E)= 0.634E-14 RCOND(EST)= 0.417E-02 EST/TRUE= 0.554E+00 4 (NRM RESID)/(NRM E)= 0.445E-12 RCOND(EST)= 0.605E-04 EST/TRUE= 0.582E+00 5 (NRM RESID)/(NRM E)= 0.125E-13 RCOND(EST)= 0.263E-02 EST/TRUE= 0.643E+00 M = 5 N = 5 1 (NRM RESID)/(NRM E)= 0.416E-14 RCOND(EST)= 0.651E-02 EST/TRUE= 0.561E+00 2 (NRM RESID)/(NRM E)= 0.359E-14 RCOND(EST)= 0.167E-01 EST/TRUE= 0.760E+00 3 (NRM RESID)/(NRM E)= 0.102E-13 RCOND(EST)= 0.739E-02 EST/TRUE= 0.492E+00 4 (NRM RESID)/(NRM E)= 0.978E-14 RCOND(EST)= 0.978E-02 EST/TRUE= 0.788E+00 5 (NRM RESID)/(NRM E)= 0.569E-14 RCOND(EST)= 0.141E-01 EST/TRUE= 0.110E+01 M = 5 N = 6 1 (NRM RESID)/(NRM E)= 0.298E-14 RCOND(EST)= 0.736E-02 EST/TRUE= 0.602E+00 2 (NRM RESID)/(NRM E)= 0.307E-14 RCOND(EST)= 0.185E-02 EST/TRUE= 0.306E+00 3 (NRM RESID)/(NRM E)= 0.293E-14 RCOND(EST)= 0.413E-02 EST/TRUE= 0.327E+00 4 (NRM RESID)/(NRM E)= 0.294E-13 RCOND(EST)= 0.890E-03 EST/TRUE= 0.102E+01 5 (NRM RESID)/(NRM E)= 0.552E-14 RCOND(EST)= 0.433E-02 EST/TRUE= 0.480E+00 M = 5 N = 7 1 (NRM RESID)/(NRM E)= 0.144E-13 RCOND(EST)= 0.933E-03 EST/TRUE= 0.519E+00 2 (NRM RESID)/(NRM E)= 0.681E-14 RCOND(EST)= 0.809E-03 EST/TRUE= 0.131E+01 3 (NRM RESID)/(NRM E)= 0.470E-13 RCOND(EST)= 0.938E-03 EST/TRUE= 0.737E+00 4 (NRM RESID)/(NRM E)= 0.242E-13 RCOND(EST)= 0.299E-02 EST/TRUE= 0.489E+00 5 (NRM RESID)/(NRM E)= 0.128E-13 RCOND(EST)= 0.809E-03 EST/TRUE= 0.124E+01 M = 5 N = 8 1 (NRM RESID)/(NRM E)= 0.111E-13 RCOND(EST)= 0.235E-02 EST/TRUE= 0.387E+00 2 (NRM RESID)/(NRM E)= 0.714E-14 RCOND(EST)= 0.359E-02 EST/TRUE= 0.583E+00 3 (NRM RESID)/(NRM E)= 0.371E-13 RCOND(EST)= 0.151E-02 EST/TRUE= 0.681E+00 4 (NRM RESID)/(NRM E)= 0.418E-13 RCOND(EST)= 0.835E-03 EST/TRUE= 0.360E+00 5 (NRM RESID)/(NRM E)= 0.831E-14 RCOND(EST)= 0.138E-01 EST/TRUE= 0.556E+00 M = 6 N = 1 1 (NRM RESID)/(NRM E)= 0.855E-15 RCOND(EST)= 0.406E-01 EST/TRUE= 0.623E+00 2 (NRM RESID)/(NRM E)= 0.314E-14 RCOND(EST)= 0.175E-01 EST/TRUE= 0.786E+00 3 (NRM RESID)/(NRM E)= 0.881E-15 RCOND(EST)= 0.610E-01 EST/TRUE= 0.521E+00 4 (NRM RESID)/(NRM E)= 0.191E-13 RCOND(EST)= 0.380E-02 EST/TRUE= 0.942E+00 5 (NRM RESID)/(NRM E)= 0.786E-14 RCOND(EST)= 0.101E-01 EST/TRUE= 0.599E+00 M = 6 N = 2 1 (NRM RESID)/(NRM E)= 0.910E-14 RCOND(EST)= 0.227E-02 EST/TRUE= 0.510E+00 2 (NRM RESID)/(NRM E)= 0.145E-14 RCOND(EST)= 0.185E-01 EST/TRUE= 0.380E+00 3 (NRM RESID)/(NRM E)= 0.273E-14 RCOND(EST)= 0.210E-02 EST/TRUE= 0.426E+00 4 (NRM RESID)/(NRM E)= 0.162E-14 RCOND(EST)= 0.460E-02 EST/TRUE= 0.490E+00 5 (NRM RESID)/(NRM E)= 0.217E-13 RCOND(EST)= 0.107E-02 EST/TRUE= 0.304E+00 M = 6 N = 3 1 (NRM RESID)/(NRM E)= 0.144E-13 RCOND(EST)= 0.101E-02 EST/TRUE= 0.402E+00 2 (NRM RESID)/(NRM E)= 0.285E-14 RCOND(EST)= 0.986E-02 EST/TRUE= 0.626E+00 3 (NRM RESID)/(NRM E)= 0.159E-14 RCOND(EST)= 0.540E-02 EST/TRUE= 0.347E+00 4 (NRM RESID)/(NRM E)= 0.397E-13 RCOND(EST)= 0.861E-03 EST/TRUE= 0.359E+00 5 (NRM RESID)/(NRM E)= 0.812E-14 RCOND(EST)= 0.127E-01 EST/TRUE= 0.567E+00 M = 6 N = 4 1 (NRM RESID)/(NRM E)= 0.295E-13 RCOND(EST)= 0.303E-03 EST/TRUE= 0.532E+00 2 (NRM RESID)/(NRM E)= 0.148E-13 RCOND(EST)= 0.320E-02 EST/TRUE= 0.454E+00 3 (NRM RESID)/(NRM E)= 0.803E-14 RCOND(EST)= 0.207E-02 EST/TRUE= 0.540E+00 4 (NRM RESID)/(NRM E)= 0.224E-14 RCOND(EST)= 0.135E-01 EST/TRUE= 0.584E+00 5 (NRM RESID)/(NRM E)= 0.659E-14 RCOND(EST)= 0.154E-02 EST/TRUE= 0.812E+00 M = 6 N = 5 1 (NRM RESID)/(NRM E)= 0.116E-13 RCOND(EST)= 0.374E-02 EST/TRUE= 0.994E+00 2 (NRM RESID)/(NRM E)= 0.105E-13 RCOND(EST)= 0.308E-02 EST/TRUE= 0.544E+00 3 (NRM RESID)/(NRM E)= 0.890E-13 RCOND(EST)= 0.246E-03 EST/TRUE= 0.426E+00 4 (NRM RESID)/(NRM E)= 0.637E-14 RCOND(EST)= 0.105E-01 EST/TRUE= 0.784E+00 5 (NRM RESID)/(NRM E)= 0.203E-13 RCOND(EST)= 0.156E-02 EST/TRUE= 0.864E+00 M = 6 N = 6 1 (NRM RESID)/(NRM E)= 0.602E-14 RCOND(EST)= 0.99