211 * (1) symmetric matrix w: decomposition, solution, inverse
225 DOUBLE PRECISION w(*),aux(n),b(*),x(*),v(*),sum,ratio
228 aux(i)=16.0d0*w((i*i+i)/2)
233 IF(w(ii)+aux(i).NE.aux(i))
THEN
243 w(kk+j)=w(kk+j)-w(kk+i)*ratio
254 entry dchslv(w,n,b, x)
255 WRITE(*,*)
'before copy'
259 WRITE(*,*)
'after copy'
269 WRITE(*,*)
'after forward'
280 WRITE(*,*)
'after backward'
291 sum=sum-w(j+(k*k-k)/2)*v(l+(m*m-m)/2)
310 DOUBLE PRECISION w(*),aux(n),sum,sumu,sums
315 IF(w((i*i+i)/2).LT.w((is*is+is)/2)) is=i
316 IF(w((i*i+i)/2).GT.w((ir*ir+ir)/2)) ir=i
322 IF(i.EQ.ir) sum=1.0d0
325 sum=sum-w(kk+i)*aux(k)
329 sumu=sumu+aux(i)*aux(i)
331 xlan=sngl(w((ir*ir+ir)/2)*dsqrt(sumu))
332 IF(xlan.NE.0.0) xlan=1.0/xlan
337 ELSE IF(i.GT.is)
THEN
338 sums=sums+w(is+(i*i-i)/2)**2
342 IF(w((is*is+is)/2).NE.0.0) xla1=sngl(dsqrt(sums)/w((is*is+is)/2))
345 IF(xla1.GT.0.0.AND.xlan.GT.0.0) cond=xla1/xlan
346 * estimated condition
351 * (2) symmetric band matrix: decomposition, solution, complete
352 * inverse and band part of the inverse
365 SUBROUTINE dbcdec(W,MP1,N, AUX) ! decomposition, bandwidth M
366 * m=mp1-1 n*m(m-1) dot operations
368 DOUBLE PRECISION w(mp1,n),v(mp1,n),b(n),x(n),aux(n),vs(*),rxw
374 IF(w(1,i)+aux(i).NE.aux(i))
THEN
379 DO j=1,min(mp1-1,n-i)
381 DO k=1,min(mp1-1,n-i)+1-j
382 w(k,i+j)=w(k,i+j)-w(k+j,i)*rxw
389 entry dbcslv(w,mp1,n,b, x)
390 * n*(2m-1) dot operations
395 DO j=1,min(mp1-1,n-i)
396 x(j+i)=x(j+i)-w(j+1,i)*x(i)
401 DO j=1,min(mp1-1,n-i)
402 rxw=rxw-w(j+1,i)*x(j+i)
408 entry dbciel(w,mp1,n, v)
409 * n*m*(m-1) dot operations
412 DO j=i,max(1,i-mp1+1),-1
413 DO k=j+1,min(n,j+mp1-1)
414 rxw=rxw-v(1+abs(i-k),min(i,k))*w(1+k-j,j)
422 entry dbcinb(w,mp1,n, vs)
423 * n*m*(m-1) dot operations
426 DO j=i,max(1,i-mp1+1),-1
427 DO k=j+1,min(n,j+mp1-1)
428 rxw=rxw-vs((max(i,k)*(max(i,k)-1))/2+min(i,k))*w(1+k-j,j)
433 c
DO j=max(1,i-mp1+1)-1,1,-1
434 c vs((i*i-i)/2+j)=0.0
439 entry dbcinv(w,mp1,n, vs)
440 * n*n/2*(m-1) dot operations
444 DO k=j+1,min(n,j+mp1-1)
445 rxw=rxw-vs((max(i,k)*(max(i,k)-1))/2+min(i,k))*w(1+k-j,j)
464 DOUBLE PRECISION w(mp1,n),b(n),err
473 IF(i+1-j.GT.0.AND.nj.LT.5)
THEN
475 rho=sngl(w(j,i+1-j)/(err*dsqrt(w(1,i+1-j))))
476 irho(nj)=ifix(100.0*abs(rho)+0.5)
477 IF(rho.LT.0.0) irho(nj)=-irho(nj)
480 WRITE(*,102) i,b(i),err,(irho(j),j=1,nj)
483 101 format(5x,
'i Param',7x,
'error',7x,
' c(i,i-1) c(i,i-2)'/)
484 102 format(1x,i5,2g12.4,1x,5i9)
485 103 format(33x,
'(correlation coefficients in percent)')
497 DOUBLE PRECISION w(mp1,n)
503 WRITE(*,102) i,(w(j,i),j=1,mp1)
506 101 format(5x,
'i Diag ')
507 102 format(1x,i5,6g12.4)
511 * (3) symmetric band matrix of band width m=1: decomposition,
512 * solution, complete, inverse and band part of the inverse
538 DOUBLE PRECISION w(2,n),v(2,n),b(n),x(n),aux(n),rxw
544 IF(w(1,i)+aux(i).NE.aux(i))
THEN
547 w(1,i+1)=w(1,i+1)-w(2,i)*rxw
554 IF(w(1,n)+aux(n).GT.aux(n))
THEN
561 entry db2slv(w,n,b, x)
562 * the equation w(original)*x=b is solved for x; input is b in vector x.
567 x(i+1)=x(i+1)-w(2,i)*x(i)
571 x(i)=x(i)*w(1,i)-w(2,i)*x(i+1)
576 * the band elements of the inverse of w(original) are calculated,
577 * and stored in v in the same order as in w.
578 * remaining elements of the inverse are not calculated.
580 v(2,n-1)=-v(1,n )*w(2,n-1)
582 v(1,i )= w(1,i )-v(2,i )*w(2,i )
583 v(2,i-1)=-v(1,i )*w(2,i-1)
585 v(1,2)= w(1,2)-v(2,2)*w(2,2)
586 v(2,1)=-v(1,2)*w(2,1)
587 v(1,1)= w(1,1)-v(2,1)*w(2,1)
591 * (4) symmetric band matrix of band width m=2: decomposition,
592 * solution, complete, inverse and band part of the inverse
615 SUBROUTINE db3dec(W,N, AUX) ! decomposition (M=2)
618 DOUBLE PRECISION w(3,n),v(3,n),b(n),x(n),aux(n),rxw
624 IF(w(1,i)+aux(i).NE.aux(i))
THEN
627 w(1,i+1)=w(1,i+1)-w(2,i)*rxw
628 w(2,i+1)=w(2,i+1)-w(3,i)*rxw
631 w(1,i+2)=w(1,i+2)-w(3,i)*rxw
639 IF(w(1,n-1)+aux(n-1).GT.aux(n-1))
THEN
640 w(1,n-1)=1.0d0/w(1,n-1)
641 rxw=w(2,n-1)*w(1,n-1)
642 w(1,n)=w(1,n)-w(2,n-1)*rxw
648 IF(w(1,n)+aux(n).GT.aux(n))
THEN
655 entry db3slv(w,n,b, x)
660 x(i+1)=x(i+1)-w(2,i)*x(i)
661 x(i+2)=x(i+2)-w(3,i)*x(i)
663 x(n)=x(n)-w(2,n-1)*x(n-1)
665 x(n-1)=x(n-1)*w(1,n-1)-w(2,n-1)*x(n)
667 x(i)=x(i)*w(1,i)-w(2,i)*x(i+1)-w(3,i)*x(i+2)
672 * the band elements of the inverse of w(original) are calculated,
673 * and stored in v in the same order as in w.
674 * remaining elements of the inverse are not calculated.
676 v(2,n-1)=-v(1,n )*w(2,n-1)
677 v(3,n-2)=-v(2,n-1)*w(2,n-2)-v(1,n )*w(3,n-2)
680 v(2,n-2)=-v(1,n-1)*w(2,n-2)-v(2,n-1)*w(3,n-2)
681 v(3,n-3)=-v(2,n-2)*w(2,n-3)-v(1,n-1)*w(3,n-3)
684 + -v(2,i )*w(2,i )-v(3,i)*w(3,i )
685 v(2,i-1)=-v(1,i )*w(2,i-1)-v(2,i)*w(3,i-1)
686 v(3,i-2)=-v(2,i-1)*w(2,i-2)-v(1,i)*w(3,i-2)
689 + -v(2,2)*w(2,2)-v(3,2)*w(3,2)
690 v(2,1)=-v(1,2)*w(2,1)-v(2,2)*w(3,1)
692 + -v(2,1)*w(2,1)-v(3,1)*w(3,1)
696 * (5) symmetric matrix with band structure, bordered by full row/col
697 * - is not yet included -
699 c
SUBROUTINE bsolv1(N,CU,RU,CK,RK,CH, BK,UH, AU) ! 1
700 * input: cu = 3*n array replaced by decomposition
702 * ck diagonal element
706 * aux: au n-vector auxliliary array
708 * result: fk curvature
710 * uh smoothed
data points
713 c
DOUBLE PRECISION cu(3,n),ci(3,n),ck,bk,au(n),uh(n)
715 c CALL bdadec(cu,3,n, au)
716 c CALL dbaslv(cu,3,n, ru,uh)
717 c CALL dbaslv(cu,3,n, ch,au)
721 c ctz=ctz+ch(i)*au(i)
722 c zru=zru+ry(i)*au(i)
727 c uh(i)=uh(i)-fk*au(i)
731 c entry binv1(n,cu,ci, fk,au)
732 c
DOUBLE PRECISION ci(3,n)
734 c CALL dbaibm(cu,3,n, ci)
736 c ci(1,i)=ci(1,i)+fk*au(i)*au(i)
737 c
IF(i.LT.n) ci(2,i)=ci(2,i)+fk*au(i)*au(i+1)
738 c
IF(i.LT.n-1) ci(3,i)=ci(3,i)+fk*au(i)*au(i+2)
756 DOUBLE PRECISION w(*),epsm,gamm,xchi,beta,delta,theta
762 gamm=max(gamm,abs(w((k*k+k)/2)))
764 xchi=max(xchi,abs(w((j*j-j)/2+k)))
767 beta=sqrt(max(gamm,xchi/max(1.0d0,sqrt(dfloat(n*n-1))),epsm))
768 delta=epsm*max(1.0d0,gamm+xchi)
772 w((k*k-k)/2+i)=w((k*k-k)/2+i)*w((i*i+i)/2)
776 w((j*j-j)/2+k)=w((j*j-j)/2+k)-w((k*k-k)/2+i)*w((j*j-j)/2+i)
781 theta=max(theta,abs(w((j*j-j)/2+k)))
783 w((k*k+k)/2)=1.0d0/max(abs(w((k*k+k)/2)),(theta/beta)**2,delta)
785 w((j*j+j)/2)=w((j*j+j)/2)-w((j*j-j)/2+k)**2*w((k*k+k)/2)
805 DOUBLE PRECISION w(mp1,n),epsm,gamm,xchi,beta,delta,theta
811 gamm=max(gamm,abs(w(1,k)))
812 DO j=2,min(mp1,n-k+1)
813 xchi=max(xchi,abs(w(j,k)))
816 beta=sqrt(max(gamm,xchi/max(1.0d0,sqrt(dfloat(n*n-1))),epsm))
817 delta=epsm*max(1.0d0,gamm+xchi)
821 w(i,k-i+1)=w(i,k-i+1)*w(1,k-i+1)
823 DO j=2,min(mp1,n-k+1)
824 DO i=max(2,j+k+1-mp1),k
825 w(j,k)=w(j,k)-w(k-i+2,i-1)*w(j-i+k+1,i-1)
829 DO j=2,min(mp1,n-k+1)
830 theta=max(theta,abs(w(j,k)))
832 w(1,k)=1.0d0/max(abs(w(1,k)),(theta/beta)**2,delta)
833 DO j=2,min(mp1,n-k+1)
834 w(1,k+j-1)=w(1,k+j-1)-w(1,k)*w(j,k)**2