www.pudn.com > Fortran.zip > JLPLQ.FOR, change:1994-06-10,size:1002b


 
	SUBROUTINE JLPLQ(A,B,C,X,M,N,MN,S,P,D,L,JS,IIS,JJS) 
	DIMENSION A(M,MN),B(M),C(MN),X(MN),P(M,M) 
	DIMENSION JS(M),D(M,MN),IIS(M),JJS(M) 
	DOUBLE PRECISION A,B,C,D,P,X,S,Z,DD 
	DO 10 I=1,M 
10	JS(I)=N+I 
15	L=1 
	DO 20 I=1,M 
	DO 20 J=1,M 
20	P(I,J)=A(I,JS(J)) 
	CALL BRINV(P,M,K,IIS,JJS) 
	IF (K.EQ.0) THEN 
	  L=0 
	  RETURN 
	END IF 
	CALL BRMUL(P,A,M,M,MN,D) 
	DO 30 I=1,MN 
30	X(I)=0.0 
	DO 50 I=1,M 
	  S=0.0 
	  DO 40 J=1,M 
40	  S=S+P(I,J)*B(J) 
	  X(JS(I))=S 
50	CONTINUE 
	K=0 
	DD=1.0D-35 
	DO 70 J=1,MN 
	    Z=0.0 
	    DO 60 I=1,M 
60	    Z=Z+C(JS(I))*D(I,J) 
	    Z=Z-C(J) 
	    IF (Z.GT.DD) THEN 
	      DD=Z 
	      K=J 
	    END IF 
70	CONTINUE 
	IF (K.EQ.0) THEN 
	  S=0.0 
	  DO 80 J=1,N 
80	  S=S+C(J)*X(J) 
	  RETURN 
	END IF 
	J=0 
	DD=1.0D+20 
	DO 90 I=1,M 
	  IF (D(I,K).GE.1.0D-20) THEN 
	    Y=X(JS(I))/D(I,K) 
	    IF (Y.LT.DD) THEN 
	      DD=Y 
	      J=I 
	    END IF 
	  END IF 
90	CONTINUE 
	IF (J.EQ.0) THEN 
	  L=0 
	  RETURN 
	END IF 
	JS(J)=K 
	GOTO 15 
	END