Rev 8399 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed
c Part of R package KernSmoothc Copyright (C) 1995 M. P. Wandcc Unlimited use and distribution (see LICENCE).cccccccccc FORTRAN subroutine sdiag.f ccccccccccc For computing the diagonal entries of the "binned"c smoother matrix.c Last changed: 01/02/95subroutine sdiag(xcnts,delta,hdisc,Lvec,indic,+ midpts,M,iQ,fkap,ipp,ippp,ss,Smat,+ work,det,ipvt,Sdg)integer i,j,k,Lvec(*),M,iQ,mid,indic(*),midpts(*),+ ipvt(*),info,ii,ipp,ippp,indssdouble precision xcnts(*),fkap(*),hdisc(*),+ delta,ss(M,ippp),Smat(ipp,ipp),Sdg(*),+ fac,work(*),det(2)c Obtain kernel weightsmid = Lvec(1) + 1do i=1,(iQ-1)midpts(i) = midfkap(mid) = 1.0d0do j=1,Lvec(i)fkap(mid+j) = exp(-(delta*j/hdisc(i))**2/2)fkap(mid-j) = fkap(mid+j)end domid = mid + Lvec(i) + Lvec(i+1) + 1end domidpts(iQ) = midfkap(mid) = 1.0d0do j=1,Lvec(iQ)fkap(mid+j) = exp(-(delta*j/hdisc(iQ))**2/2)fkap(mid-j) = fkap(mid+j)end doc Combine kernel weights and grid countsdo k = 1,Mif (xcnts(k).ne.0) thendo i = 1,iQdo j = max(1,k-Lvec(i)),min(M,k+Lvec(i))if (indic(j).eq.i) thenfac = 1.0d0ss(j,1) = ss(j,1) + xcnts(k)*fkap(k-j+midpts(i))do ii = 2,ipppfac = fac*delta*(k-j)ss(j,ii) = ss(j,ii)+ + xcnts(k)*fkap(k-j+midpts(i))*facend doendifend doend doendifend dodo k = 1,Mdo i = 1,ippdo j = 1,ippindss = i + j - 1Smat(i,j) = ss(k,indss)end doend docall dgefa(Smat,ipp,ipp,ipvt,info)call dgedi(Smat,ipp,ipp,ipvt,det,work,01)Sdg(k) = Smat(1,1)end doreturnendcccccccccc End of sdiag.f cccccccccc