Cours
Applications numériques des modèles mathématiques
Pré-requis
Microsoft windows, algorithmique, analyse numérique.
Objectifs
Initier l’apprenant à la maîtrise d’un langage informatique structuré et aux
techniques de résolution de problèmes d’ingénierie dans ce langage à travers
les étapes de calcul structurant un algorithme.
Outils de travail
Microordinateur équipé de MATLAB
Chapitre 1 : Les programmes informatiques
1.1. La multiplicité des applications
Si l’on s’intéresse aux applications de l’ordinateur, on s’aperçoit qu’elles sont
très nombreuses. En voici quelques exemples :
Etablissement de feuilles de paye, de facture,
Gestion de stocks,
Consultation de base de données,
Détermination du tracé d’une autoroute,
Calcul de la trajectoire d’un satellite,
Suivi médical de patients,
Traitement de texte,
…
C’est une machine totalement dénuée d’intelligence. Il faut tout lui enseigner,
et il fait tout comme il lui a été enseigné, sans « réfléchir ». Cependant,
contrairement aux autres machines qui ne peuvent faire que des nombres
limités de tâches, l’ordinateur est capable d’effectuer une infinité de tâches
sur le traitement de l’information.
L’ordinateur peut traiter autant de problèmes différents grâce à des actions de
base qu’il sait réaliser. Il suffit de lui indiquer l’ordre dans lequel il faut qu’il
effectue ces actions et les données à utiliser. Ces ordres élémentaires sont
appelés instructions et sont rassemblés au sein d’un ensemble appelé
programme.
Donner des ordres à l’ordinateur signifie « être capable de communiquer » avec
lui. Cette communication passe par un langage de communication appelé
langage de programmation dans lequel est écrit le programme.
1.2 Définition
1.2.1. Le programme
Un programme représente un assemblage et un enchaînement d’instructions
élémentaires écrit dans un langage de programmation, et exécuté par un
ordinateur afin de traiter les données d’un problème et envoyer les résultats.
1.2.2. L’algorithme
Un algorithme lui est l’enchaînement des actions (instructions) nécessaires
pour faire exécuter une tâche à un ordinateur (résoudre un problème) ; il
s’écrit en pseudo langage de programmation (appelé langage algorithmique). Il
a l’avantage d’être traduit facilement dans tous les langages de
programmation.
L’algorithmique, l’art d’écrire des algorithmes, permet de se focaliser sur la
procédure de résolution du problème sans avoir à se soucier des spécificités
d’un langage particulier. Pour résoudre un problème, il est vivement conseillé
de réfléchir d’abord à l’algorithme avant d’aborder le programme proprement
dit, c'est-à-dire d’écrire le programme en langage de programmation.
Schématiquement, la mise en œuvre d’un programme se présente comme suit:
1.3. Données et résultats
Supposez qu’un enseignant dispose d’un ordinateur et d’un programme de
calcul de moyenne de notes. Pour s’exécuter, ce programme nécessite qu’on
lui fournisse les notes dont on cherche la moyenne. Nous les appellerons
informations données ou plus simplement données.
En retour, le programme va fournir la moyenne recherchée. Nous l’appellerons
information résultats ou plus simplement résultats. Si le programme a été
prévu pour cela, il peut, bien entendu, fournir d’autres résultats tels que le
nombre de notes supérieures à la moyenne.
De la même manière, un programme de paye nécessite des informations
données : noms des employés, situation de famille, numéro S/S., nombre
d’heures supplémentaires, etc. Les résultats seront imprimés sur les différents
bulletins de paye : identification de l’employé, salaire brut, retenue S/S., etc.
1.4. Schéma récapitulatif
En définitive, deux étapes apparaissent dans l’utilisation d’un ordinateur :
a) La transmission du programme à l’ordinateur. Il est, soit fourni
directement (clavier, cartes perforées), soit recherché en archives.
b) L’exécution. Ce dernier utilise des données et fournit des résultats. Là
encore, l’échange d’information peut se faire soit avec l’homme, soit avec
des archives.
Chapitre 2. Généralités sur les langages de
programmation
2.1. Définition
D'un point de vue mathématique, un langage de programmation est un
langage formel construit sur un alphabet (ensemble de symboles). Dans cet
alphabet, on trouve plusieurs choses :
des lettres et des chiffres ;
des mots-clés (combinaisons de lettres et parfois de chiffres) ;
des caractères :
correspondant à des opérateurs : par exemple « = », « < », « & » ;
ou pas, comme « { », « _ », …
L'assemblage de ces symboles forme les « mots » du langage de
programmation. Pour qu'un mot appartienne au langage, il doit vérifier
certaines contraintes exprimées grâce à la théorie des langages dans une
grammaire formelle : c'est la « syntaxe » du langage de programmation.
En associant une sémantique - généralement une opération - à chaque mot,
on définit le comportement de la machine. La mise en relation de mots va
donner un programme informatique.
2.2 programmation
Suivant le langage utilisé, un programme doit être interprété ou compilé en
passant par un autre langage qui pourra être compris par la machine :
l'assembleur ou même en code binaire.
D'un point de vue pratique, un langage de programmation permet l'écriture de
programmes de manière compréhensible par un être humain. Le
programmeur n'a pas besoin de connaître le langage machine, dit « de bas
niveau », pour écrire un programme. Le langage de programmation fournit une
abstraction de niveau supérieur pour utiliser une machine.
Il existe des milliers de langages de programmation, la plupart d'entre eux
étant réservés à des domaines spécialisés. Ils font l'objet de recherches
constantes dans les universités et dans l'industrie.
2.3 Syntaxe
Outre les particularités sémantiques des langages, ils utilisent également des
grammaires différentes qui proposent souvent des points communs.
Les particularités syntaxiques ne sont souvent que des détails qui ne changent
pas les fonctionnalités proposées par les langages de programmation. Par
exemple, dans Objective-C2, il est possible d'utiliser les accesseurs avec deux
syntaxes différentes pour le même résultat :
La nuance est importante, car en C, la dernière instruction d'un bloc doit
comprendre un point-virgule (;) qui est un terminateur alors qu'en Pascal, il
est inutile, voire fautif, d'en mettre un (cela consiste à ajouter une instruction
vide en fin de bloc). De même, le caractère ; peut être utilisé en C comme
instruction vide, ce qui n'aurait pas de sens en Pascal.
Les langages utilisant un terminateur sont réputés engendrer moins de fautes
de syntaxe que ceux utilisant un séparateur.
2.4. Balisage
Certains langages utilisent des « balises » délimitant des « environnements ».
Une balise est généralement un mot-clé associé à plusieurs caractères : \ ; <
> ; etc.
Les langages permettant de générer du code source ou des documents
utilisent souvent des balises. Par exemple, PHP et JSP utilisent des balises
pour délimiter les parties de code à interpréter. XML est également un langage
à balises, qui permet de définir des langages de programmation comme XSP
ou XSLT.
2.5. Stratégie d’évaluation
Une stratégie d'évaluation est un ensemble de règles qui décrivent comment
évaluer une expression dans un langage de programmation. La stratégie
d'évaluation définit à quel moment les arguments des fonctions et opérateurs
sont évalués ou réduits.
On distingue essentiellement deux stratégies :
l'évaluation stricte : les arguments des fonctions sont toujours évalués
avant que la fonction ne soit appliquée.
l'évaluation paresseuse ou évaluation retardée : les arguments ne sont
évalués que lorsque leur valeur est effectivement requise. Ce type
d'évaluation est généralement utilisé dans les langages fonctionnels.
La plupart des langages ont un système d'évaluation stricte, et utilisent une
forme d'évaluation paresseuse pour les expressions booléennes (évaluation
court-circuit). Cependant il est possible de créer une évaluation paresseuse
dans un langage à évaluation stricte. Par exemple, Scheme fournit la fonction
delay qui retarde l'évaluation d'une expression et force qui oblige l'évaluation.
2.6. Gestion de la mémoire
Les langages de programmation offrent plus ou moins de libertés au
programmeur en ce qui concerne la gestion de la mémoire :
Soit elle est entièrement sous le contrôle du développeur qui doit gérer
lui-même l'espace mémoire disponible, les allocations et libérations. C'est
le cas pour les langages de bas niveau, comme le C.
Soit tout peut être contrôlé par le compilateur ou par le moteur
d’exécution (Java) : même s'il est possible de donner des directives, la
machine virtuelle gère elle-même la mémoire à l'aide d'un ramasse-
miettes. C'est ainsi que fonctionnent les langages de haut niveau, comme
Python.
Certains langages proposent un système intermédiaire. En Objective-C, il est
possible de la gérer directement, d'activer la gestion automatique de la
mémoire ou d'utiliser un système de plus haut niveau.
2.7. Les exceptions
Les exceptions sont des cas limites d'exécution du programme (division par 0,
etc.).
Lorsqu'elles sont générées, le déroulement du programme est interrompu. Au
contraire d'une erreur qui interrompt brutalement le programme, la gestion
d'une exception permet d'interrompre proprement un programme, de corriger
l'erreur et d'en reprendre l'exécution.
La gestion des exceptions peut être différente selon les langages ; soit :
Il n'y en a pas (C) ;
Elle signale l'exception sans la traiter (C++, C#, Java) ;
Elle permet un traitement : par exemple, la modification du programme
par le programme lui-même (comme en Python) pour reprendre une
exécution « normalement ».
2.8. Principaux paradigmes
Chaque langage de programmation est différent. Une solution exprimée dans
un certain langage peut « ressembler » à une solution exprimée dans un autre
langage ; dans ce cas, on dit que les langages utilisent le même paradigme (ou
style). Deux programmes fournissant la solution au même problème, mais
écrits avec des paradigmes différents seront fondamentalement très différents.
De nombreux langages appartiennent simultanément à plusieurs catégories :
ils sont dits « multi-paradigmes ». Par exemple, C++ permet la programmation
impérative, orientée objet et la programmation générique (à base de classes et
de fonctions paramétrées nommées « templates ». Common Lisp est à la fois
impératif, fonctionnel, orienté objet ; son caractère « programmable » (un
langage de programmation programmable…) lui permet d'intégrer d'autres «
paradigmes » de programmation en son sein (par exemple : la programmation
logique et la programmation par contraintes).
2.8.1. Langages impératifs et procéduraux
On distingue deux types de langages impératifs. D'une part les langages
machines et assembleurs. Ceci explique que les premiers langages de
programmation apparus soient des langages impératifs : une instruction du
langage correspond à un ensemble d'instructions du langage machine. Les
structures de données et opérations sont plus complexes qu'au niveau de la
machine, mais le paradigme suivi reste le même.
Les langages procéduraux forment la seconde famille de langages impératifs.
Une procédure, appelée également fonction, est une suite d'instructions
devant être effectuée dans un ordre précis. On distingue parfois procédure et
fonction par la caractéristique qu'une procédure ne renvoie pas de résultat.
Parmi les langages impératifs figurent COBOL, Fortran, Pascal ou encore le C.
2.8.2. Langages déclaratifs
Un langage déclaratif ne décrit pas comment est réalisée une opération,
comme dans un langage impératif, mais décrit le problème lui-même, sans
s'intéresser au contexte.
Figurent parmi les langages déclaratifs Oz, Prolog ou encore Clips.
2.8.3. Langages logiques
Un programme logique est composé de faits et de règles qui sont traités par
un moteur d'inférence.
Prolog fut le premier langage de ce type à être fonctionnel sur un ordinateur.
2.8.4. Langages fonctionnels
Dans ce paradigme, l'opération de base n'est pas l'affectation, contrairement
aux langages impératifs, mais l'évaluation de fonctions. Ce paradigme est donc
principalement efficace pour modéliser des problèmes qui s'expriment par des
valeurs de données, comme en mathématiques, et non pas des états qui
changent au cours de l'exécution.
Certains langages fonctionnels, dit « purs », interdisent totalement les effets
de bord, tels que la mutation des données où une variable est liée à une valeur
non modifiable. D'autres, intègrent certains traits des langages impératifs où
les variables peuvent changer de valeur au cours de l'exécution.
Quelques exemples de langages fonctionnels : Objective Caml (langage
fonctionnel et impératif), Haskell (langage fonctionnel pur à évaluation
paresseuse), Python (propose certaines fonctionnalités du style fonctionnel
comme l'utilisation de fonctions lambda ou la compréhension de listes).
2.8.5. Langages à pile
Ces langages ne manipulent que des piles de données où les opérations sont
effectuées sur les éléments du sommet d'une ou plusieurs piles.
Des exemples typiques sont les langages Forth, Factor, PostScript, Joy, Cat
ou RPL (HP 48).
2.8.6. Langages à objet
Les langages à objets offrent une abstraction à la machine : l'objet est une
structure sémantique indépendante qui rassemble des données et des
traitements.
En se basant sur une méthode de conception à objet et sur un langage de
modélisation à objet, on peut facilement implanter un concept au moyen d'un
langage de programmation à objets.
Parmi les langages à objets sont généralement classés Ruby et Smalltalk,
purement objet, c'est-à-dire que tout est objet, depuis les types de base,
jusqu'à l'interprète ou les blocs d'instructions ; le C++, extension de C
permettant d'utiliser des objets mais où tout n'est pas objet ; Python, très
orienté objet mais qui ne respecte pas tous les principes de la programmation
objet comme l'encapsulation.
2.9 Utilisation
On peut aussi classer les langages de programmation en fonction de leur
utilisation car beaucoup de langages sont spécialisés à une application ou à
un domaine particulier.
2.9.1. Langages de définition de données
Un langage de définition de données ne permet pas d'effectuer de traitement
mais de décrire des structures de données (listes, arbres …) et des instances
de ces structures.
XML est par exemple un langage permettant la représentation de données
sous forme de structure arborescente ; la partie DDL de SQL sert à décrire des
données relationnelles. Les langages qui décrivent des documents peuvent
également être considérés comme des langages de définition de données.
Ainsi, LaTeX est un exemple de langage de définition de données qui permet
d'écrire un document en centralisant sa mise en forme. LaTeX est compilé vers
d'autres langages de description de document, généralement plus « bas niveau
» comme PDF ou Postscript.
Ces langages ne sont habituellement pas considérés comme des langages de
programmation.
Cependant les codes sources produits avec ces langages présentent certains
traits de codes sources de programmes comme des structures de contrôle
(conditions, boucles...) et des moyens d'interaction avec le système (variable
d'environnement, formulaires...). Ils sont donc cités ici à titre indicatif, mais
sont à la frontière de la programmation.
2.9.2. Langages de requête
Les langages de requêtes sont destinés à interroger et manipuler les bases de
données.
SQL est un langage de requête utilisé par un grand nombre de systèmes de
gestion de bases de données (SGBD) tels que Oracle, SQL Server ou MySQL.
2.9.3. Langages pour pages Web dynamiques
Ce type de langages est utilisé pour une plus grande interaction entre un client
et un serveur.
Du côté du serveur Web, cela permet de produire des pages dont le contenu
est généré à chaque affichage. Ces langages sont par ailleurs souvent couplés
avec un langage pour communiquer avec des bases de données (exemple :
PHP).
Côté client (en général le navigateur web), les langages de réagir à certaines
actions de l'utilisateur sans avoir à questionner le serveur. Par exemple, le
JavaScript d'une page Web peut réagir aux saisies de l'utilisateur dans un
formulaire (et vérifier le format des données).
Certains langages permettent de développer à la fois les aspects client et
serveur. C'est le cas d'Ocsigen, de Hop ou bien encore du Server-Side
JavaScript.
2.9.4. Langages de programmation théorique
On désigne parfois par langages de programmation théoriques les systèmes
formels utilisés pour décrire de façon théorique le fonctionnement des
ordinateurs. Ils ne servent pas à développer des applications mais à
représenter des modèles et démontrer certaines de leurs propriétés.
On peut citer la machine de Turing et le 𝜆 − 𝑐𝑎𝑙𝑐𝑢𝑙 de Church, qui datent tous
les deux des années 1930, et donc antérieurs à l'invention de l'ordinateur. Le
𝜆 − 𝑐𝑎𝑙𝑐𝑢𝑙 a par la suite servi de base théorique à la famille des langages de
programmation fonctionnelle. Dans les années 1980, Robin Milner a mis au
point le 𝜆 − 𝑐𝑎𝑙𝑐𝑢𝑙 pour modéliser les systèmes concurrents.
Chapitre 3 : Introduction à l’environnement MATLAB
3.1. Introduction - Historique
MATLAB est une abréviation de Matrix LABoratory, écrit à l’origine, en
Fortran, par C. Moler.
MATLAB était destiné à faciliter l’accès au logiciel matriciel développé
dans les projets LINPACK et EISPACK. La version actuelle, écrite en C par
the MathWorks Inc., existe en version professionnelle et en version
étudiant. Sa disponibilité est assurée sur plusieurs plateformes : Sun,
Bull, HP, IBM, compatibles PC (DOS, Unix ou Windows), Macintoch,
iMac et plusieurs machines parallèles.
MATLAB est un environnement puissant, complet et facile à utiliser
destiné au calcul scientifique. Il apporte aux ingénieurs, chercheurs et à tout
scientifique un système interactif intégrant calcul numérique et
visualisation. C'est un environnement performant, ouvert et programmable
qui permet de remarquables gains de productivité et de créativité.
MATLAB est un environnement complet, ouvert et extensible pour
le calcul et la visualisation. Il dispose de plusieurs centaines (voire
milliers, selon les versions et les modules optionnels autour du noyau
Matlab) de fonctions mathématiques, scientifiques et techniques. L’approche
matricielle de MATLAB permet de traiter les données sans aucune limitation
de taille et de réaliser des calculs numérique et symbolique de façon fiable et
rapide. Grâce aux fonctions graphiques de MATLAB, il devient très facile de
modifier interactivement les différents paramètres des graphiques pour les
adapter selon nos souhaits.
L'approche ouverte de MATLAB permet de construire un outil sur mesure. On
peut inspecter le code source et les algorithmes des bibliothèques de fonctions
(Toolboxes), modifier des fonctions existantes et ajouter d’autres.
MATLAB possède son propre langage, intuitif et naturel qui permet des gains
de temps de CPU spectaculaires par rapport à des langages comme le C, le
Turbo Pascal et le Fortran. Avec MATLAB, on peut faire des liaisons de façon
dynamique, à des programmes C ou Fortran, échanger des données avec
d'autres applications (via la DDE Dynamic Data Exchange :
MATLAB serveur ou client) ou utiliser MATLAB comme moteur
d'analyse et de visualisation.
MATLAB comprend aussi un ensemble d'outils spécifiques à des
domaines, appelés Toolboxes (ou Boîtes à Outils). Indispensables à la plupart
des utilisateurs, les Boîtes à Outils sont des collections de fonctions qui
étendent l'environnement MATLAB pour résoudre des catégories spécifiques
de problèmes. Chapitre I : Introduction à l’environnement MATLAB.
MATLAB permet le travail interactif soit en mode commande, soit en mode
programmation ; tout en ayant toujours la possibilité de faire des
visualisations graphiques. Considéré comme l’un des meilleurs langages de
programmation, MATLAB possède les particularités suivantes par rapport à
ces langages :
la programmation facile,
la continuité parmi les valeurs entières, réelles et complexes,
la gamme étendue des nombres et leur précision,
la bibliothèque mathématique très compréhensive,
l’outil graphique qui inclut les fonctions d’interface graphique et les
utilitaires,
la possibilité de liaison avec les autres langages classiques de
programmation (C ou Fortran).
La bibliothèque des fonctions mathématiques dans MATLAB donne
des analyses mathématiques très simples. En effet, l’utilisateur peut
exécuter dans le mode commande n’importe quelle fonction mathématique
se trouvant dans la bibliothèque sans avoir à recourir à la programmation.
Pour l’interface graphique, des représentations scientifiques et même
artistiques des objets peuvent être créées sur l’écran en utilisant les
expressions mathématiques. Les graphiques sur MATLAB sont simples et
attirent l’attention des utilisateurs, vu les possibilités importantes offertes par
ce logiciel.
MATLAB n’est pas le seul environnement de calcul scientifique, il
existe d’autres concurrents comme Maple, Mathematica, MathCAD, Maxima.
Il existe même des logiciels libres qui sont des clones de MATLAB comme
Scilab et Octave.
3.2. L’environnement MATLAB
MATLAB affiche au démarrage plusieurs fenêtres. Selon la version on
peut trouver les fenêtres suivantes :
Current Folder: indique le répertoire courant ainsi que les fichiers
existants.
Workspace: indique toutes les variables existantes avec leurs types et
valeurs.
Command History: garde la trace de toutes les commandes entrées par
l’utilisateur.
Command Window: utilisée pour formuler nos expressions et
interagir avec MATLAB. C’est la fenêtre que nous utilisons tout au long
de ce chapitre.
Figure 3.1 : L’environnement MATLAB
MATLAB est beaucoup plus qu'un langage de programmation. Il s'agit
d'une console d'exécution (shell ) permettant d'exécuter des fonctions,
d'attribuer des valeurs à des variables, etc. La console MATLAB permet
d'effectuer des opérations mathématiques, de manipuler des matrices et de
tracer facilement des graphiques.
Le langage MATLAB n'est pas un langage compilé, à chaque appel d'un SCRIPT
(ou d'une FUNCTION), le logiciel lit et exécute les programmes ligne par ligne.
L’utilisateur peut grâce à l'invite MATLAB affecter des valeurs à des variables
et effectuer des opérations sur ces variables. Par exemple :
Figure 3.2 : affectation directe de variables (command window)
Ici, il faut noter que lorsque l'utilisateur ne fixe pas de variable de sortie,
MATLAB place le résultat d'une opération dans ans. Il est toujours possible de
connaître les variables utilisées et leur type à l'aide de la fonction whos. Par
exemple, pour les manipulations précédentes :
Figure 3.3 : commande whos (command window)
La solution de x+y est donc perdue. Il est donc préférable de toujours donner
des noms aux variables de sortie :
>> x=4
x=
4
>>y=2
y=
2
>>a=x+y
a=
6
La fonction clear permet d'effacer des variables. Par exemple :
Figure 3.4 : commande clear (command window)
La commande whos exécutée après clear n’a produit aucune sortie car la
commande clear avait déjà effacé toutes les variables.
Le signe de pourcentage % permet de mettre ce qui suit sur une ligne en
commentaire (MATLAB n'en tiendra pas compte à l'exécution).
Pour les variables de type caractère : char, la déclaration se fait entre
apostrophes. Il est possible de concaténer (lier) des mots à l'aide des crochets.
>> mot1=’Génie’ ;
>>mot2=’Civil’ ;
>>mot1_2=[mot1’ ‘mot2]
Mot1_2=
Génie Civil
3.3. Les fichiers SCRIPT et FUNCTION.
Pour des tâches répétitives, il est pratique et judicieux d'écrire de courts
programmes, qu’on sauvegarde, pour effectuer les calculs désirés. Il existe
deux types de fichiers qui peuvent être programmés avec MATLAB : les fichiers
SCRIPT et FUNCTION. Dans les deux cas, il faut lancer l'éditeur de fichier et
sauvegarder le fichier avec l'extension .m.
Le fichier SCRIPT permet de lancer les mêmes opérations que celles écrites
directement à l'invite MATLAB. Toutes les variables utilisées dans un SCRIPT
sont disponibles à l'invite MATLAB.
Cette approche est définie en Matlab par les M-Files, qui sont des fichiers
pouvant contenir les données, les programmes (scripts) ou les fonctions que
nous développons.
Pour créer un M-Files il suffit de taper la commande edit, ou tout simplement
aller dans le menu : File New M-Files (ou cliquer sur l’icône ).
Une fenêtre d’édition comme celle- ci va apparaître :
Par exemple, le fichier test.m qui reprend l'exemple précédent:
MATLAB contient un grand nombre de fonctions prédéfinies comme sin, cos,
sqrt, sum, etc..
Il est possible de créer nos propres fonctions en écrivant leurs codes «
source » dans des fichiers M-Files (portant le même nom de fonction) en
respectant la syntaxe suivante :
Où : r 1 ...r n sont les valeurs retournées, et arg 1 ...arg n sont les arguments.
Le rôle d’une fonction est d'effectuer des opérations sur une ou plusieurs
entrées pour obtenir un résultat qui sera appelé sortie.
Par exemple :
On obtient :
4. Les principales constantes, fonctions et commandes
MATLAB définit les constantes suivantes :
Parmi les fonctions fréquemment utilisées, on peut noter les suivantes :
MATLAB offre beaucoup de commandes pour l’interaction avec
l’utilisateur. Nous nous contentons pour l’instant d’un petit ensemble, et
nous exposons les autres au fur et à mesure de l’avancement du cours.
5. Les vecteurs et les matrices
5.1 Les nombres en MATLAB
MATLAB utilise une notation décimale conventionnelle, avec un point décimal
facultatif ‘.’ et le signe ‘+’ ou ‘–‘ pour les nombres signés. La notation
scientifique utilise la lettre ‘e’ pour spécifier le facteur d’échelle en puissance
de 10. Les nombres complexes utilisent les caractères ‘i’ et ‘j’
(indifféremment) pour designer la partie imaginaire. Le tableau suivant
donne un résumé :
MATLAB utilise toujours les nombres réels (double précision) pour faire les
calculs, ce qui
permet d’obtenir une précision de calcul allant jusqu’à 16 chiffres significatifs.
Mais il faut noter les points suivants :
Le résultat d’une opération de calcul est par défaut affiché avec
quatre chiffres après la virgule.
Pour afficher davantage de chiffres utiliser la commande format long (14
chiffres après la virgule).
Pour retourner à l’affichage par défaut, utiliser la commande format
short.
Pour afficher uniquement 02 chiffres après la virgule, utiliser la
commande format bank.
Pour afficher les nombres sous forme d’un ratio, utiliser la commande
format rat.
Par exemple :
La fonction vpa peut être utilisée afin de forcer le calcul et présenter
plus de décimaux significatifs en spécifiant le nombre de décimaux désirés.
Par exemple :
5.2 Les opérations mathématiques.
L'élément de base de MATLAB est la matrice. C'est-à-dire qu'un scalaire est
une matrice de dimension 1x1, un vecteur colonne de dimension n est une
matrice n x 1, un vecteur ligne de dimension n, une matrice 1 x n.
Contrairement aux langages de programmation usuels, il n'est pas obligatoire
de déclarer les variables avant de les utiliser et, de ce fait, il faut prendre toutes
les précautions dans la manipulation de ces objets.
Les scalaires se déclarent directement, par exemple :
Les vecteurs lignes se déclarent en séparant les éléments par des espaces ou
des virgules de:
Les vecteurs colonnes se déclarent en séparant les éléments par des points-
virgules :
Il est possible de transposer un vecteur à l'aide de la fonction transpose:
Le double point ( :) est l'opérateur d'incrémentation dans MATLAB. Ainsi,
pour créer un vecteur ligne des valeurs de 0 à 1 par incrément de 0.2, il suffit
d'utiliser :
Par défaut, l'incrément est de 1. Ainsi, pour créer un vecteur ligne des valeurs
de 0 à 5 par incrément de 1, il suffit d'utiliser :
On peut accéder à un élément d'un vecteur et même modifier celui-ci
directement :
La fonction linspace :
La création d’un vecteur dont les composants sont ordonnés par intervalle
régulier et avec un nombre d’éléments bien déterminé peut se réaliser avec la
fonction :
linspace (début, fin, nombre d’éléments)
Le pas d’incrémentation est calculé automatiquement par Matlab selon la
formule :
Par exemple :
Les opérations usuelles d'addition, de soustraction et de multiplication par
scalaire sur les vecteurs sont définies dans MATLAB :
On peut aussi créer des matrices, par exemple :
Les matrices peuvent aussi être construites directement :
On peut évidemment avoir accès aux éléments de la matrice par :
Il est possible d'inverser inv() et de transposer transpose()les matrices :
Un des intérêts de MATLAB est la possibilité d'utiliser directement
les opérations mathématiques prédéfinies pour les matrices. L'addition
et la soustraction sont directes (attention aux dimensions) ainsi que la
multiplication par un scalaire :
Il est utile de noter les possibilités suivantes :
L’accès à un élément de la ligne i et la colonne j se fait par : A(i,j)
L’accès à toute la ligne numéro i se fait par : A(i,:)
L’accès à toute la colonne numéro j se fait par : A(:,j)
Par exemple :
Les dimensions d’une matrice peuvent être acquises en utilisant la fonction
size. Cependant, avec une matrice A de dimension m × n le résultat de cette
fonction est un vecteur de deux composants, une pour m et l’autre pour n.
Ici, la variable d contient les dimensions de la matrice A sous forme
d’un vecteur. Pour obtenir les dimensions séparément on peut utiliser la
syntaxe :
5.3 Génération automatique des matrices
Dans MATLAB, il existe des fonctions qui permettent de générer
automatiquement des matrices particulières. Dans le tableau suivant nous
présentons les plus utilisées :
6. Application
1. On veut vérifier que la multiplication de matrices n'est pas
commutative. Soient deux matrices :
3 4 4 4 5 8
𝐴=(6 5 3) 𝐵 = (3 11 12)
10 8 2 2 1 7
Réalisez un code MATLAB qui permet, pour les matrices A et B données, de
vérifier que :
𝐴∗𝐵−𝐵∗𝐴 ≠0
2. En utilisant les matrices définies au premier exercice, vérifiez l'identité
suivante :
(𝐴 + 𝐵)𝑇 = 𝐴𝑇 + 𝐵 𝑇
Utilisez la fonction transpose de MATLAB pour transposer les matrices.
3. On désire résoudre un système d'équations algébriques linéaires, c'est-
à-dire, un système représenté par :
𝐴𝑥 = 𝑏
Avec A, une matrice de dimension n x n, x et b, des vecteurs colonnes de
dimension n. La solution de ce système est donnée par :
𝑥 = 𝐴−1 𝑏
En utilisant la fonction inv de MATLAB pour inverser la matrice, résoudre le
système décrit par la matrice A, définie au premier exercice et le vecteur b, la
première colonne de la matrice B, de ce même exercice.
Chapitre 4 : Introduction à la programmation avec
MATLAB
4.1. Introduction
Nous avons vu jusqu’à présent comment utiliser MATLAB pour effectuer
des commandes ou pour évaluer des expressions en les écrivant dans la ligne
de commande, par conséquent les commandes utilisées s’écrivent
généralement sous forme d’une seule instruction (éventuellement sur
une seule ligne).
Cependant, il existe des problèmes dont la description de leurs solutions
nécessite plusieurs instructions, ce qui réclame l’utilisation de plusieurs
lignes. Comme par exemple la recherche des racines d’une équation de second
degré (avec prise en compte de tous les cas possibles).
Une collection d’instructions bien structurées visant à résoudre un problème
donné s’appelle un programme. Dans cette partie, on va présenter les
mécanismes d’écriture et d’exécution des programmes en MATLAB.
4.2. Opérateurs de comparaison et opérateurs logiques
4.2.1 Les opérateurs de comparaison sont:
= = : égale à (X= = Y)
> : Strictement supérieur à (X > Y)
< : Strictement inférieur à (X< Y)
>= : supérieur ou égale à (X>= Y)
<= : inférieur ou égale à (X<= Y)
~= : différent de (X~=Y)
4.2.2 Les opérateurs logiques sont:
& : et (and) (X &Y)
| : ou (or) (X|Y)
- : Non (not) X (-X)
3. Les entrées/sorties
3.1 Entrée au clavier
L’utilisateur peut saisir des informations au clavier grâce à la commande x =
input(...).
4.3.2 Sortie à l’écran
Pour afficher quelque chose à l’écran, l’utilisateur peut utiliser la commande
disp, qui affiche le contenu d’une variable (chaîne de caractères, vecteur,
matrice...).
4.4. Instructions de contrôle
Les instructions de contrôle sous Matlab sont tr`es proches de celles
existant dans d’autres langages de programmation.
4.4.1 L’instruction while :
L’instruction while répète l’exécution d’un groupe d’instructions un nombre
indéterminé de fois selon la valeur d’une condition logique. Elle a la forme
générale suivante :
Tant que l’expression de while est évaluée à vrai (true), l’ensemble
d’instructions s’exécutera en boucle.
Exemple :
Faire un programme sous Matlab qui calcule la somme suivante:
S=1+2/2! +3/3!+… on arrête le calcul quand S>2.5
4.4.2 L’instruction if :
L’instruction if est la plus simple et la plus utilisée des structures de contrôle
de flux.
Elle permet d’orienter l’exécution du programme en fonction de la valeur
logique d’une condition. Sa syntaxe générale est la suivante :
Si la condition est évaluée à vrai (true), les instructions entre le if et le end
seront exécutées,
sinon elles ne seront pas (ou si un else existe les instructions entre le
else et le end seront exécutées). S’il est nécessaire de vérifier plusieurs
conditions au lieu d’une seule, on peut utiliser des clauses elseif pour
chaque nouvelle condition, et à la fin on peut mettre un else dans le cas ou
aucune condition n’a été évaluée à vrai.
Voici donc la syntaxe générale :
Exemple :
Faire un programme sous MATLAB qui résout le problème suivant:
1. y = x si x<0
2. y=x² si x>0
3. y=10 si x=0
La valeur de y est:
y = 36
Exemple :
Faire un programme sous MATLAB qui résout le problème suivant:
1. y = x si 𝑥 < 0
2. y=x² si 𝑥 ≥ 0
La valeur de y est:
y=
36
Exemple :
Créons un programme qui trouve les racines d’une équation de second degré
désigné par : 𝑎𝑥 2 + 𝑏𝑥 + 𝑐 = 0. Voici le M-File qui contient le programme
(il est enregistré avec le nom ‘Equation2deg.m’ ).
Si nous voulons exécuter le programme, il suffit de taper le nom du
programme :
Ainsi, le programme va être exécuté en suivant les instructions écrites dans
son M-File. Si une instruction est terminée par un point virgule, alors la valeur
de la variable concernée ne sera pas affichée, par contre si elle se termine
par une virgule ou un saut à la ligne, alors les résultats seront affichés.
Remarque :
Il existe la fonction solve prédéfinie en MATLAB pour trouver les racines d’une
équation (et beaucoup plus). Si nous voulons l’appliquer sur notre exemple, il
suffit d’écrire :
4.4.3. L’instruction switch :
L’instruction switch exécute des groupes d’instructions selon la valeur
d’une variable ou d’une expression. Chaque groupe est associé à une clause
case qui définit si ce groupe doit être exécuté ou pas selon l’égalité de la
valeur de ce case avec le résultat d’évaluation de l’expression de switch.
Si tous les cases n’ont pas été acceptés, il est possible d’ajouter une clause
otherwise qui sera exécutée seulement si aucun case n’est exécuté.
Donc, la forme générale de cette instruction est :
Exemple :
L’exécution va donner :
Entrez un nombre : 50
x n'est pas 0 ou 10 ou 100
4.4.4 L’instruction for :
L’instruction for répète l’exécution d’un groupe d’instructions un nombre
déterminé de fois.
Elle a la forme générale suivante :
expression_vecteur correspond à la définition d’un vecteur : début : pas : fin
ou début : fin
La variable va parcourir tous les éléments du vecteur défini par l’expression,
et pour chacune il va exécuter le groupe d’instructions.
Exemple :
Dans le tableau suivant, nous avons trois formes de l’instruction for
avec le résultat MATLAB :
4.5. Les graphiques et la visualisation des données en
MATLAB
Partant du principe qu’une image vaut mieux qu’un long discours, MATLAB
offre un puissant système de visualisation qui permet la présentation et
l’affichage graphique des données d’une manière à la fois efficace et facile.
Dans cette partie, nous allons présenter les principes de base indispensables
pour dessiner des courbes en MATLAB.
4.5.1. La fonction plot :
La fonction plot est utilisable avec des vecteurs ou des matrices. Elle
trace des lignes en reliant des points de coordonnées définis dans ses
arguments, et elle a plusieurs formes :
Si elle contient deux vecteurs de la même taille comme arguments
: elle considère les valeurs du premier vecteur comme les éléments de l’axe
X (les abscisses), et les valeurs du deuxième vecteur comme les éléments de
l’axe Y (les ordonnées).
Exemple:
Si elle contient un seul vecteur comme argument : elle considère les
valeurs du vecteur comme les éléments de l’axe Y (les ordonnées), et leurs
positions relatives définiront l’axe X (les abscisses).
Exemple :
Si elle contient une seule matrice comme argument : elle considère les valeurs
de chaque colonne comme les éléments de l’axe Y, et leurs positions
relatives (le numéro de ligne) comme les valeurs de l’axe X. Donc, elle
donnera plusieurs courbes (une pour chaque colonne).
Exemple :
Si elle contient deux matrices comme arguments : elle considère les
valeurs de chaque colonne de la première matrice comme les éléments
de l’axe X, et les valeurs de chaque colonne de la deuxième matrice comme
les valeurs de l’axe Y.
Exemple :
4.5.2. Modification de l’apparence d’une courbe :
Il est possible de manipuler l’apparence d’une courbe en modifiant la couleur
de la courbe, la forme des points de coordonnées et le type de ligne reliant les
points.
Pour cela, on ajoute un nouvel argument (qu’on peut appeler un marqueur)
de type chaîne de caractères à la fonction plot comme ceci :
plot (x, y, ’marqueur’)
Le contenu du marqueur est une combinaison d’un ensemble de
caractères spéciaux rassemblés dans le tableau suivant :
4.5.3. Annotation d’une figure :
Dans une figure, il est préférable de mettre une description textuelle
aidant l’utilisateur à comprendre la signification des axes et de connaître
le but ou l’intérêt de la visualisation concernée.
Il est très intéressant également de pouvoir signaler des emplacements
ou des points significatifs dans une figure par un commentaire signalant
leurs importances.
Pour donner un titre à une figure contenant une courbe nous utilisons
la fonction title comme ceci :
>> title('titre de la figure')
Pour donner un titre pour l’axe vertical des ordonnées y, nous
utilisons la fonction ylabel comme ceci :
>> ylabel('Ceci est l''axe des ordonnées Y')
Pour donner un titre pour l’axe horizontal des abscisses x, nous
utilisons la fonction xlabel comme ceci :
>> xlabel('Ceci est l'axe des abscisses X')
Pour écrire un texte (un message) sur la fenêtre graphique à une
position indiquée par les coordonnées x et y, nous utilisons la fonction
text comme ceci :
>> text(x, y, 'Ce point est important')
Pour mettre un texte sur une position choisie manuellement par
la souris, nous utilisons la fonction gtext, qui a la syntaxe suivante :
>> gtext('Ce point est choisi manuellement')
Pour mettre un quadrillage (une grille), nous utilisons la commande grid
(ou grid on).
Pour l’enlever nous réutilisons la même commande grid (ou grid off).
Exemple :
Dessinons la fonction : 𝑦 = −2𝑥 3 + 𝑥 2 − 2𝑥 + 4 pour x variant de −4 jusqu’à 4,
avec un pas = 0.5
4.5.4. Utiliser plot avec plusieurs arguments
On peut utiliser plot avec plusieurs couples (x,y) ou triplets (x ,y,
‘marqueur’) comme arguments.
Exemple :
L’exemple qui suit:
produit la sortie graphique suivante :
Produit la sortie suivante :
NB remarquer la position de la légende. Elle est définie par l’argument ‘tl’ de
la fonction legend(‘f(x)’,’d/dx f(x)’,’tl’)
‘TL’ signifie « top left » ou encore angle supérieur gauche.
La liste complète des options définissant la position de la légende est la
suivante :
4.5.5. Représentation graphique 3D
Supposons, par exemple que l'on veuille représenter la surface définie
par la fonction z=sin(x*y) sur le carré suivant [−𝑝𝑖/2, 𝑝𝑖/2] × [−𝑝𝑖/2, 𝑝𝑖/2]
à l'aide d'une grille de points 31 × 31. On utilise la séquence de commandes
:
On peut modifier l'angle de vue via la commande view en spécifiant
soit un point d'observation ou deux angles d'élévation. Noter que la
commande view(2) déclenche directement une vue de dessus. On peut
également choisir l'angle de vue à la souris en activant l'option rotate3d
on et on annule ce mode par la commande rotate3d off. De même la commande
zoom in permet d'effectuer des zooms à la souris, seulement en vue plane!
Il existe par ailleurs de nombreuses commandes permettant de contrôler
les palettes de couleurs utilisées pour la représentation graphique, en
particulier la commande colormap.
Signalons une option intéressante permettant de lisser les couleurs : shading
interp. Pour une description exhaustive de toutes ces possibilités faire help
graph3d.
4.5.6. D’autres types de graphiques:
Le langage MATLAB ne permet pas uniquement l’affichage des points
pour tracer des courbes, mais il offre aussi la possibilité de tracer des graphes
à bâtons et des histogrammes.
Pour tracer un graphe à bâtons nous utilisons la fonction bar qui a le
même principe de fonctionnement que la fonction plot.
Exemple :
Il est possible de modifier l’apparence des bâtons, et il existe la fonction barh
qui dessine les bâtons horizontalement, et la fonction bar3 qui ajoute un effet
3D.
Parmi les fonctions de dessin très intéressantes non présentées ici, on
peut trouver : hist, stairs, stem, pie, pie3, ...etc..
Nous signalons aussi que Matlab permet l’utilisation d’un système de
coordonnées autre que le système cartésien comme le système de coordonnées
polaires (pour plus de détail chercher les fonctions compass, polar et rose).
4.6. Applications
1. Ecrire le code en MATLAB qui calcule la somme de la suite géométrique
suivante :
6
∑ 2𝑛
𝑛=1
2. Ecrire le code en MATLAB qui calcule les sommes
𝑁
∑ 𝑗𝑝
𝑗=1
Pour N = 6 et p égal à un, deux et trois.
Chapitre 5 : Applications des méthodes
numériques avec MATLAB
4.1. Introduction
L’analyse numérique est utilisée pour trouver des approximations à des
problèmes difficiles tels que la résolution des équations non linéaires,
l'intégration impliquant des expressions complexes. Elle est appliquée à une
grande variété de disciplines telles que tous les domaines de l'ingénierie, de
l'informatique, l'éducation, la géologie, la météorologie, et bien d'autres.
Il y a des années, les ordinateurs à haute vitesse n’existaient pas, par
conséquent, le calcul manuel exigeait beaucoup de temps et de travail
laborieux. Mais maintenant que les ordinateurs sont devenus indispensables
pour les travaux de recherche dans la science, l'ingénierie et d'autres
domaines, l'analyse numérique est devenue une tâche beaucoup plus
facile et plus agréable.
5.2. Résolution de systèmes linéaires par le logiciel MATLAB.
5.2.1. Méthode du pivot de Gauss (méthode directe)
La méthode du pivot de Gauss est une méthode directe de résolution de
système linéaire qui permet de transformer un système en un autre système
équivalent échelonné. On résout le système ainsi obtenu à l’aide d’un
algorithme de remontée.
Principe
On cherche à résoudre le système suivant de n équations à p inconnues
𝑥1 , 𝑥2 , … , 𝑥𝑝 :
𝑎11 𝑥1 + 𝑎12 𝑥2 + ⋯ + 𝑎1𝑛 𝑝 = 𝑏1
𝑎21 𝑥1 + 𝑎22 𝑥2 + ⋯ + 𝑎2𝑝 𝑥𝑝 = 𝑏2
.
.
.
{𝑎𝑛1 𝑥1 + 𝑎𝑛2 𝑥2 + ⋯ + 𝑎𝑛𝑝 𝑥𝑝 = 𝑏𝑛
Du point de vue matriciel, on a 𝐴𝑥 = 𝑏 avec
𝑎11 𝑎12 … 𝑎1𝑝 𝑥1 𝑏1
𝑎 𝑎 … 𝑎 𝑥
[ …21 …22 … … ] [ …2 ] = [ 𝑏…2 ]
2𝑝
𝑎𝑛1 … … 𝑎𝑛𝑝 𝑥𝑝 𝑏𝑛
Les données du système linéaire sont :
les coefficients réels ou complexes 𝑎𝑖𝑗 pour 𝑖 = 1, … , 𝑛 et 𝑗 = 1, … , 𝑝 (n et
p sont deux entiers connus),
le second membre du système constitué par les nombres réels ou
complexes 𝑏𝑖 (𝑖 = 1, … , 𝑛), et 𝐿𝑖 (𝑖 = 1, … , 𝑛) désigne la i-ième ligne du
système (S).
Les inconnues à déterminer sont les 𝑥𝑖 (𝑗 = 1, … , 𝑝).
Le système est dit carré lorsque n=p. C’est le cas où il y a autant
d’équations que d’inconnues.
On dira que le système est homogène lorsque le second membre est nul (𝑏𝑖 =
0, 𝑖 = 1, … , 𝑛).
On peut remarquer qu’un système linéaire homogène admet au moins
la solution nulle 𝑥𝑖 = 0, 𝑖 = 1, … , 𝑛 (qui n’est pas nécessairement la seule).
Lorsque tous les coefficients « sous la diagonale » d’un système linéaire sont
nuls, i.e. :
𝑖 > 𝑗 ⇒ 𝑎𝑖𝑗 = 0
On dit que le système est échelonné.
a- La méthode du pivot de Gauss : Triangularisation
(𝑘+1) (𝑘)
𝑎𝑖𝑗 = 𝑎𝑖𝑗 , 𝑖 = 1, … , 𝑘 𝑗 = 1, … , 𝑛
(𝑘+1) (𝑘)
𝑎𝑖𝑗 = 𝑎𝑖𝑗 , 𝑖 = 𝑘 + 1, … , 𝑛 𝑗 = 1, … , 𝑘
(𝑘) (𝑘)
(𝑘+1) (𝑘)
𝑎𝑖𝑘 × 𝑎𝑘𝑗
𝑎𝑖𝑗 = 𝑎𝑖𝑗 − (𝑘)
, 𝑖 = 𝑘 + 1, … , 𝑛 𝑗 = 𝑘 + 1, … , 𝑛
𝑘 = 1, … , 𝑛 − 1 𝑎𝑘𝑘
(𝑘+1) (𝑘)
𝑏𝑖 = 𝑏𝑖 , 𝑖 = 1, … , 𝑘
(𝑘) (𝑘)
(𝑘+1) (𝑘) 𝑎𝑖𝑘 × 𝑏𝑘
𝑏𝑖 = 𝑏𝑖 − (𝑘)
, 𝑖 = 𝑘 + 1, … , 𝑛
{ 𝑎𝑘𝑘
Soit U la matrice échelonnée du système, on a alors
(𝑛)
𝑈 = (𝑢𝑖𝑗 )1≤𝑖,𝑗≤𝑛 = (𝑎𝑖𝑗 )
1≤𝑖,𝑗≤𝑛
b- Remontée et résolution
À présent la matrice A du système linéaire est échelonnée, on doit alors
résoudre le système triangulaire :
𝑈𝑥 = 𝑏 (𝑛)
Puisque 𝑏 (𝑛) rappelons le, est le second membre échelonné, il a subit les
mêmes opérations que la matrice échelonnée 𝑈.
On utilise alors un algorithme de remontée pour le système
𝑈𝑥 = 𝑏 (𝑛) .
𝑦𝑛 𝑦𝑛
𝑥𝑛 = = (𝑛) ,
𝑢𝑛𝑛 𝑎𝑛𝑛
𝑛 𝑛
1 1 (𝑛)
𝑥𝑖 = (𝑦𝑖 − ∑ 𝑢𝑖𝑗 𝑥𝑗 ) = (𝑛) (𝑦𝑖 − ∑ 𝑎𝑖𝑗 𝑥𝑗 ) ∀𝑖 = 𝑛 − 1, 𝑛 − 2, … ,1
𝑢𝑖𝑖 𝑎
{ 𝑗=𝑖+1 𝑖𝑖 𝑗=𝑖+1
c- Exemple de résolution
Considérons le système suivant :
𝑥1 + 2𝑥2 + 2𝑥3 = 2 𝐿1
{𝑥1 + 3𝑥2 − 2𝑥3 = −1 𝐿2
3𝑥1 + 5𝑥2 + 8𝑥3 = 8 𝐿3
Avec
1 2 2 𝑥1 2
𝐴 = (1 3 −2) , 𝑥 = (𝑥2 ) , 𝑏 = (−1)
3 5 8 𝑥3 8
Première étape du pivot de Gauss pour éliminer les variables 𝑥1 dans les lignes
𝐿2 et 𝐿3 :
𝑥1 + 2𝑥2 + 2𝑥3 =2 𝐿1
{ 𝑥2 − 4𝑥3 = −3 𝐿2 ⟵ 𝐿2 − 𝐿1
−𝑥2 + 2𝑥3 =8 𝐿3 ⟵ 𝐿3 − 3𝐿1
Seconde étape du pivot de Gauss pour éliminer les variables 𝑥2 dans la ligne
𝐿3 :
𝑥1 + 2𝑥2 + 2𝑥3 =2 𝐿1
{ 𝑥2 − 4𝑥3 = −3 𝐿2
−2𝑥3 =5 𝐿3 ⟵ 𝐿3 + 𝐿2
En remontant le système, on obtient aisément la solution x du système :
3
𝑥 = ( −1 )
1/2
Code MATLAB implémentant la méthode de Gauss
3. Les Polynômes dans MATLAB
3 .1. Opérations sur les polynômes dans MATLAB
Dans MATLAB, les polynômes sont représentés sous forme de vecteurs lignes
dont les composantes sont données par ordre des puissances décroissantes.
Un polynôme de degré n est représenté par un vecteur de taille (n+1).
Exemple :
Le polynôme : 𝑓(𝑥) = 8𝑥 5 + 2𝑥 3 + 3𝑥 2 + 4𝑥 − 2 est représenté par :
3.1.1. Multiplication des polynômes
La fonction ‘conv’ donne le produit de convolution de deux polynômes.
L’exemple suivant montre l’utilisation de cette fonction.
Soient :
𝑓(𝑥) = 3𝑥 3 + 2𝑥 2 − 𝑥 + 4
𝑔(𝑥) = 2𝑥 4 − 3𝑥 2 + 5𝑥 − 1
Le produit de convolution : ℎ(𝑥) = 𝑓(𝑥)𝑔(𝑥) est donné par :
Ainsi, le polynôme h(x) obtenu est :
ℎ(𝑥) = 6𝑥 7 + 4𝑥 6 − 11𝑥 5 + 17𝑥 4 + 10𝑥 3 − 19𝑥 2 + 21𝑥 − 4
3. 1.2. Division des polynômes
La fonction ‘deconv’ donne le rapport de convolution de deux polynômes
(déconvolution des coefficients du polynôme). L’exemple suivant montre
l’utilisation de cette fonction.
Soient les mêmes fonctions précédentes f(x) et g(x) :
𝑓(𝑥) = 3𝑥 3 + 2𝑥 2 − 𝑥 + 4
𝑔(𝑥) = 2𝑥 4 − 3𝑥 2 + 5𝑥 − 1
La division de g(x) par f(x) :
𝑔(𝑥)
ℎ(𝑥) = est la fonction « deconv ».
𝑓(𝑥)
et le polynôme ℎ(𝑥) obtenu est : ℎ(𝑥) = 0.6667 𝑥 − 0.4444
3. 2. Manipulation de fonctions polynomiales dans MATLAB
Soit le polynôme suivant :
𝑃(𝑥) = 𝑎𝑛 𝑥 𝑛 + 𝑎𝑛−1 𝑥 𝑛−1 + ⋯ + 𝑎2 𝑥 2 + 𝑎1 𝑥 + 𝑎0
Où n est le degré du polynôme et 𝑎𝑖 (i=0 ,1 ,2, ….,n) sont les coefficients du
polynôme.
Ce polynôme peut être écrit sous la forme :
𝑃(𝑥) = ((… (… (𝑎𝑛 𝑥 + 𝑎𝑛−1 )𝑥 + 𝑎𝑛−2 )𝑥 … + 𝑎1 )𝑥 + 𝑎0 )
Après factorisation, on a:
𝑃(𝑥) = 𝑎𝑛 (𝑥 − 𝑟1 )(𝑥 − 𝑟2 ) … (𝑥 − 𝑟𝑛 )
où r1, r2 ,…, rn sont les racines du polynôme P(x).
Exemple :
𝑃(𝑥) = 𝑥 4 + 2𝑥 3 − 7𝑥 2 + 8𝑥 + 12
Ce polynôme est équivalent à :
𝑝(𝑥) = (((𝑥 + 2)𝑥 − 7)𝑥 + 8) 𝑥 + 12
Un polynôme d’ordre n possède n racines qui peuvent être réelles ou
complexes.
Dans MATLAB, un polynôme est représenté par un vecteur contenant les
coefficients dans un ordre décroissant.
Exemple :
Le polynôme : 2𝑥 3 + 𝑥 2 + 4𝑥 + 5 qui est représenté dans MATLAB par :
a pour racines ri .
Pour trouver ces racines, on doit exécuter la fonction ‘roots’.
D’où :
Les trois racines de ce polynôme (dont 2 sont complexes) sont données sous
forme d’un vecteur colonne.
4. Résolution d’équations non linéaires (Méthode de Newton-
Raphson)
4.1. La méthode de Newton-Raphson
La méthode de Newton-Raphson consiste à trouver la valeur x qui annulera la
fonction f(x).
La méthode de Newton-Raphson permet d’approcher par itérations la valeur x
au moyen de la relation suivante :
𝑓(𝑥𝑛 )
𝑥𝑛+1 = 𝑥𝑛 −
𝑓′(𝑥𝑛 )
Si |𝑥𝑛+1 − 𝑥𝑛 | < 𝜀 alors 𝑥𝑛+1 est le résultat de l’estimation de la racine.
Où 𝜀 représente des erreurs d'approximations caractérisant la qualité de la
solution numérique.
Ce critère d'arrêt a l'avantage d'éviter une possible division par 0.
Dans toutes les méthodes itératives, il est nécessaire pour éviter une
divergence de la solution, de bien choisir la valeur initiale x0. Celle-ci peut être
obtenue graphiquement.
Exemple :
On se propose d’appliquer cette méthode pour la recherche des racines de la
fonction non linéaire suivante :
𝑓(𝑥) = 𝑒 𝑥 − 2𝑐𝑜𝑠(𝑥)
Dans un premier temps, on se propose de tracer la courbe représentative de
cette fonction en utilisant le programme ci-dessous ‘NewtonRaphson.m’:
Après exécution du programme, on obtient la courbe sur la figure ci-après.
D’après cette courbe, il est judicieux de choisir un x0= 0.5 ; car f (0.5) est
proche de zéro pour avoir une convergence rapide. La fonction dérivée f’(x) a
pour expression :
𝑓 ′(𝑥) = 𝑒 𝑥 + 2𝑠𝑖𝑛(𝑥)
Pour chercher la solution de f(x), on peut rajouter au programme précédent
‘NewtonRaphson.m’ quelques lignes :
4.2. La méthode de la sécante (méthode multi-point)
Cette méthode est du type xn+1 = F(xn, xn−1, · · · , xn−N)
La méthode de Newton est rapide, mais nécessite le calcul de la dérivée de f
en tout point xn, ce qu’on n’a pas toujours. La plus simple et plus ancienne
est la méthode de la sécante. Elle consiste à se donner deux points x0 et x1,
tracer la droite qui passe par les points (x0, f(x0) et (x1, f(x1)), elle coupe l’axe des
x en x2, et on recommence avec les points x1 et x2.
La méthode de la sécante permet d’approcher par itérations la valeur x au
moyen de la relation suivante :
La solution dépend du critère d'arrêt
5. Intégration numérique des fonctions
Nous développons ci-après quelques méthodes qui permettent de calculer, sur
𝑏
un intervalle fini [a,b], l’intégrale définie ∫𝑎 𝑓(𝑥)𝑑𝑥 d’une fonction f continue
donnée.
Ces méthodes sont particulièrement utiles dans le cas où les primitives de f
ne sont pas des fonctions élémentaires ou sont trop difficiles à calculer.
Nous distinguerons deux optiques :
la fonction à intégrer est remplacée par une fonction interpolante ou par
une fonction d’approximation ;
l’intégrale est approchée par une somme pondérée de valeurs prises par
la fonction en des points situés dans un voisinage de [a,b].
5. 1 Méthode des trapèzes
On subdivise l’intervalle [a,b] en sous- intervalles {[xi-1,xi] , i = 1,2,…, n; x0 = a; xn = b} sur
lesquels la fonction f est remplacée par le segment de droite qui joint les points
(xi-1 ,f(xi-1)) et (xi , f(xi)).
Cette procédure revient à remplacer, sur [a,b], f par une fonction
d’interpolation linéaire par morceaux. D’un point de vue géométrique, on
assimile l’aire comprise entre le graphe de f et l’axe des x à la somme des aires
de n trapèzes.
Considérons que la division en sous-intervalles est uniforme et posons :