	PROGRAM DECOMPOSE
	IMPLICIT INTEGER (A-Z)
	DOUBLE PRECISION PROX(30,30), SYM(30,30), SKEWSYM(30,30),MAG(30,30), DIR(30,30)

C
C################################################################################
C                       DECOMPOSING PROGRAM
C   DECOMPOSES A PROXIMITY MATRIX INTO ITS SYMETRIC AND SKEW SYMETRIC COMPONENTS.
C   THE SKEW-SYM MATRIX IS DECOMPOSED INTO ITS SIGN AND MAGNITUDE COMPONETS.
C                      P = Q + R = Q + S*M^T
C################################################################################
C
C
	OPEN (1,FILE='PROX.DAT')
	READ (1,*) N                         ! READ N FROM FILE
	READ (1,*) ((PROX(I,J), J=1,N),I=1,N) ! READ PROXIMITY MATRIX
	DO I=1,N
		DO J=1,N
			SYM(I,J)=(PROX(I,J)+PROX(J,I))/2
			SKEWSYM(I,J)=(PROX(I,J)-PROX(J,I))/2
			MAG(I,J)=ABS(SKEWSYM(I,J))
			IF (SKEWSYM(I,J).GT.0) DIR(I,J)=1
			IF (SKEWSYM(I,J).LT.0) DIR(I,J)=-1
			IF (SKEWSYM(I,J).EQ.0) DIR(I,J)=0
		END DO
	END DO
	OPEN (2,FILE='DECOMP.DAT')
	WRITE(2,*) N
	DO I=1,N
		WRITE(2,10) (SYM(I,J),J=1,N)
	END DO
	WRITE(2,*) N
	DO I=1,N
		WRITE(2,10) (SKEWSYM(I,J),J=1,N)
	END DO
	OPEN (3, FILE='SYM.DAT')
	WRITE(3,*) N
	DO I=1,N
		WRITE(3,10) (MAG(I,J),J=1,N)
	END DO
	OPEN(4, FILE='ASYM.DAT')
	WRITE(4,*) N
	DO I=1,N
		WRITE(4,10) (DIR(I,J),J=1,N)
	END DO
10	FORMAT(30F9.3)
	END



