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