subroutine newscaleunit(S,n,nit2,c,M,k2,tol,pi1pen,pi2pen,mu1pen,mu2pen,sig2pen) implicit integer*4(i-k,n) implicit real*8(a-h,l-m,o-z) dimension S(1:n) dimension tau1(1:n),tau2(1:n) pi = 3.14159265 i = 0 tmp1 = 0 tmp2 = 0 tmp3 = 0 106 continue i = i + 1 oldpi1 = pi1pen oldpi2 = pi2pen oldmu1 = mu1pen oldmu2 = mu2pen oldsig2 = sig2pen do 107 k = 1, n tmp1 = S(k) - mu1pen tmp2 = S(k) - mu2pen tmp3 = pi1pen*exp(-tmp1*tmp1/(2*sig2pen))/sqrt(sig2pen) + pi2pen*exp(-tmp2*tmp2/(2*sig2pen))/sqrt(sig2pen) tau1(k) = pi1pen*exp(-tmp1*tmp1/(2*sig2pen)) / (tmp3*sqrt(sig2pen)) tau2(k) = 1 - tau1(k) 107 continue tmp4 = 0 tmp5 = 0 tmp6 = 0 do 108 j = 1, n tmp4 = tmp4 + tau2(j) tmp5 = tmp5 + tau1(j)*S(j) tmp6 = tmp6 + tau2(j)*S(j) 108 continue pi1pen = 1 - ((tmp4+c) / (n+2*c)) pi2pen = 1 - pi1pen mu1pen = tmp5 / (n - tmp4) mu2pen = tmp6 / (tmp4) if (mu1pen.ge.M) mu1pen = M if (mu1pen.le.-M) mu1pen = -M if (mu2pen.ge.M) mu2pen = M if (mu2pen.le.-M) mu2pen = -M tmp5 = 0 tmp6 = 0 do 109 j = 1, n tmp5 = tmp5 + tau1(j)*(S(j)-mu1pen)*(S(j)-mu1pen) tmp6 = tmp6 + tau2(j)*(S(j)-mu2pen)*(S(j)-mu2pen) 109 continue sig2pen = (tmp5+tmp6)/n dtmp1 = sqrt((mu1pen-oldmu1)*(mu1pen-oldmu1))/sqrt(mu1pen*mu1pen) dtmp2 = sqrt((mu2pen-oldmu2)*(mu2pen-oldmu2))/sqrt(mu2pen*mu2pen) dtmp3 = sqrt((pi1pen-oldpi1)*(pi1pen-oldpi1))/sqrt(pi1pen*pi1pen) dtmp4 = sqrt((pi2pen-oldpi2)*(pi2pen-oldpi2))/sqrt(pi2pen*pi2pen) dtmp5 = sqrt((sig2pen-oldsig2)*(sig2pen-oldsig2))/sqrt(sig2pen*sig2pen) nit2=i if (i.ge.k2) dtmp4=-(dtmp1+dtmp2+dtmp3+dtmp5) if ((dtmp1+dtmp2+dtmp3+dtmp4+dtmp5).ge.tol) goto 106 return end