C THIS PROGRAM IS A DRIVER FOR THE SUBROUTINE L1 C WHICH SOLVES AN OVERDETERMINED SYSTEM OF LINEAR EQUATIONS C IN THE L1 NORM, USING A DUAL SIMPLEX METHOD. C THE OVERDETERMINED SYSTEM HAS THE FORM CA=F C C IS A GIVEN REAL N BY M MATRIX OF RANK K, K.LE.M.LE.N C F IS A GIVEN REAL N-VECTOR. C A IS THE SOLUTION M-VECTOR. C C C DIMENSION AA(252,27) DIMENSION FAY(8,250),EF(250) DIMENSION CT(25,250),F(250),R(250),A(25),BINV(25,25) DIMENSION P(350),IC(250),IB(250),Y(250),TH(250),IR(25) DIMENSION U(25),V(25),W(25),GINV(25,25),VB(25) DIMENSION BV(25),IBOUND(250),ICBAS(25),IRBAS(25),ZC(250) DIMENSION F1(50),F2(50),BA(6,15) INTEGER S(250) C 101 FORMAT(10H1EXAMPLE ,I3,8H SIZE ,I3,8H BY ,I3) 102 FORMAT(40H0 R.H.S. OF THE SYSTEM ) 103 FORMAT(40H0TRANSPOSE OF COEFFICIENT MATRIX ) 104 FORMAT(17H0EXECUTION TIME =,F12.5,13HSECONDS ) 105 FORMAT(9H0L1 NORM=,F10.5,6H,RANK=,I4,6H,ITER=,I4,5H,IND=,I4) 106 FORMAT(40H0THE ANSWER : A(I) OR X(I) ) 107 FORMAT(40H0RESIDUALS R(J) OR E(J) ) 108 FORMAT(40H0IC(I) ) 109 FORMAT(40H0IR(I) ) 110 FORMAT(1H ,10F12.5) 111 FORMAT(1H ,20I4) 115 FORMAT(9H0L1 NORM=,F10.5,6H,RANK=,F3.0,6H,ITER=,F3.0,5H,IND=,F2.0) 120 FORMAT(1H ,8F15.5) 125 FORMAT(5F10.6) 126 FORMAT(6F10.6) C CALL SUNDER PREC=1.E-6 EPS=1.E-4 TOLER=1.0E-4 MM=25 MM2=MM+2 MMM=(MM*(MM+3))/2 NN=250 NN2=NN+2 IEXMPL=0 1 IEXMPL=IEXMPL+1 GO TO (2,4,5,6,7,8,9,13,17,19,20,21,22,26,27,28,29,32,35,100), *IEXMPL C EXAMPLE 1. 2 N=201 DX=0.02 DO 3 I=1,N X1=DX*FLOAT(I-1) X2=X1*X1 X3=X2*X1 X4=X2*X2 X5=X3*X2 X6=X3*X3 X7=X3*X4 FAY(1,I)=1. FAY(2,I)=X1 FAY(3,I)=X2 FAY(4,I)=X3 FAY(5,I)=X4 FAY(6,I)=X5 FAY(7,I)=X6 3 EF(I)= (EXP(-X1))*SIN(X1) M=1 GO TO 10 4 M=2 GO TO 10 5 M=3 GO TO 10 6 M=4 GO TO 10 7 M=5 GO TO 10 8 M=6 GO TO 10 9 M=7 10 DO 12 J=1,N F(J)=EF(J) DO 11 I=1,M 11 CT(I,J)=FAY(I,J) 12 CONTINUE GO TO 90 C EXAMPLE 2. 13 N=100 N2=50 M=6 READ(1,125)(F1(I), I=1,N2) READ(1,125)(F2(I), I=1,N2) DO 14 J=1,N2 F(J)=F1(J) JN2=J+N2 14 F(JN2)=F2(J) DO 16 J=1,10 D=0.1*FLOAT(J) DD=D*D DO 15 I=1,10 E=0.1*FLOAT(I) EE=E*E K=10*(J-1)+I CT(1,K)=1.0 CT(2,K)=E CT(3,K)=D CT(4,K)=E*D CT(5,K)=EE CT(6,K)=DD 15 CONTINUE 16 CONTINUE GO TO 90 C EXAMPLE 3. 17 N=51 M=8 DO 18 I=1,N D=0.02*FLOAT(I-1) DD=D*D DDD=D*DD E1=D-0.1 E2=D-0.2 E3=D-0.4 E4=D-0.7 E13=E1*E1*E1 E23=E2*E2*E2 E33=E3*E3*E3 E43=E4*E4*E4 CT(1,I)=1.0 CT(2,I)=D CT(3,I)=DD CT(4,I)=DDD IF(E1.GT.0.0) CT(5,I)=E13 IF(E1.LE.0.0) CT(5,I)=0. IF(E2.GT.0.0) CT(6,I)=E23 IF(E2.LE.0.0) CT(6,I)=0. IF(E3.GT.0.0) CT(7,I)=E33 IF(E3.LE.0.0) CT(7,I)=0. IF(E4.GT.0.0) CT(8,I)=E43 IF(E4.LE.0.0) CT(8,I)=0. 18 F(I)= SQRT(D) GO TO 90 C EXAMPLE 4. 19 M=6 PI=4.0*ATAN(1.0) X01=PI/2.0 X02=X01*X01 X03=X02*X01 X04=X02*X02 N=23 GO TO 23 20 N=53 GO TO 23 21 N=103 GO TO 23 22 N=203 23 N2=N-2 N3=N-3 DX=PI/FLOAT(N3) DO 24 I=1,N2 X1=-X01+DX*FLOAT(I-1) X2=X1*X1 X3=X2*X1 X4=X2*X2 X5=X3*X2 CT(1,I)=1.0 CT(2,I)=X1 CT(3,I)=X2 CT(4,I)=X3 CT(5,I)=X4 CT(6,I)=X5 24 F(I)= SIN(X1) G=-1.0 DO 25 I=1,2 IF(I.EQ.2) G=1.0 J=N2+I CT(1,J)=0.0 CT(2,J)=1000.0 CT(3,J)=2000.0*G*X01 CT(4,J)=3000.0*X02 CT(5,J)=4000.0*G*X03 CT(6,J)=5000.0*X04 25 F(J)=0.0 GO TO 90 C EXAMPLE 5. 26 M=11 D=20.0 DX=1.0/D N=21 GO TO 30 27 D=50.0 DX=1.0/D N=51 GO TO 30 28 D=100.0 DX=1.0/D N=101 GO TO 30 29 D=200.0 DX=1.0/D N=201 30 DO 31 I=1,N X1=DX*FLOAT(I-1) X2=X1+X1 X3=X1+X2 X4=X2+X2 X5=X2+X3 CT(1,I)=1.0 CT(2,I)= SIN(X1) CT(3,I)= COS(X1) CT(4,I)= SIN(X2) CT(5,I)= COS(X2) CT(6,I)= SIN(X3) CT(7,I)= COS(X3) CT(8,I)= SIN(X4) CT(9,I)= COS(X4) CT(10,I)= SIN(X5) CT(11,I)= COS(X5) G= EXP(X1) G1= EXP(0.5) F(I)=G1 IF(G.LT.G1) F(I)=G 31 CONTINUE GO TO 90 C EXAMPLE 6. 32 M=5 M1=M+1 N=15 DO 34 J=1,N READ(1,126)(BA(I,J),I=1,M1) DO 33 I=1,M 33 CT(I,J)=BA(I,J) F(J)=BA(M1,J) 34 CONTINUE GO TO 90 C EXAMPLE 7. 35 M=5 N=51 DX=0.02 DO 36 I=1,N X1=DX*FLOAT(I-1) X2=X1*X1 X3=X2*X1 X4=X2*X2 CT(1,I)=1.0 CT(2,I)=X1 CT(3,I)=X2 CT(4,I)=X3 CT(5,I)=X4 GX=0.0 IF(X1.GT.0.93) GX=5.0 F(I)=X1*(1.0+X1*(1.0+X1*(1.0+X1)))+GX 36 CONTINUE C 90 WRITE (3,101)IEXMPL,N,M C WRITE(3,102) C WRITE(3,110)(F(J),J=1,N) C WRITE(3,103) C DO 93 I=1,M C 93 WRITE(3,110)(CT(I,J),J=1,N) CALL SETCLK CALL L1(M,N,MM,MMM,NN,CT,F,PREC,EPS,IC,IR,IB, *U,V,W,Y,TH,P,GINV,VB,IRANK,ITER,R,A,Z,IND) CALL RDCLK(TX) WRITE(3,108) WRITE(3,111)(IC(I),I=1,M) WRITE(3,109) WRITE(3,111)(IR(I),I=1,M) WRITE(3,107) WRITE(3,110)(R(J),J=1,N) WRITE(3,106) WRITE(3,120)(A(I),I=1,M) WRITE(3,105)Z,IRANK,ITER,IND WRITE(3,104)TX GO TO 1 100 STOP END SUBROUTINE PSLV(ID,K,MM,MMM,P,B,X) PSLV0010 C THIS SUBROUTINE SOLVES THE SQUARE NON-SINGULAR SYSTEM C OF LINEAR EQUATIONS C P*X=B, C OR THE SQUARE NON-SINGULAR SYSTEM OF LINEAR EQUATIONS C P(TRANSPOSE)*X=B, C WHERE P IS AN UPPER TRIANGULAR MATRIX, B IS THE RIGHT HAND C SIDE VECTOR AND X IS THE SOLUTION VECTOR. C THE INPUT DATA TO THE SUBROUTINE. C ID AN INTEGER INDICATOR SPECIFIED BY THE USER. C IF ID=1 THE EQUATION P*X=B IS SOLVED. C IF ID= ANY INTEGER OTHER THAN 1, THE EQUATION C P(TRANSPOSE)*X=B IS SOLVED. C K AN INTEGER = THE NUMBER OF EQUATIONS OF THE GIVEN C SYSTEM. C MM AN INTEGER GREATER THAN OR EQUAL TO K. C MMM AN INTEGER = (MM*(MM+3))/2 C P AN MMM-VECTOR. ITS FIRST (K+1) ELEMENTS CONTAIN THE C FIRST K ELEMENTS OF ROW 1 OF THE UPPER TRIANGULAR C MATRIX PLUS AN EXTRA LOCATION TO THE RIGHT. ITS C NEXT K ELEMENTS CONTAIN THE (K-1) ELEMENTS OF ROW 2 C OF THE UPPER TRIANGULAR MATRIX PLUS AN EXTRA C LOCATION TO THE RIGHT, ..., ETC. C B AN MM-VECTOR. ITS FIRST K ELEMENTS CONTAIN THE C R.H.S. VECTOR OF THE GIVEN SYSTEM. C THE OUTPUT OF THE SUBROUTINE. C X AN MM-VECTOR. ON EXIT, ITS FIRST K ELEMENTS CONTAIN C THE SOLUTION TO THE GIVEN SYSTEM. DOUBLE PRECISION S,SA,SB DIMENSION P(MMM),B(MM),X(MM) IF(ID.NE.1) GO TO 3 C SOLUTION OF THE UPPER TRIANGULAR SYSTEM. L=(K-1)+(K*(K+1))/2 X(K)=B(K)/P(L) IF(K.EQ.1) RETURN KD=3 KM1=K-1 DO 2 I=1,KM1 J=K-I L=L-KD KD=KD+1 S=B(J) LL=L JJ=J DO 1 KK=1,I LL=LL+1 SA=P(LL) JJ=JJ+1 SB=X(JJ) 1 S=S-SA*SB X(J)=S/P(L) 2 CONTINUE RETURN C SOLUTION OF THE LOWER TRIANGULAR SYSTEM. 3 X(1)=B(1)/P(1) IF(K.EQ.1) RETURN L=1 KD=K+1 DO 5 I=2,K L=L+KD KD=KD-1 S=B(I) KK=I KKM1=I-1 KKD=K DO 4 J=1,KKM1 SA=P(KK) SB=X(J) S=S-SA*SB KK=KK+KKD KKD=KKD-1 4 CONTINUE 5 X(I)=S/P(L) RETURN END SUBROUTINE L1(M,N,MM,MMM,NN,CT,F,PREC,EPS,IC,IR,IB, L1 0010 *UF,BP,XP,T,ALFA,P,GINV,VB,IRANK,ITER,R,A,Z,IND) C THIS SUBROUTINE SOLVES AN OVERDETERMINED SYSTEM OF C LINEAR EQUATIONS IN THE L1 NORM BY USING A DUAL SIMPLEX C ALGORITHM TO THE LINEAR PROGRAMMING FORMULATION OF THE C GIVEN PROBLEM. IN THIS ALGORITHM CERTAIN INTERMEDIATE C SIMPLEX ITERATIONS ARE SKIPPED. C FOR PURPOSE OF NUMERICAL STABILITY, THIS SUBROUTINE C USES A TRIANGULAR DECOMPOSITION TO THE BASIS MATRIX. C THE SYSTEM OF LINEAR EQUATIONS HAS THE FORM C C*A=F, C WHERE C IS A GIVEN REAL N BY M MATRIX OF RANK K.LE.M.LE.N C AND F IS A GIVEN REAL N-VECTOR. C THE PROBLEM TO BE SOLVED IS TO CALCULATE THE ELEMENTS C OF THE M-VECTOR A* WHICH GIVES THE MINIMUM NORM Z. C Z= ABS(R(1)) + ABS(R(2)) + ... + ABS(R(N)) , C WHERE R(I) IS THE ITH RESIDUAL AND IS GIVEN BY C R(I)=C(I,1)*A(1)+C(I,2)*A(2)+ ... +C(I,M)*A(M)-F(I). C SUBROUTINE L1 IS COMPLETELY SELF CONTAINED (CONSISTS C OF TWO SUBROUTINES L1 AND PSLV). C THE INPUT DATA TO THE SUBROUTINE. C M THE NUMBER OF COLUMNS OF MATRIX C. C N THE NUMBER OF ROWS OF MATRIX C. C MM AN INTEGER GREATER THAN OR EQUAL TO M. C MMM AN INTEGER = (MM*(MM+3))/2 . C NN AN INTEGER GREATER THAN OR EQUAL TO N. C CT A MATRIX OF DIMENSIONS MM BY NN. ON ENTRY, ITS FIRST C M ROWS AND FIRST N COLUMNS CONTAIN THE TRANSPOSE OF C MATRIX C IN THE GIVEN SYSTEM C*A=F. C F AN NN-VECTOR. ON ENTRY, ITS FIRST N ELEMENTS CONTAIN C THE R.H.S. OF THE GIVEN SYSTEM C*A=F. C PREC THE ROUND-OFF LEVEL OF THE COMPUTER. FOR THE IBM C 360/67 COMPUTER, PREC IS ABOUT 1.E-6 AND 1.E-16 FOR C SINGLE AND DOUBLE PRECISION RESPECTIVELY. C EPS A SPECIFIED TOLERANCE SUCH THAT A CALCULATED NUMBER C X IS CONSIDERED ZERO IF ABS(X)