Considérons une matrice "a" de dimension 3$\times$2 (3 lignes, 2 colonnes) comme dans cet exemple:
\begin{equation}
\left(
\begin{array}{cc}
5 & 9 \\
2 & 7 \\
6 & 4
\end{array}
\right)
\end{equation}
Pour trouver l'indice correspondant à la valeur minimum de la matrice "a" on peut utiliser la fonction fortran MINLOC qui donne ici (2,1) (deuxième ligne, 1ere colonne). A partir de cette function il est alors possible d'ajouter des conditions: par exemple si on veut trouver l'indice de la ligne avec la plus petite valeur sur la deuxième colonnes MINLOC(a(:,2)) qui donne ici 3 (car 4 est la plus petite valeur de la deuxième colonnes). Pour aller encore plus loin il est possible d'utiliser un MASK pour contraindre davantage la recherche. Exemple de code fortran
program testimplicit noneinteger, dimension(3,2) :: aa(1,1) = 5a(1,2) = 9a(2,1) = 2a(2,2) = 7a(3,1) = 6a(3,2) = 4write(6,*) 'Test 1 :', MINLOC(a)write(6,*) 'Test 2 :', MINLOC(a(:,2))write(6,*) 'Test 3 :', MINLOC(a(:,1), MASK=(a(:,1) > 4))write(6,*) 'Test 4 :', MINLOC(a(:,1), MASK=(a(:,1) > 4 .AND. a(:,2) < 5))end program test
donne comme résultat:
Test 1 : 2 1Test 2 : 3Test 3 : 1Test 4 : 3
Exemple d'application: trouver la ligne d'un fichier respectant plusieurs conditions. Supposons que l'on dispose dun fichier data.txt comme ceci:
2008 10 1 132322008 10 2 31322008 10 3 672008 10 4 7672008 10 5 672008 10 6 4652008 10 7 77542008 10 8 64652008 10 9 6562008 10 10 3452008 10 11 577
et on veut trouver l'indice de la ligne qui commence avec 2008, 10 et 8 :
program testimplicit noneinteger :: i,jinteger, dimension(11,4) :: aopen(1,file='fortran_data_test.txt')do i=1, 11read(1,*) (a(i,j),j=1,4)end doclose(1)write(6,*) MINLOC(a(:,1), MASK=(a(:,1) == 2008 .AND. a(:,2) ==10 .AND. a(:,3) == 8))end program test
qui donne ici 8 (car la huitième lignes commence bien par 2008 10 8 )
