1 Introduction à FORTRAN
Transcription
1 Introduction à FORTRAN
GIS3 — Calcul Numérique — Feuille de TP numéro 1 1 Introduction à FORTRAN Le langage de programmation est FORTRAN 77 avec quelques extensions courantes. Un manuel est accessible sur http://www.lifl.fr/~boulier. Il s’agit d’un livre classique (en Anglais), maintenant sous licence libre, auquel des notes de bas de page (en Français) et un index ont été ajoutés à l’usage des étudiants de GIS. Question 1. Sur le site du cours, télécharger l’archive code.tgz. Elle contient un programme d’exemple ainsi qu’un Makefile. Compiler et exécuter le programme. $ $ $ $ tar xzf code.tgz cd code make ./main 1.1 Premiers pas Question 2. En adaptant main.f, écrire un programme FORTRAN qui lise un vecteur V , qui calcule le produit scalaire de V par lui-même et qui imprime le résultat. Question 3. PROD SCAL. Même question, en calculant le produit scalaire au moyen d’une fonction Question 4. Même question, en calculant le produit scalaire au moyen d’une procédure, avec un paramètre en mode résultat 1 . 1.2 Introduction aux BLAS Sur le site www.netlib.org/blas, on peut obtenir un « quick reference guide » ainsi que les codes sources des BLAS, dont les commentaires permettent de comprendre le rôle des paramètres formels. Question 5. Que signifie l’acronyme « BLAS » ? Question 6. Télécharger le « quick reference guide » ainsi que le code de la fonction DDOT. Que signifie le premier « D » de « DDOT » ? 1. La convention classique, en FORTRAN, consiste à organiser la liste des paramètres formels ainsi : d’abord les paramètres en mode donnée, ensuite les paramètres en mode donnée/résultat, et enfin les paramètres en mode résultat (c’est la convention inverse qui est appliquée en C). 1 Question 7. Même question qu’en fin de section 1.1, en utilisant DDOT. Donner la valeur 1 aux paramètres INCX et INCY. Quelle bibliothèque faut-il mentionner sur la ligne de commandes, lors de l’édition des liens ? 1.3 Voir les colonnes d’une matrice comme des vecteurs En FORTRAN, les matrices sont rangées par colonne 2 . En FORTRAN, tous les passages de paramètres se font par adresse. Par conséquent, passer en paramètre l’élément A(1,C) à une fonction, revient à passer l’adresse de début de la colonne d’indice C. Question 8. Écrire un programme FORTRAN qui lise une matrice 3 × 2 et qui imprime le résultat du produit scalaire des deux colonnes de la matrice. Utiliser DDOT. Peut-on voir les lignes d’une matrice comme des vecteurs ? Oui, en passant les adresses des premiers éléments des lignes et en ajustant le paramètres nommés INCX et INCY (dans la cas de la fonction DDOT). Question 9. Modifier le programme précédent pour qu’il imprime le résultat du produit scalaire des deux premières lignes de la matrice. Utiliser DDOT. 1.4 Exercices Question 10. Écrire une action CHECK ORTHOG M, paramétrée par un flottant tol, deux entiers n, m, une matrice A de type n × m, et qui vérifie que la matrice A est bien « orthogonale ». Pour tester cette procédure, il est possible d’utiliser la procédure ORTHOG M du fichier mutils.f. Commenter la fonction (rôle des paramètres) à la façon des BLAS. Voici l’algorithme en pseudo-code : function CHECK ORTHOG M (tol, n, m, A) begin for c1 variant de 1 à m do Calculer le produit scalaire P de la colonne c1 de A avec elle-même if |P − 1| > tol stop for c2 variant de c1 + 1 à m do Calculer le produit scalaire P des colonnes c1 et c2 de A if |P | > tol stop end do 2. Si on consulte séquentiellement la mémoire occupée par une matrice, on trouve les éléments de la première colonne, puis ceux de la deuxième, et ainsi de suite jusqu’à la dernière (en C, les matrices sont rangées par ligne). 2 end do end Question 11. Retrouver le code de la procédure RAND PDM du fichier mutils.f. Quelles sont les fonctions des BLAS utilisées ? Expliquer chaque ligne de cette procédure. Question 12. Écrire un programme qui lise deux matrices au clavier et qui imprime leur produit. Quelle fonction des BLAS utiliser pour le produit de matrices ? Question 13. Retrouver le code de la procédure PRINT M du fichier mutils.f. Qu’est-ce que le langage FORTRAN permet de faire au niveau du passage des paramètres, que le langage C ne permet pas ? 1.5 Introduction à LAPACK La bibliothèque LAPACK contient des algorithmes d’algèbre linéaire. Elle est construite au-dessus des BLAS. Le site de référence est www.netlib.org/lapack. Question 14. Écrire un programme FORTRAN qui lise une matrice carrée au clavier et qui imprime son inverse. Vérifier que l’inverse calculé est bien l’inverse de la matrice lue. Utiliser les fonctions DGETRI et DGETRF de LAPACK. Quelle bibliothèque faut-il mentionner sur la ligne de commande ? 2 FORTRAN et MAPLE Le logiciel MAPLE, accessible sur weppes, contient un paquetage, nommé LinearAlgebra, qui permet d’effectuer toutes les opérations classiques sur les matrices, avec des nombres exacts, sous réserve que les dimensions des matrices soient petites. Question 15. Dans l’exemple de la Figure 1, on a construit une matrice A dont les valeurs propres sont 2, 7 et −3. En utilisant la fonction Eigenvectors du paquetage, on a demandé à MAPLE de recalculer les valeurs propres (eigenvalues en Anglais) ainsi qu’un vecteur propre (eigenvector en Anglais) par valeur propre. Quelle méthode a-t-on utilisée pour construire A ? Comment calcule-t-on l’inverse d’une matrice en MAPLE ? À quoi voit-on que le vecteur (2/3, 0, 1)T est un vecteur propre de A ? Quelle est la valeur propre qui lui est associée ? Question 16. La procédure PRINT MPL du fichier mutils.f permet d’imprimer une matrice au format du paquetage LinearAlgebra. Quels paramètres faut-il lui donner ? Vérifier en modifiant l’un des programmes écrits précédemment. 3 weppes:~$ /usr/local/maple11/bin/maple > J := <<2, 0, 0> | <0, 3, 0> | <0, 0, -7>>; |\^/| Maple 11 (IBM INTEL LINUX) ._|\| |/|_. Copyright (c) Maplesoft, ... [2 0 0] \ MAPLE / All rights reserved. Maple ... [ ] <____ ____> Waterloo Maple Inc. J := [0 3 0] | Type ? for help. [ ] [0 0 -7] > with (LinearAlgebra): > P := <<2, 1, 0> | <-1, 1, 5> | <2, 0, -3>>; > A := P . J . P^(-1); [2 [ P := [1 [ [0 -1 1 5 2] ] 0] ] -3] [-91 [ A := [ 3 [ [150 > P^(-1); 186 -4 -300 -56] ] 2] ] 93] > Eigenvectors (A); [-3 [ [ 3 [ [ 5 7 -6 -10 -2] ] 2] ] 3] [ 3] [ ] [ 2], [ ] [-7] [-1/5 [ [1/5 [ [ 1 2 1 0 -2/3] ] 0 ] ] 1 ] > A . <-2/3, 0, 1>; [14/3] [ ] [ 0 ] [ ] [ -7 ] Figure 1 – Manipulations de matrices en MAPLE Question 17. En MAPLE, entrer la commande with (LinearAlgebra) en la terminant par un point-virgule au lieu d’un deux-points. La liste des fonctions exportées du paquetage s’affiche. Quelles fonctions vous semblent utiles pour votre projet ? 4