Initiation au Calcul Scientifique avec Matlab Cursus ingénieur - Première année Année 2016-2017 Module 1A-2S de 14h (7×2h) (Nouveau 2016-2017) Dans l’UE «Traitement de l’information S2» (15% de 7 ECTS) “Initiation au Calcul Scientifique avec Matlab” Évaluation: Examen final le 10 février 2017 (+ contrôle continu?) Cours 0122 sur Libres Savoirs (http://paristech.institutoptique.fr/site.php?id=788) Séance n°1 PRÉSENTATION DE L’OUTIL LOGICIEL MATLAB® PRISE EN MAIN PRATIQUE Hervé Sauer & Charles Bourassin-Bouchet Musawwadah Mukhtar, Mauro Persechino, Jonas Ogien, Maximilian Schemmer 1 2 Initiation au Calcul Scientifique avec Matlab Le logiciel MATLAB OBJECTIF: Formation à l’usage de l’informatique dans un contexte scientifique (ingénierie, modélisation et simulation physique, ...) Initiation au travers de l’outil logiciel Matlab® Lancez le maintenant! Son nom vient de MATrix LABoratory. 1 seul double-clic! (Le lancement prend 2 à 3min en salle d’info IOGS) Création vers ~1978 par Cleve Moler, Prof. américain d’Analyse Numérique et spécialiste mondial d’Algèbre Linéaire PROGRAMME: Les bases de Matlab (usage vectoriel, graphique 2D, ...) Rudiments de programmation avec Matlab Notions d’erreurs et incertitudes en calcul numérique Moindres carrés (régressions), TFD et FFT, ... Actuellement, Matlab 9 : est un logiciel généraliste de calcul scientifique (alg.lin., FFT, équa.diff, optim., ... + visu.) complété par ~80 boîtes à outils (25 à l’IOGS) langage de programmation haut niveau (dont orientation objet complète) fonctions puissantes de résolution de problèmes numériques dans de nombreux domaines Prolongé en 2A: Palaiseau: Calcul Scientifique ~1 million d’utilisateurs dans le monde utilisé par ≳60% des stagiaires et jeunes ingénieurs ‘SupOptique’ Bordeaux: Méthodes numériques & MatLab St-Étienne: Dans divers TD et Projets (Optique Fourier, etc...) 3 4 planche cours langage C / Julien Villemejane Comparaison C / Python / Matlab Comparaison des langages informatiques / Suite de Fibonacci Python C Matlab Libre Langage normalisé. Compilateurs libres ou propriétaires Propriétaire Haut niveau (proche de l’utilisateur) Langage interprété Moyen niveau (proche de la machine) Langage compilé Haut niveau (proche de l’utilisateur) Langage interprété (compilation partielle à la première exécution) Calcul des 30 premiers termes de la suite de Fibonacci Itération de 1 million de fois le calcul – sans affichage Avantages: ~1000 ingénieurs pour support et développement (Nouvelles versions 2 fois par an) ; Nombreuses “boites à outil” spécialisées; Aide très complète. fibonacci_numbers = [0,1] Inconvénients: ~2000€ par licence + ~700€ par “Boite à outils” supplémentaires + 20% maintenance annuelle (licence CAMPUS IOGS!) for i in range(2,MAX): fibonacci_numbers. append(fibonacci_numbers[i-1] + fibonacci_numbers[i-2]) Python Avantages: Pas de besoin de gérer la mémoire (pointeurs, malloc…), objets de haut niveau natifs (vecteurs, matrices, ...) Adapté au développement rapide de (petits) programmes (e.g. pas besoin déclaration du type (double, int, ...) des variables) ⇒ outils de prototypage pour la R&D. Fonctions de très haut niveau intégrées (pas besoin de bibliothèques) Multiplateforme (code source exécuté sur tout ordinateur disposant de Matlab) Inconvénients: Un peu plus lent que le C. développement de très gros logiciels. C int fibonacci[MAX]; short compteur; Fibonacci = zeros(1,MAX); Fibonacci(1) = 0; Fibonacci(2) = 1; for i = 3:MAX Fibonacci(i) = Fibonacci(i-1) + Fibonacci(i-2); end ... fibonacci[0] = 0; fibonacci[1] = 1; for(compteur = 2; compteur < MAX; compteur++) { fibonacci[compteur] = fibonacci[compteur - 2] + fibonacci[compteur - 1]; } Exécuté sur Intel Core i5-4258U / 6Go RAM DDR3 1600 / Xubuntu 16.04 Exécuté avec Python 3.5 / MATLAB 2016b / Compilé avec GCC 5.4.0 Résultats Moyenne de 10 exécutions 7,57 s 0,27 s 0,13 s ±0,24 s ±0,01 s ±0,03 s Pas adapté au Paris-Saclay 5 2 modes d’utilisation de Matlab ● Travail interactif direct MATLAB Saint-Étienne Bordeaux → À vos claviers! ● Utilisation de programmes (scripts...) Matlab est un OUTIL (dont il faut connaître l’utilisation) NE PAS hésiter à utiliser l’aide intégrée ⇔ grosse calculette graphique (pas d’équivalent en C ; possible en Python) F1 → Prendre des notes pour réutilisation aux prochaines séances 7 8 Initiation à Matlab Initiation à Matlab Utiliser un script Lancez la commande CopieCodeS1 puis ouvrez le script Code_seance1.m qui vient d’être copié dans le répertoire de travail %Echantillonnage temporel t = linspace(-50,50,1000); Omega_0 = 2*pi/4;%Pulsation de la porteuse Omega_m = 2*pi/50;%Pulsation de la modulation Phi_0 = pi;%Phase a t=0 t est un vecteur ligne dont les 1000 éléments augmentent linéairement entre -50 et +50 %Modulation d'amplitude A = 1 + 0.1*sin(Omega_m*t);%Enveloppe modulée S1 = A.*sin(Omega_0*t + Phi_0);%Signal module en amplitude A est un vecteur ligne de même taille que t À vous de jouer ! 1. Que génère la commande linspace à la ligne 2 ? 2. Exécutez le script fourni et corrigez le (regardez la command window, Matlab vous aide…) S1 doit être calculé via le produit élément par élément entre 2 vecteurs lignes %Modulation de fréquence A_0 = 0.4; Omega = Omega_0*(1+0.1*sin(Omega_m*t));%Fréquence modulée S2 = A_0*sin(Omega.*t + Phi_0);%Signal modulé en fréquence %Affichage des signaux figure subplot(2,1,1) plot(t,S1,'b-') xlabel('Temps') ylabel('Signal’) 3. Quel est le rôle des «;» ? 4. Ajouter un titre sur les graphiques (Voir dans l’Aide) 5. Changer la couleur des courbes (avec l’interface graphique puis en modifiant le script) subplot(2,1,2) plot(t,S2,'r:') xlabel('Temps') ylabel('Signal’) 6. Modifier le script pour rendre les modulations d’amplitude et de fréquence linéairement croissante Initiation à Matlab Initiation à Matlab Tracer une courbe Tracer une courbe On crée deux vecteurs x et y x = linspace(0,4,100); y = cos(2*pi*x+1); trace les points de coordonnées (x(i), y(i)) plot(x,y) Essayez les 3 syntaxes suivantes plot(x,y,'r') , plot(x,y,'--') et plot(x,y,'o') Couleur du trait ‘r’,‘b’,’g’,‘c’,’m’,‘y’,‘k’,‘w’ Type de trait ‘--’, ‘:’, ‘-.’, ‘-’ Type de marqueur ‘.’, ‘o’, ‘x’, ‘*’,‘sq’ Comment tracer plusieurs courbes Sur le même graphe plot(x,y) hold on plot(x2,y2) Sur la même figure subplot(1,2,1) plot(x,y) subplot(1,2,2) plot(x2,y2) subplot(N,M,k) M ou plot(x,y,x2,y2) N 1 2 4 k 3 Sur différentes figures figure ou figure(1) plot(x,y) figure ou figure(2) plot(x2,y2) On peut combiner ces commandes plot(x,y,'rsq:') Axis labels plot(x,y) xlabel(‘x axis’) ylabel(‘y axis’) title(‘Mon graphe’) Légende plot(x1,y1,’b--’,x2,y2,’ro-’) legend(‘courbe1’, ‘courbe2’) Modifier un graphe via l’interface graphique: Figure => View => Property Editor ou enfoncer le bouton dans la barre des outils d'une figure graphique puis utiliser la souris.... Initiation à Matlab A vous de jouer ! 1. Faire un script qui trace la fonction sur l’intervalle [-2;3] 2. Faire un script qui trace une fonction gaussienne en échelle logarithmique (trouver dans l’aide la fonction d’affichage appropriée) 3. Faire un script qui trace 3 cercles concentriques rouge, vert, bleu en pointillés Courbes en échelle log semilogx(x,y) (échelle log horizontale) semilogy(x,y) (échelle log verticale) loglog(x,y) (échelle log log) Indice pour la question 3: L’équation paramétrique d’un cercle est: x = cos(t) y = sin(t) Pour t allant de 0 à 2π radians…