Licence de Physique Année Universitaire : 2010-2011 Licence Chimie, parcours Physique Semestre S3 Cours MÉTHODES NUMERIQUES Chargé du Cours : M. GAGOU Yaovi E-mail :.gagou@u-picardie.fr URL : http://www.u-picardie.fr/gagou
CHAPITRE 1 : GENERALITES SUR LES METHODES NUMERIQUES I. INTRODUCTION I.1. Méthode numérique Pour un problème sans solution analytique évidente, on utilise les méthodes numériques pour le résoudre. Elles sont basées sur des analyses logiques du problème, sa mise en équation et la recherche de solution par le calcul approché en se basant sur les méthodes itératives (on répète successivement l opération jusqu au rang n, ou par récurrence), ou conditionnelles (en évaluant tous les cas possibles). Dans cette démarche nous devons suivre le cheminement suivant : 0-Enoncé du Problème - Ecriture des lois fondamentales 1- Choix de méthodes - Algorithme 2- Organigramme 3- Langage - Programme 4- Mise au point - Essais 5- Données Solutions Vérifications La méthode de résolution doit s appuyer sur la logique mathématique afin d éviter des contradictions : I.2. Rappel sur les tables de vérité A B A B A B A B A B (A B) (A B) B A V V F F V V V V V V F F V F V F V F F V V F F V V V V F F V V F F V F V V=Vrai F= Faux
II. ALGORITHME On appelle algorithme l ensemble des règles définissant un procédé de calcul destiné à obtenir un résultat déterminé à partir des données initiales. Il peut y exister plusieurs algorithmes pour un même problème, l essentiel est d aboutir au résultat le plus rapidement possible. On doit alors le choisir le plus simple algorithme possible de façon à optimiser les tâches machines. Un algorithme comprend : - des calculs (R=A*B) - des formules de récurrence faisant intervenir des valeurs calculées au stade précèdent du calcul (R i = A*R i-1 pour i = 2 à N). Remarque : «= est ici un opérateur d affectation» Méthode direct : nombre fini d étapes de calculs Méthode itérative : solution recherchée par approximation successive (penser à limiter le temps de calcul ; le test d arrêt). Le résultat final doit être donné avec une estimation de l erreur. Il faudra donc choisir la méthode la mieux adaptée sans oublier que la méthode choisie influe sur et donc doit garantir : o la stabilité (sinon il y a un risque de ne pas obtenir les solutions) o la précision du résultat o la rapidité des calculs o la facilité d écriture des programmes. Exemple 1: On désire décomposer un nombre entier N>1 en produit de facteurs premiers. Donner l algorithme permettant de résoudre ce problème. Exemple 2 : Donner l algorithme de calcul de la matrice C obtenue en faisant le produit de deux matrices carrées A et B ayant N lignes et N colonnes : C=AB.
III. ORGANIGRAMME Il donne une description schématique de l algorithme. On dessine un schéma indiquant l ordre d exécution des opérations traitées par l algorithme. Les variables utilisées dans le programme doivent être déclarées au départ. Voici les principaux symboles utilisés : INSTRUCTIONS Entrée des données initiales SYMBOLES Traitement - Calculs Test branchement conditionnel Boucle de programme Branchement Affichage information et de résultats Exemple 1 : Donner un organigramme permettant de calculer la somme des N premiers entiers naturels Exemple 2 : Donne un organigramme permettant de calculer le produit des N premiers entiers naturels. IV. PROGRAMMES Après avoir trouvé le bon algorithme pour résoudre numériquement un problème et après avoir donné son exécution sous forme schématique (organigramme), on choisit ensuite un langage de programmation afin de le faire exécuter par un ordinateur. Le programme transmet étape par étape les instructions décrites dans l organigramme. C est le messager de l ordinateur. Les instructions décrites dans le programme doivent respecter des codes et des ordres d écriture spécifique à celui-ci. C est les syntaxes du programme. L exécution du programme doit se faire via le compilateur (le noyau du programme). Il existe plusieurs programmes (aujourd hui sous forme de logiciels scientifiques). Dans le cadre de ce cours, nous utiliserons le logiciel MATLAB.
IV.1. Notions de variables, types et valeurs Les variables d'un algorithme contiennent les informations nécessaires à son déroulement. Chaque variable a un nom (identifiant) et un type. Ce dernier correspond au genre d'information que l'on souhaite utiliser. On distingue les variables de type : _ entier pour manipuler des entiers, _ réel pour manipuler des nombres réels, _ booléen pour manipuler des valeurs booléennes vrai ou faux, _ caractère pour manipuler des caractères alphabétiques et numériques, _ chaîne pour manipuler des chaînes de caractères permettant de représenter des mots ou des phrases. Il faut noter qu'à un type donné, correspond un ensemble d'opérations définies pour ce type. Une variable est l'association d'un nom avec un type, permettant de mémoriser une valeur de ce type. IV.1.1. Le type entier Les opérations utilisables sur les entiers sont : _ les opérateurs arithmétiques classiques : + (addition), - (soustraction), * (produit) _ la division entière, notée, telle que n p donne la partie entière du quotient de la division entière de n par p _ le modulo, noté mod, telle que n mod p donne le reste de la division entière de n par p _ Les opérateurs de comparaison classiques : <, >, =,... IV.1.2. Le type réel Les opérations utilisables sur les réels sont : _ les opérations arithmétiques classiques : + (addition), - (soustraction), * (produit), / (division) _ Les opérateurs de comparaison classiques : <, >, =,... IV.1.3. Le type booléen Il s'agit du domaine dont les seules valeurs sont vrai ou faux. Les opérations utilisables sur les booléens sont réalisées à l'aide des connecteurs logiques : et (pour le et logique), ou (pour le ou logique), non (pour le non logique). IV.1.4. Le type caractère Il s'agit du domaine constitué des caractères alphabétiques et numériques. Une variable de ce type ne peut contenir qu'un seul et unique caractère. Les opérations élémentaires réalisables sont les comparaisons : >, <, =,
IV.1.5. Le type chaîne Elle permet de déclarer une variable qui sera apte à recevoir un mot, une phase ou un message afin de pouvoir l afficher en sortie. Une chaîne est une séquence de plusieurs caractères. Les opérations élémentaires réalisables sont les comparaisons : <, >, =,... selon l'ordre lexicographique. Elle utilise aussi des opérations de concaténation (' '). IV.2. Instructions d'affectation et expressions Une instruction est la spécification d'une ou de plusieurs actions portant sur une ou des variables. L'instruction la plus commune est l'affectation. Elle consiste à doter une variable d'une valeur appartenant à son domaine, c'est à dire à lui donner une première valeur ou à changer sa valeur courante pendant le déroulement du programme. Elle se note. Une expression est une suite finie bien formée d'opérateurs portant sur des variables ou des valeurs et qui a une valeur. La valeur de l'expression doit être conforme au domaine de la variable affectée. Enfin, il est important de respecter en programmation l ordre des opérations. IV.2.1. Exemple d'algorithme Algorithme x : entier y : entier début x 12 y x + 4 x 3 fin IV.2.2. Interprétation Cet algorithme est constitué de trois instructions successives qui seront effectuées les unes après les autres. Les variables x et y sont entières. La première instruction consiste à affecter à la variable x la valeur 12. A la fin de cette instruction, la variable x vaut 12. La deuxième instruction est un peu plus complexe. C'est l'affectation d'une expression non réduite à une valeur à une variable entière. L'expression x + 4 est d'abord reconnue comme une somme à effectuer portant sur deux valeurs entières. La première valeur est celle de la variable x, qui existe, puisque l'instruction précédente a affecté 12 à x. Ainsi, l'addition a bien ses deux opérandes entiers et elle peut être effectuée. Elle l'est, et la valeur entière 16 est affectée à la variable y.
La troisième instruction modifie la valeur de la variable x, qui devient 3. L'ancienne valeur de x, qui était 12, est définitivement perdue. Le déroulement séquentiel fait naturellement oublier les instructions effectuées en ne conservant que les valeurs courantes des variables. On remarque que les deux premières instructions ne sont pas permutables car x n'aurait alors pas de valeur au moment du calcul. IV.3. Instructions de lecture et d'écriture IV.3.1. Instructions de lecture L'instruction de prise de données sur le périphérique d'entrée (en général le clavier, scanner) est : variable lire( ) L'exécution de cette instruction consiste à affecter une valeur à la variable en prenant cette valeur sur le périphérique d'entrée. Avant l'exécution de cette instruction, la variable avait ou n'avait pas de valeur. Après, elle a la valeur prise sur le périphérique d'entrée. IV.3.2. Instruction d'écriture L'instruction de restitution de résultats sur le périphérique de sortie (en général l'écran) est : écrire (liste d'expressions) Cette instruction réalise simplement l'affichage des valeurs des expressions décrites dans la liste. Ces instructions peuvent être simplement des variables ayant des valeurs ou même des nombres ou des commentaires écrits sous forme de chaînes de caractères. Exemple d'utilisation : écrire (x, y+2, "bonjour") IV.3.3. Exemple d'algorithme On désire écrire un algorithme qui lit sur l'entrée standard une valeur représentant une somme d'argent et qui calcule et affiche le nombre de billets de 100 Euros, 50 Euros et 10 Euros, et de pièces de 2 Euros et 1 Euro qu'elle représente. Principe : L'algorithme commence par lire sur l'entrée standard l'entier qui représente la somme d'argent et affecte la valeur à une variable somme. Pour obtenir la décomposition en nombre de billets et de pièces de la somme d'argent, on procède par des divisions successives en conservant chaque fois le reste.
Algorithme début fin somme lire() b100 somme 100 r100 somme mod 100 b50 r100 50; r50 r100 mod 50 b10 r50 10 r10 r50 mod 10 p2 r10 2 r2 r10 mod 2 p1 r2 écrire (b100, b50, b10, p2, p1) Lexique - somme : entier, la somme d'argent à décomposer - b100 : entier, le nombre de billets de 100 Euros - b50 : entier, le nombre de billets de 50 Euros - b10 : entier, le nombre de billets de 10 Euros - p2 : entier, le nombre de pièces de 2 Euros - p1 : entier, le nombre de pièces de 1 Euro - r100 : entier, reste de la division entière de somme par 100 - r50 : entier, reste de la division entière de r100 par 50 - r10 : entier, reste de la division entière de r50 par 10 - r2 : entier, reste de la division entière de r10 par 2 IV.4. Notion de fonctions IV.4.1. Définition Une fonction est un algorithme autonome, réalisant une tâche précise, auquel on transmet des valeurs lors de son appel et qui retourne une valeur à la fin de son exécution. La notion de fonction est très intéressante car elle permet, pour résoudre un problème, d'employer une méthode de décomposition en sous-problèmes distincts. Elle facilite aussi la réutilisation d'algorithmes déjà développés par ailleurs. Une fonction est introduite par un en-tête, appelé aussi signature ou prototype, qui spécifie : - le nom de la fonction - les paramètres donnés et leur type - le type du résultat La syntaxe retenue pour l'en-tête est la suivante : fonction nomfonction (liste des paramètres) : type du résultat La liste des paramètres précise pour chaque paramètre, son nom et son type. La dernière instruction de la fonction indique la valeur retournée, nous la noterons : retourne expression
IV.4.2. Exemple de fonction Ecrire une fonction calculant le périmètre d'un rectangle dont on lui donne la longueur et la largeur. Algorithme fonction calculpérirectangle (longueur:réel, largeur:réel): réel début lire (longueur, largeur) périmètre 2 * (longueur + largeur) retourne périmètre fin Lexique - longueur : réel, longueur du rectangle - largeur : réel, largeur du rectangle - périmètre : réel, périmètre du rectangle IV.5. Instructions conditionnelles Les exemples précédents montrent des algorithmes dont les instructions doivent s'exécuter dans l'ordre, de la première à la dernière. Nous allons introduire une instruction précisant que le déroulement ne sera plus séquentiel. Cette instruction est appelée une conditionnelle. Il s'agit de représenter une alternative où, selon les cas, un bloc d'instructions est exécuté plutôt qu'un autre. La syntaxe de cette instruction est : si condition alors liste d'instructions sinon liste d'instructions fsi Cette instruction est composé de trois partie distinctes : la condition introduite par si, la clause alors et la clause sinon. La condition est une expression dont la valeur est de type booléen. Elle est évaluée. Si elle est vraie, les instructions de la clause alors sont exécutées. Dans le cas contraire, les instructions de la clause sinon sont exécutées. On peut utiliser une forme simplifiée de la conditionnelle, sans clause sinon. La syntaxe est alors : si condition alors liste d'instructions fsi
IV.6. Instructions itératives Les instructions itératives permettent de répéter (on dit aussi itérer) une suite d instructions un certain nombre de fois. Elles sont de plusieurs sortes et diffèrent selon le critère d arrêt des itérations (nombres d itérations connu a priori, ou arrêt de l itération suivant une condition,...). Pour les trois instructions itératives qui vont suivre, l'instruction itérée peut être simple (terminée par un point-virgule) ou multiple (instructions inclues dans un bloc délimité par des { }). IV.6.1. Instruction Tant que Tant que condition vraie faire while (condition) instruction instruction ; FinTantQue end L'instruction est exécutée tant que la valeur de l'expression condition est vraie (non nulle). Le test ayant lieu avant l'exécution de l'instruction, celle-ci n'est pas exécutée si l'expression est nulle à la première évaluation. IV.6.2. Instruction Répéter... Jusqu'à Répéter do instructions instructions ; Jusqu'à condition vraie while (condition fausse); L'instruction est exécutée jusqu'à ce que la valeur de l'expression condition soit fausse (nulle). Attention : En Matlab, contrairement à d'autres langages évolués, l'instruction Répéter... Jusqu'à utilisée en algorithmique n'existe pas sous cette forme. On utilise l'instruction : Tant que... Répéter et il faut donc penser à tester la négation de la condition utilisée en algorithmique. IV.6.3. Instruction Pour Pour cpt allant de x a y par pas de z for (cpt = x: z :y) instruction instruction ; FinPour end La forme générale de l'instruction pour en Matlab est : for exp1 : exp2 : exp3 instruction. exp1 est le départ exp2, le pas et exp3 l arrivée. Par défaut exp2 = 1.
MATLAB logiciel de Calcul scientifique MATrix LABoratory Y. GAGOU
Démarrage de MATLAB exécuter le fichier Matlab.exe L invite >> de MATLAB doit alors apparaître, On entre ensuite les commandes, par exemple : clc permet d effacer la zone de travail quit permet de quitter MATLAB help donne l aide sur une fonction >> help cos COS Cosine. COS(X) is the cosine of the elements of X
Calculs : ans, format Les opérateurs les plus courants sont +, -, *, /, ^ On tape une expression mathématique et on la valide exemple : >> (3*2)/(5+3) ans = 0.7500 Le résultat est mis automatiquement dans une variable appelée ans (answer). Celle-ci peut être utilisée pour le calcul suivant, par exemple : >> ans*2 ans = 1.5000
Informations what : liste les fichiers *.m et *.mat courant whos : liste les variables courantes clock : annee mois jour heure minute seconde date : affiche la date actuelle tic : déclenchement de chrono toc : arrêt de chrono close all : efface les graphiques courant clear all : détruit des variables et fonctions
Variables intégrées à Matlab pi : π = 3.14159 ans : réponse à une expression sans assignation eps : précision de la virgule flottante i et j : racine carrée de (-1) NaN : Not a Number 0/0 nargin : nbre d'arguments d'entrée d'une fonction nargout : nbre d'arguments de sortie d'une fonction flop : nombre d'opérations flottantes par seconde computer : type du calculateur inf : l infini ( )
Entrée Sortie input >> valeur = input('entrez une valeur') >> txt1 = 'Bonjour les amis' >> txt2 = input('tapez votre texte','s') disp >> disp(a); >> disp('du texte, blabla'); >> disp( [ 'l''élément a(3,3) vaut :, num2str(a(3,3)) ] ) >> disp( [ 'La matrice A vaut :' num2str(a) ] ) >> disp('la matrice A vaut : '), disp(a)
Instructions conditionnelles if condition (==, <, >, <=, >=, or ~= avec, &) ou if instructions elseif instruction else instruction end condition instructions end
Instructions Itératives for condition instruction end >> for R=1 :5, V=4/3*pi*R^3; disp([r,v]), end while condition instruction end >> while R<5, R=R+1 ; V=4/3*pi*R^3; disp([r,v]), end
Matrices et Vecteurs A=[1 2 3 4] ou A=[1,2,3,4] matrice ligne ou vecteur ligne B=[ 'a' 'b' 'c'] vect. ligne composé des caract. a, b et c C=[1; 2; 3 ;4] matrice colonne ou vecteur colonne On peut écrire C=A transposition x= 0:0.2:5 vect. ligne de points entre 0 et 5 au pas de 0.2 linspace(début,fin, nb points) Si début fin seulement 100 points par défaut logspace(début,fin, nb points) Si début fin seulement 50 points par défaut
Exemples Matrices Vecteurs Vecteur Ligne A=[1,3,5,6] Vecteur colonne B=[1;3;5;6] ou B=[1 3 5 6] Matrice 3 2 C=[2,4;5,6;7,8 ] Matrice 3 3 D =[1, 2,4;0,1,5;4,5,0]
Matrices et vecteurs D=[1 2 3; 4 5 6; 7 8 9] matrice carrée 3 3 On peut déduire E=D (transposée de D) D(i,:) est la i ème ligne D(:,j) est la j ème colonne Matrices prédéfinies : zeros : zeros(n), zeros(m,n) ones : ones(n), ones(m,n) rand : rand(n), rand(m,n) ou randn eye : eye(n), eye(m,n) magic : magic(5) complex(a,b) =z (nbre complexe a+ib) Nbres complexes : abs, real, imag, conj, angle, isreal
Opérations sur les matrices S=A+B (même nombre de ligne et de colonne) P=A*B (nb ligne de B = nb colonne de A) det(a) : déterminant de A inv(a) : inversion de la matrice A si det(a)~=0 A X=B X=A\B ou X=A -1 B Remarque : X=A/B calcule A B -1 poly(a) = polynôme caractéristique de A roots(p) = les racines du polynôme caractéristique polyval(e) : polynôme à coef. elts de E (vecteur)
Matrice 3D
Graphique 2D & 3D
Graphique 2D plot(x, Y, 'or') : graph 2D avec marque o couleur r legend('ressources') text (x,y, info ) : ajoute le texte info au point (x,y) figure, plot(p, Q, 'b^' ) : numérote les graphiques subplot(m, n, k) : m ligne n colonne k ème position help plot, help inline plot(x,y, mo, X,G, b*, S, T,.-y ) : 3 courbes axis[xmin,xmax,ymin,ymax] : échelles xlim([a b]), ylim([c d]) : définit les limites de x, y
Graphique 3D plot3(x,y,z, ro ) >> t = 0:pi/50:10*pi; plot3(sin(t),cos(t),t), grid on, axis square surf(x, Y, Z) mesh(x, Y, Z) contour (X, Y, Z) figure clf : efface la figure courante close all : efface toute les figures
Graphique 3D >> [X,Y,Z] = peaks(30); surfc(x, Y, Z), colormap hsv, axis([-3 3-3 3-10 5]) >>[X,Y] = meshgrid(-3:.125:3); Z = peaks(x,y); meshc(x,y,z); axis([-3 3-3 3-10 5])
Fonctions et scripts Instructions Matlab sous forme de fichiers.m appelés des M-files Deux sortes : scripts et les fonctions Script : commandes enregistrées dans un fichier texte à exécuter par le nom du fichier fonction sous Matlab : function [y1,y2]=mafonction(x1,x2,x3) y1, y2 : variables de sortie x1, x2, x3 : variable d entrée
Script ou M-File
Fonction
Mat-File Format de fichier par défaut du workspace, lorsqu aucun format n est spécifié Utiliser la commande save pour sauvegarder save( monfichier, variable, variable, variable ) save monfichier.dat T ascii load monfichier : pour charger le fichier edit monfichier : pour voir le contenu du fichier diary( nomde fichier ) fscanf, fprintf
Manipuler les fonctions
FIN du COURS