Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- program normalizacja
- implicit none
- integer imax,i,j,k,li,n,m,kzznmin,k1odnmin,k2odnmin
- parameter (imax=500)
- character*80 plik
- real*8 time
- real*8 l(imax),x(imax),y(imax),z(imax),xmin,ymin,zmin
- real*8 xx(imax),yy(imax),zz(imax),minn,xxn(imax,imax)
- real*8 yyn(imax,imax),od(imax,imax),odn(imax,imax,imax)
- real*8 zzn(imax,imax),tmp1(imax),tmp2(imax),roznica,r,rmin
- real*8 znnr(imax),odnr(imax)
- logical log,nlog
- log=.TRUE.
- nlog=.FALSE.
- write(*,*)'Podaj nazwe pliku danych '
- 10 read(*,*)plik
- open(11,file=plik, status='old',err=20)
- goto 30
- 20 write(*,*)'Blad-ten plik nie istnieje.Podaj nazwe jeszcze raz'
- goto 10
- 30 continue
- li=0
- do while (log.nEQV.nlog)
- li=li+1
- if(li.gt.imax) stop 'liczba danych przewyzsza wymiar macierzy'
- read(11,*,end=100)l(li),x(li),y(li),z(li)
- enddo
- 100 close(11)
- li=li-1
- xmin=minn(x,li)
- ymin=minn(y,li)
- zmin=minn(z,li)
- do i=1,li
- xx(i)=x(i)-xmin
- yy(i)=y(i)-ymin
- zz(i)=z(i)-zmin
- enddo
- do i=1,li
- do j=1,li
- xxn(i,j)=xx(j)/xx(i)
- yyn(i,j)=yy(j)/yy(i)
- enddo
- enddo
- do i=1,li
- do j=1,li
- od(i,j)=xxn(i,j)-yyn(i,j)
- enddo
- enddo
- do i=1,li
- do j=1,li
- zzn(i,j)=zz(j)/zz(i)
- enddo
- enddo
- do i=1,li
- do k=1,li
- do j=1,li
- odn(i,k,j)=od(k,j)/od(k,i)
- enddo
- enddo
- enddo
- rmin=1.0
- kzznmin=0
- k1odnmin=0
- k2odnmin=0
- do i=1,li
- do j=1,li
- tmp1(j)=zzn(i,j)
- enddo
- do k=1,li
- do m=1,li
- do n=1,li
- tmp2(n)=odn(k,m,n)
- enddo
- r=roznica(tmp1,tmp2,li)
- if(r.lt.rmin)then
- rmin=r
- kzznmin=i
- k1odnmin=k
- k2odnmin=m
- endif
- enddo
- enddo
- enddo
- write(*,*)'rmin',kzznmin, k1odnmin, k2odnmin, rmin
- print *, 'Minimal Correllation Coefficient: ', rmin
- print *, 'Pminvalue: ', kzznmin
- print *, 'Subtnorm1value: ', k1odnmin
- print *, 'Subtnorm2value: ', k2odnmin
- call CPU_TIME(time)
- print *, 'Elapsed time: ', time, 'seconds'
- open(33,file='widmok.auto')
- do i=kzznmin,kzznmin
- do k=k1odnmin,k1odnmin
- do m=k2odnmin,k2odnmin
- do j=1,li
- znnr(j)=zzn(i,j)
- odnr(j)=odn(k,m,j)
- write(33,'(3F10.5)') l(j),znnr(j),odnr(j)
- enddo
- enddo
- enddo
- enddo
- end
- real*8 function minn(v,li)
- real*8 v(li)
- tmp=v(1)
- do i=2,li
- if(v(i).lt.tmp)then
- tmp=v(i)
- endif
- enddo
- minn=tmp
- end
- real*8 function roznica(v,u,li)
- real*8 v(li),u(li),r
- rozvu2=0.0
- do i=1,li
- rozvu2=rozvu2+((v(i)-u(i))*(v(i)-u(i)))
- enddo
- r=rozvu2/li
- roznica=r
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement