TP N° 3 : Les fonctions Durant les séances précédentes nous avons utilisé certa
TP N° 3 : Les fonctions Durant les séances précédentes nous avons utilisé certaines fonctions comme : sum, prod, ones, zeros, etc. Dans ce TPs nous allons voir comment définir des nouvelles fonctions qui ne figurent pas parmi les fonctions incorporées de MATLAB et les utiliser de la même manière (ces fonctions sont nommées les fonctions utilisateur). Activité 1 : Implémentation et utilisation d’une fonction Ces fonctions ne sont en réalité que des scripts (fichier texte avec l’extension .m) avec des paramètres d’entrées et/ou des paramètres de sorties et qui commence obligatoirement avec un en-tête de la forme function [ output_args ] = Untitled( input_args ) %UNTITLED Summary of this function goes here % Detailed explanation goes here Ici le corps de la fonction end Avec : Untitled : le nom de la fonction, input_args : liste des paramètres d’entrée (séparés par des virgules). Si n’y a pas de paramètres d’entrée, on peut mettre des paramètres vides ou bien on ne met pas les parenthèses. output_args : liste des paramètres des sorties (séparés par des espaces ou bien des virgules). Si n’y a pas de paramètres de sortie ou un seul paramètre de sortie, on ne met pas les crochets. NB : 1. Les commentaires (texte en ver) ne sont pas des simples commentaires, c’est le help de la fonction (voir après). 2. Le « end » n’est pas nécessaire. Il sera nécessaire à la présence des sous fonction (voir après). 3. Comme le cas des scripts, vous pouvez écrire votre fonction en utilisant un simple éditeur de texte comme le bloc note et des enregistrer avec l’extension .m 4. L’éditeur de Matlab (cliquer sur le bouton « New » « Function ») peut vous assister à écrire le code et vous présenter des suggestion convenables. Exemple Démarrer l’éditeur de script de Matlab et écrie les lignes de codes suivantes : function [res] = produit(a,b) res = a*b; end Pour tester cette fonction, vous allez écrire dans la ligne de commande : >> e = produit(2,4); Une fois cette commande exécutée, on récupère dans la variable e la valeur de sortie de la fonction, c’est à dire le produit des deux paramètres en entrée. NB : Avant de tester la fonction vous devez s’assurer que le fichier produit.m est placé dans Current folder. Outils Matlab Année universitaire 2021-2022 Y. TAHIR N’oublier pas d’introduire les arguments lors de l’appel à la fonction (dans l’exemple précédant nous avons écrit « produit(2,4) », par contre « produit » seulement va générer une erreur). Exercices d’application 1. Ecrire les fonctions : diametre(r), criconference(r) et surface(r) qui reçoivent comme argument le rayon d’un cercle et renvoie respectivement le diametre, la criconference et la surface 2. Ecrire la fonction diametreCriconferenceSurface(r) qui reçoit comme argument le rayon d’un cercle et renvoie à la fois le diametre, la criconference et la surface Solution diametre(r) function d = diametre(r) d=r*2; end criconference(r) function c = criconference(r) c=r*2*pi; end surface(r) function s = surface(r) s=r^2*pi; end diametreCriconferenceSurface(r) function [d c s] = diametreCriconferenceSurface1(r) d=r*2; c=r*2*pi; s=r^2*pi; end ou bien : function [d c s] = diametreCriconferenceSurface2(r) d= diametre(r); c= criconference(r); s= surface(r); end Dans cette deuxième solution, la fonction diametreCriconferenceSurface2() fait appel aux fonctions utilisateur diametre(), criconference() et surface(), ces fonctions doivent être déjà implémentées et enregistrées dans le current folder, sinon le compélateur va générer une erreur lors de l’appel de la fonction diametreCriconferenceSurface2(). Activité 2 : variables locales d’une fonction et variables globales Pour bien comprendre cette partie essayer tout d’abord de supprimer toute les variables de vous avez sur le workspace (en utilisant la commande clear all). En suite déclarer une variable x = 4 et y = 5 >> x=4 ; y=5 ; Nous allons maintenant exécuter la fonction produit() que nous avons implémenter dans l’activité précédente pour calculer le produit de x et y : >> z=produit(x,y) ; Une fois la commande produit(x,y)est exécutée, on récupère bien dans z la valeur de sortie de la fonction, c’est à dire le produit des deux paramètres en entrée x et y. On remarquera que l’on ne voit pas, dans la zone des variables de Matlab workspace, une variable nommée res. En effet, la variable res est interne à la fonction produit, et ne vit que pendant l’appel de cette fonction. Une fois la fonction terminée, la variable sera automatiquement détruite. De plus, la variable res n’existe que pour la fonction produit : elle ne peut pas être lue par une autre fonction ou par une commande directement dans Matlab. D’autre part si vous exécuter les commandes suivantes : >> a=2 ; >> b=4 ; >> z = produit(); Vous allez trouver que la dernière commande ne marche pas et elle va générer un message d’erreur Error using produit (line 3) Not enough input arguments. Cette erreur est dû au fait que la fonction n’a pas trouvé les arguments a et b même s’il existe des variables a et b parmi les variables de workspace la fonction ne va pas les considérer en tant que des arguments ou bien des variables internes. Par suite, il faut bien distingues les variables globales qu’on trouve dans le workspace et qui sont visible dans tout le programme et les variables local d’une fonction qu’ont trouvent déclarer à l’intérieur d’une fonction et dans la durée de vie est le temps d’exécution de la fonction et les arguments de la fonction qu’on doit fournir entre parenthèses lors de l’appel de la fonction et qui sont le seul moyen qui permet de transmettre une ou plusieurs valeurs du workspace à la fonction. Enfin, considérez cette fonction qui ne prend aucun paramètre de sortie : function incrementer(a) a=a+1 ; end Cette fonction ajoute simplement 1 à son entrée. Testez-la dans Matlab : >> x x = 5 >> incrementer(x) >> x x = 5 >> x=incrementer(x) Error using incrementer Too many output arguments. La fonction s’exécute, mais la variable x n’est pas incrémentée de 1 ; en effet, Matlab a transmis le paramètre d’entrée à la fonction par suite la valeur de x qui est recopiée dans a, ensuite la fonction a incrémenté la valeur de a, mais les modifications réalisées dans a seront perdues lorsque la fonction termine son exécution parce que la variable a n’est pas déclaré comme une valeur de retour de la fonction donc c’est une simple variable locale qui sera détruite à la fin et la fonction ne va transmettre aucune valeur après son exécution. La dernière instruction génère une erreur parce que la fonction n’a pas de valeur de retour. Activité 2 : Documentation d’une fonction Nous avons souvent besoin de consulter le help pour certaines fonctions afin de savoir comment les utiliser. Jusqu’à maintenant les fonctions utilisateurs que nous avons implémenter ne possède aucun help ; en effet voici le message que nous allons obtenir si on consulte le help d’une telle fonction : >> help produit No help found for produit.m. Documenter une fonction c’est-à-dire ajouter un help pour cette fonction. Pour documenter une fonction on doit ajouter des commentaires entre la première ligne (qui commence par le mot clé function) e la première instruction du corps de la fonction Exemple : Pour documenter la fonction produit(), on ajoute les deux lignes de commentaires ci-dessous puis on enregistre. function [res] = produit(a,b) % c'est une fonction qui reçoit comme argument deux nombres réels et % calcul leur produit res = a*b; end Pour afficher le help de la fonction produit(), on tape help produit dans la ligne de commande de command window. >> help produit c'est une fonction qui re?oie comme argument deux nombres r?els et calcul leur produit >> Exercice 2 Documenter les fonctions que nous avons implémenté dans l’activité 1. Autres exercices Exercice 3 Implémenter une fonction min3 qui renvoi le minimum de trois nombres entrés en argument Solution : function m = min3(a,b,c) if a>b if b>c m=c; else m=b; end else if a>c m=c; else m=a; end end NB : n’oublier d’ajouter le help et de tester la fonction Exercice 4 Implémenter une fonction min3 qui renvoi le minimum de trois nombres entrés en argument Solution : A faire Exercice 5 Implémenter une fonction fact qui renvoi le factoriel d’un nombre entré en argument Solution function fac = fact(n) fac= prod(1:n) ; end Une autre solution function fac = fact(n) if n==1 fac=1 ; else fac= n*fac(n-1) ; end NB : on suppose ici que l’utilisateur ne va entrer comme argument de la fonction que des nombre positive. Nous allons voir après comment ajouter des filtres qui vont tester l’argument avant de commencer le traitement. Exercice 6 Implémenter la fonction Eq1d(a,b)qui renvoi la solution de l’équation : ax+b =0 Solution function x= Eq1d(a,b) if a==0 if b==0 x='R'; else x=[] ; end else x=-b/a; end end Exercice 7 Implémenter la fonction Eq2d(a,b,c)qui renvoi la solution de l’équation : ax2+bx+c =0 Solution function y = Eq2d (a ,b,c) if a==0 y = Eq1d(b,c) ; else delta = b^2 - 4*a*c ; uploads/Industriel/ matlab-tp3-les-fonctions.pdf
Documents similaires










-
50
-
0
-
0
Licence et utilisation
Gratuit pour un usage personnel Attribution requise- Détails
- Publié le Dec 06, 2021
- Catégorie Industry / Industr...
- Langue French
- Taille du fichier 0.5498MB