1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118
|
program testdev
implicit none
character(len=50)::langue,fichier,UPLO,JOBZ
integer::i,j,k,m,n,nb_langues,nb_mots,p,LDA,LWORK
double precision::r,distance
double precision,dimension(:,:),allocatable::matrice,T,delta_maj,delta_inv,A
character(len=50),dimension(:,:),allocatable::mots
double precision,dimension(:),allocatable::WORK,W
UPLO='U'
JOBZ='V'
print*,'Entrez le nombre de langues à étudier : '
read*,nb_langues
allocate (matrice(1:nb_langues,1:nb_langues))
LDA=max(1,nb_langues)
print*,LDA
LWORK=max(1,3*(nb_langues-1))
print*,LWORK
print*, 'Entrez le nombre de mots contenus dans les listes : '
read*,nb_mots
allocate (mots(1:nb_langues,1:nb_mots))
print*, 'Entrez le nom du fichier contenant la liste des langues : '
read*,fichier
open(unit=10,file=fichier,form='formatted')
do j=1,nb_langues,1
read(10,*) langue
open(unit=11,file=langue,form='formatted')
do i=1,nb_mots,1
read(11,*) mots(j,i)
end do
close(11)
end do
close(10)
do k=1,nb_langues,1 !langue
do m=1,nb_langues,1 !autre langue
r=0
do n=1,nb_mots,1 !mots
r=r+distance(mots(k,n),mots(m,n))
end do
matrice(k,m)=r/nb_mots
end do
end do
allocate (delta_maj(1:nb_langues, 1:nb_langues))
call Delta(matrice,delta_maj,nb_langues)
allocate (delta_inv(1:nb_langues,1:nb_langues))
call inverse(delta_maj,delta_inv,nb_langues)
allocate (T(1:nb_langues,1:nb_langues))
T= matmul(delta_inv,matrice)
allocate (W(100))
allocate (A(LDA,nb_langues))
allocate (WORK(100))
if (UPLO == 'U') then
do j=1,nb_langues
do i=1,j
A(i,j)=T(i,j)
end do
end do
else if (UPLO == 'L') then
do j=1,nb_langues
do i=j,nb_langues
A(i,j)=T(i,j)
end do
end do
end if
print*,'ok'
call dsyev(JOBZ,UPLO,nb_langues,A,LDA,W,WORK,LWORK,1)
print*,W
end |
Partager