51 lines
1.2 KiB
Fortran
51 lines
1.2 KiB
Fortran
SUBROUTINE cntab2(nn,ni,nj,h,hx,hy,hygx,hxgy,uygx,uxgy,uxy)
|
|
INTEGER ni,nj,nn(ni,nj),MAXI,MAXJ
|
|
REAL h,hx,hxgy,hy,hygx,uxgy,uxy,uygx,TINY
|
|
PARAMETER (MAXI=100,MAXJ=100,TINY=1.e-30)
|
|
INTEGER i,j
|
|
REAL p,sum,sumi(MAXI),sumj(MAXJ)
|
|
sum=0
|
|
do 12 i=1,ni
|
|
sumi(i)=0.0
|
|
do 11 j=1,nj
|
|
sumi(i)=sumi(i)+nn(i,j)
|
|
sum=sum+nn(i,j)
|
|
11 continue
|
|
12 continue
|
|
do 14 j=1,nj
|
|
sumj(j)=0.
|
|
do 13 i=1,ni
|
|
sumj(j)=sumj(j)+nn(i,j)
|
|
13 continue
|
|
14 continue
|
|
hx=0.
|
|
do 15 i=1,ni
|
|
if(sumi(i).ne.0.)then
|
|
p=sumi(i)/sum
|
|
hx=hx-p*log(p)
|
|
endif
|
|
15 continue
|
|
hy=0.
|
|
do 16 j=1,nj
|
|
if(sumj(j).ne.0.)then
|
|
p=sumj(j)/sum
|
|
hy=hy-p*log(p)
|
|
endif
|
|
16 continue
|
|
h=0.
|
|
do 18 i=1,ni
|
|
do 17 j=1,nj
|
|
if(nn(i,j).ne.0)then
|
|
p=nn(i,j)/sum
|
|
h=h-p*log(p)
|
|
endif
|
|
17 continue
|
|
18 continue
|
|
hygx=h-hx
|
|
hxgy=h-hy
|
|
uygx=(hy-hygx)/(hy+TINY)
|
|
uxgy=(hx-hxgy)/(hx+TINY)
|
|
uxy=2.*(hx+hy-h)/(hx+hy+TINY)
|
|
return
|
|
END
|