Blog ENI : Toute la veille numérique !
🐠 -25€ dès 75€ 
+ 7 jours d'accès à la Bibliothèque Numérique ENI. Cliquez ici
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici

Les programmes et sous-programmes

Problématique

Les structures de contrôle décrites aux chapitres précédents sont des éléments de base de la conception des programmes. Mais on se rend bien compte qu’un long script MATLAB qui ne serait constitué que de commandes et de fonctions prédéfinies serait difficile à écrire et impossible à comprendre. C’est pour cette raison que, pour résoudre un problème, on doit le décomposer en sous-problèmes. Si la complexité persiste, on applique, pour concevoir un tel programme, une méthode de conception descendante. On part du problème à résoudre et on essaye de le découper en sous-problèmes plus simples que le problème initial. Puis on découpe ces sous-problèmes jusqu’à ce qu’on obtienne des problèmes très simples qu’il sera possible de traduire en quelques instructions. En programmation, on parle de programmation procédurale ou modulaire.

Ainsi, on va associer à chaque sous-problème, son code MATLAB, auquel on fait correspondre un sous-programme. MATLAB dispose d’un mécanisme spécial conçu pour faciliter le développement et le débogage indépendant de sous-programmes avant la construction du programme final. Il est possible de coder chaque sous-problème...

Fonctions et M-files

1. Introduction

Nous avons déjà vu que MATLAB possède un certain nombre de fonctions intégrées, comme cos, sin, sqrt, sum, etc., que l’on peut appliquer à des scalaires ou à des tableaux de données. Ces fonctions peuvent être utilisées directement en ligne de commande, dans la fenêtre de commande, ou dans un script.

Un script est un fichier texte portant l’extension *.m (M-files) comportant plusieurs lignes séquentielles de commandes MATLAB, d’expressions et d’appels de fonctions qui constituent un scénario d’actions. De manière analogue, il est possible pour le programmeur de définir ses propres fonctions.

L’utilisateur de MATLAB utilise les fichiers M-files pour définir ses propres fonctions.

2. Création de la fonction M-files

Une fonction est un regroupement de variables et d’instructions identifiable par un nom et ayant un objectif bien déterminé. Les fonctions en MATLAB correspondent aux fonctions et procédures en langage algorithmique.

Il existe différentes façons d’organiser les scripts et les fonctions, mais pour l’instant, chaque fonction que nous écrivons sera stockée dans un fichier M-files séparé, c’est pourquoi on les appelle généralement des fonctions M-files.

a. Fonctions et procédures en algorithmique

Avant de voir comment utiliser les fonctions en MATLAB, nous allons faire un rappel sur les fonctions et les procédures en algorithmique.

Une procédure

Une procédure est une structure de programme autonome (sous-programme) qui permet de résoudre un problème précis et d’effectuer une tâche particulière. Elle peut produire zéro, un ou plusieurs résultats.

Une fonction

Une fonction est un sous-programme contenant un certain nombre d’actions, qui retourne un résultat unique affecté à son nom. Autrement dit, une fonction est un sous-programme qui retourne obligatoirement une valeur. Cette dernière sera stockée dans une variable qui porte le même nom que la fonction.

Dans le reste du livre, nous parlerons seulement des fonctions.

b. Types de fonctions définies par l’utilisateur en MATLAB

Contrairement à...

Paramètres

1. Paramètre formel et paramètre effectif

a. Paramètre formel

On appelle paramètres formels (ou fictifs) les variables déclarées dans l’en-tête de la fonction à définir. La définition de ces paramètres est indiquée par leurs identificateurs. Ces paramètres constituent un moyen de communication de l’information avec les autres fonctions appelantes. Dans le texte de la fonction, les instructions font appel à ces derniers pour réceptionner les valeurs transmises par la fonction appelante. Ces paramètres seront supprimés de la mémoire dès que la fonction aura terminé son traitement.

b. Paramètre effectif

Lors de l’activation d’une fonction, les objets sur lesquels opérera la fonction lui sont transmis par l’instruction d’appel de la fonction. Ils contiennent des valeurs à transférer à la fonction au moment de l’appel. Ces objets sont des paramètres effectifs (réels) relatifs à cette activation particulière. Lors de la transmission de ces paramètres, le nombre, l’ordre et le type de ces derniers doivent être obligatoirement respectés.

c. Mode de transmission des paramètres

Lors de l’appel d’une procédure ou d’une fonction, il y aura des échanges...

Spécificités de la programmation modulaire en MATLAB

1. Introduction

MATLAB vous offre la possibilité de créer vos propres fonctions M-files. Une M-files fonction est similaire à un script MATLAB en ce sens qu’il porte également une extension .m.

Néanmoins, une fonction M-files communique avec l’espace de travail MATLAB par le biais d’arguments d’entrée et de sortie.

En plus des fonctions M-files, comme n’importe quel langage de programmation, MATLAB offre d’autres options dans la programmation modulaire, que nous allons voir dans les sections suivantes.

2. Fonction inline

MATLAB dispose d’une commande qui vous permet de créer une expression analytique ou une formule mathématique et de l’affecter à une variable. La commande inline vous permet de créer une fonction directement dans l’espace de travail courant, sans utiliser un M-files. Cette fonction est définie par plusieurs chaînes de caractères. La première chaîne indique la formule ou la fonction mathématique à utiliser, les autres chaînes désignent les paramètres.

Cette méthode est intéressante pour les fonctions relativement simples qui ne seront pas utilisées fréquemment et qui peuvent être écrites en une seule expression. 

La commande inline a la syntaxe suivante :

Fonction inline - Syntaxe

nom_fonction = inline ('expression', {'par1', ..., 'parn'}) 

  • nom_fonction : nom de la fonction

  • expression : une expression mathématique qui constitue le corps de la fonction

  • ’par1’, ..., ’parn’ : les paramètres de la fonction

La déclaration des paramètres peut être optionnelle dans la définition de la commande inline. MATLAB effectue une déclaration implicite. Cette facilité peut être une source d’ambiguïtés dans le cas de fonctions à plusieurs variables. 

Fonction - Exemple n° 7

Écrire un script MATLAB qui permet de représenter graphiquement la fonction mathématique cos(8t) + cos(9t) sur l’intervalle images/07eq01.PNG en utilisant la commande inline.

% fonction_inline 
clear all; close all; clc; 
 
x = 0:2*pi/100:2*pi; 
f = inline('cos(8*t) + cos(9*t)'...

Récursivité

1. Définition

La récursivité est une notion importante de la programmation, un peu abstraite, mais très élégante. Elle permet de résoudre certains problèmes d’une manière simple et rapide ; si on les résolvait avec l’approche itérative, plus de temps et des structures de données intermédiaires seraient nécessaires. C’est cependant une méthode avec laquelle il est facile de se perdre et d’avoir des résultats imprévisibles ou erronés. Lorsque la récursivité est bien utilisée, elle devient un outil simplifiant, lisible et efficace. Mais, souvent, elle est sous-estimée. 

Une fonction récursive comporte un appel à elle-même. Sa syntaxe est la suivante :

Fonction récursive - Syntaxe

function  Fonction_Rec (paramètres) 
. . . 
   Fonction_Rec (valeurs) 
. . . 
end 

alors qu’une fonction non récursive ne comporte que des appels à d’autres fonctions.

Pour être effectivement utilisable, une fonction récursive doit contenir une ou plusieurs conditions d’arrêt afin d’éviter le risque d’une exécution à l’infinie. Cette condition représente un point d’arrêt ou un point terminal.

Utiliser la récursivité revient à définir :

  • une solution pour un ensemble de cas de base (sans utiliser d’appels récursifs) ;

  • une solution dans le cas général à travers une relation de récurrence avec des cas plus simples. Cette relation doit permettre d’arriver à un cas de base en un nombre fini d’étapes.

À chaque appel de la fonction récursive, l’ordinateur réserve de l’espace pour le résultat et empile dans une pile (pile d’exécution) les paramètres, les variables locales et l’adresse de retour. Quand l’ordinateur atteint le point terminal, cela veut dire qu’il est à la fin de l’appel récursif. L’ordinateur commence à dépiler les données déjà empilées, puis il se branche à l’adresse de retour et y place le résultat. Ensuite...