Vous êtes sur la page 1sur 73

Chapitre1 :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èsnombreuses. En voici quelques exemples :
x Etablissement de feuilles de paye, de facture,
x Gestion de stocks,
x Consultation de base de données,
x Détermination du tracé d’une autoroute,
x Calcul de la trajectoire d’un satellite,
x Suivi médical de patients,
x Traitement de texte,
x …
C’est une machine totalement dénuée d’intelligence. Il faut tout lui
enseigner, et il fait toutcomme il lui a été enseigné, sans « réfléchir ».
Cependant, contrairement aux autres machinesqui ne peuvent faire que des
nombres limités de tâches, l’ordinateur est capable d’effectuerune 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 saitréaliser. Il suffit de lui indiquer l’ordre dans lequel il faut
qu’il effectue ces actions et lesdonnées à utiliser. Ces ordres élémentaires
sont appelés instructions et sont rassemblés ausein d’un ensemble appelé
programme.
Donner des ordres à l’ordinateur signifie « être capable de communiquer »
avec lui. Cettecommunication passe par un langage de communication
appelé langage de programmationdans 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 écritdans un langage de programmation, et exécuté par un
ordinateur afin de traiter les donnéesd’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écuterune tâche à un ordinateur (résoudre un problème) ; il
s’écrit en pseudo langage deprogrammation (appelé langage algorithmique). Il
a l’avantage d’être traduit facilement danstous les langages de
programmation.
L’algorithmique, l’art d’écrire des algorithmes, permet de se focaliser sur la
procédure derésolution du problème sans avoir à se soucier des spécificités
d’un langage particulier. Pourrésoudre un problème, il est vivement conseillé
de réfléchir d’abord à l’algorithme avantd’aborder le programme proprement
dit, c'est-à-dire d’écrire le programme en langage deprogrammation.
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 moyennede notes. Pour s’exécuter, ce programme nécessite qu’on
lui fournisse les notes dont oncherche 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 informationrésultats ou plus simplement résultats. Si le
programme a été prévu pour cela, il peut, bienentendu, 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 desemployés, situation de famille, numéro S/S., nombre
d’heures supplémentaires, etc. Lesré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.
Chapitre2. 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 formelconstruit sur un alphabet (ensemble de symboles). Dans cet
alphabet, on trouve plusieurschoses :
x des lettres et des chiffres ;
x des mots-clés (combinaisons de lettres et parfois de chiffres) ;
x des caractères :
9 correspondant à des opérateurs : par exemple « = », « < », « & » ;
9 ou pas, comme « { », « _ », …
L'assemblage de ces symboles forme les « mots » du langage de
programmation. Pour qu'unmot appartienne au langage, il doit vérifier
certaines contraintes exprimées grâce à la théoriedes langages dans une
grammaire formelle : c'est la « syntaxe » du langage deprogrammation.
En associant une sémantique - généralement une opération - à chaque mot,
on définit lecomportement de la machine. La mise en relation de mots va
donner un programmeinformatique.

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 lelangage machine, dit « de bas
niveau », pour écrire un programme. Le langage deprogrammation 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 à desdomaines spécialisés. Ils font l'objet de recherches
constantes dans les universités et dansl'industrie.
2.3 Syntaxe
Outre les particularités sémantiques des langages, ils utilisent également des
grammairesdifférentes qui proposent souvent des points communs.
Les particularités syntaxiques ne sont souvent que des détails qui ne
changent pas lesfonctionnalité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êmerésultat :
La nuance est importante, car en C, la dernière instruction d'un bloc doit
comprendre unpoint-virgule (;) qui est un terminateur alors qu'en Pascal, il
est inutile, voire fautif, d'enmettre 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 queceux utilisant un séparateur.
2.4. Balisage
Certains langages utilisent des « balises » délimitant des « environnements ».
Une balise estgé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 desbalises. 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 deprogrammation
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 uneexpression dans un langage de programmation. La stratégie
d'évaluation définit à quelmoment les arguments des fonctions et opérateurs
sont évalués ou réduits.
On distingue essentiellement deux stratégies :
x l'évaluation stricte : les arguments des fonctions sont toujours évalués
avant que la fonction ne soit appliquée.
x 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'évaluationparesseuse pour les expressions booléennes (évaluation
court-circuit). Cependant il estpossible 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 obligel'é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 :
x 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.
x 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 dehaut niveau,
comme Python.
Certains langages proposent un système intermédiaire. En Objective-C, il est
possible de lagérer directement, d'activer la gestion automatique de la
mémoire ou d'utiliser un système deplus 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'uneerreur qui interrompt brutalement le programme, la gestion
d'une exception permetd'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 :
x Il n'y en a pas (C) ;
x Elle signale l'exception sans la traiter (C++, C#, Java) ;
x Elle permet un traitement : par exemple, la modification du
programme par leprogramme 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 certainlangage peut « ressembler » à une solution exprimée dans un autre
langage ; dans ce cas, ondit que les langages utilisent le même paradigme
(ou style). Deux programmes fournissant lasolution au même problème, mais
écrits avec des paradigmes différents serontfondamentalement 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 objetet 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égrerd'autres «
paradigmes » de programmation en son sein (par exemple : la
programmationlogique 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 etassembleurs. Ceci explique que les premiers langages de
programmation apparus soient deslangages impératifs : une instruction du
langage correspond à un ensemble d'instructions dulangage machine. Les
structures de données et opérations sont plus complexes qu'au niveau dela
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 ordreprécis. On distingue parfois procédure et
fonction par la caractéristique qu'une procédure nerenvoie pas de résultat.
Parmi les langages impératifs figurent COBOL, Fortran, Pascal ouencore 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 unlangage 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 moteurd'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 langagesimpératifs, mais l'évaluation de fonctions. Ce paradigme est
donc principalement efficacepour modéliser des problèmes qui s'expriment
par des valeurs de données, comme enmathé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 quela 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 aucours de l'exécution.

Quelques exemples de langages fonctionnels :Objective Caml (langage


fonctionnel etimpératif), Haskell (langage fonctionnel pur à évaluation
paresseuse), Python (proposecertaines fonctionnalités du style fonctionnel
comme l'utilisation de fonctions lambda ou lacompré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
structuresémantique indépendante qui rassemble des données et
destraitements.
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 blocsd'instructions ; le C++, extension de C
permettant d'utiliser des objets mais où tout n'est pasobjet ; Python, très
orienté objet mais qui ne respecte pas tous les principes de laprogrammation
objet comme l'encapsulation.
2.9 Utilisation
On peut aussi classer les langages de programmation en fonction de leur
utilisation carbeaucoup 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écriredes 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 destructure arborescente ; la partie DDL de SQL sert à décrire
des données relationnelles. Leslangages qui décrivent des documents
peuvent également être considérés comme des langagesde définition de
données. Ainsi, LaTeX est un exemple de langage de définition de
donnéesqui 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 PDFou 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 codessources de programmes comme des structures de contrôle
(conditions, boucles...) et desmoyens d'interaction avec le système (variable
d'environnement, formulaires...). Ils sont donccité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 dedonné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
clientet 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 pourcommuniquer 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 del'utilisateur sans avoir à questionner le serveur. Par exemple, le
JavaScript d'une page Webpeut 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 casd'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ées1980, Robin
Milner a mis au point le − pour modéliser les systèmes concurrents.

2.9.5. Calculs symboliques

Il existe des outils pour le calcul symbolique (calcul formel de dérivée,


intégrale, primitive, polynôme de Taylor, transformée de fourrier, etc.). A
certains langages de programmation sont intégrées des fonctionnalités
similaires, comme MATLAB. Des logiciels sont développés spécialement pour
les calculs formel (MathCAD, Mathematica, etc.).
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
TurboPascal 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 :

x la programmation facile,
x la continuité parmi les valeurs entières, réelles et complexes,
x la gamme étendue des nombres et leur précision,
x la bibliothèque mathématique très compréhensive,
x l’outil graphique qui inclut les fonctions d’interface graphique et les
utilitaires,
x 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 :

x Current Folder: indique le répertoire courant ainsi que les fichiers


existants.
x Workspace: indique toutes les variables existantes avec leurs types et
valeurs.
x Command History: garde la trace de toutes les commandes entrées par
l’utilisateur.
x 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 :commandewhos (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.

>>m
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ù : r1...rn 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 :
3.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 :

Fonction signification
cos(x) sinus de x (en radian)
sin(x) cosinus de x (en radian)
tan(x) Tangente de x (en radian)
asin(x) arc sinus de ∈ [−1; 1]
acos(x) arc cosinus de ∈ [−1; 1]
atan(x) arc tangente de ∈ℝ
sqrt(x) La racine carrée de
abs(x) La valeur absolue de
exp(x) Exponentiel népérien de
log(x) Le logarithme népérien de
log10(x) Le logarithme à base 10 de
imag(x) La partie imaginaire du
nombre complexe
real(x) La partie réelle du nombre
complexe
round(x) arrondi de à l’entier le plus
proche
floor(x) arrondi de à l’entier le plus
petit → { / ≤ }
ceil(x) arrondi de à l’entier le plus
grand → { / ≥ }

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.
3.5. Les vecteurs et les matrices

3.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 :

x Le résultat d’une opération de calcul est par défaut affiché avec


quatre chiffres après la virgule.
x Pour afficher davantage de chiffres utiliser la commande format long
(14 chiffres après la virgule).
x Pour retourner à l’affichage par défaut, utiliser la commande format
short.
x Pour afficher uniquement 02 chiffres après la virgule, utiliser la
commande format bank.
x Pour afficher les nombres sous forme d’un ratio, utiliser la commande
format rat.
Par exemple :

La fonctionvpa 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 :
3.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 :


=
éé −1

Par exemple :
>> X=linspace(1,10,4) % un vecteur de quatre éléments de 1 à 10
X=
1 4 7 10
>> Y = linspace(13,40,4) % un vecteur de quatre élément de 13 à 40
X=
13 22 31 40

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 :

x L’accès à un élément de la ligne i et la colonne j se fait par : A(i,j)


x L’accès à toute la ligne numéro i se fait par : A(i,:)
x 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 :

3.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 :

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 :

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.

3.6. Les Polynômes dans MATLAB

3.6.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 +2 +3 + 4 − 2est représenté par :


3.6.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 +2 − +4
( )=2 −3 +5 −1
Le produit de convolution : ℎ( ) = ( ) ( )est donné par :

Ainsi, le polynôme h(x) obtenu est :

ℎ( ) = 6 +4 − 11 + 17 + 10 − 19 + 21 − 4

3.6.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 +2 − +4
( )=2 −3 +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.6. 2. Manipulation de fonctions polynomiales dans MATLAB

Soit le polynôme suivant :

( )= + + ⋯+ + +
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 :

( ) = (… (… ( + ) + ) …+ ) +

Après factorisation, on a:

( )= ( − )( − )…( − )

où r1, r2 ,…, rn sont les racines du polynôme P(x).

Exemple :

( )= +2 −7 + 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 + + 4 + 5 qui est représenté dans MATLAB par :

>>P=[2 1 4 5] ;
a pour racines ri .

Pour trouver ces racines, on peut exécuter la fonction ( ):

>>r=roots(P)
r=
0.2500 + 1.5612i
0.2500 - 1.5612i
-1.0000
Les trois racines de ce polynôme (dont 2 sont complexes) sont données sous
forme d’unvecteur colonne.
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ès 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
leelse 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 : + + = 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éfinitsi 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.

x Pour donner un titre à une figure contenant une courbe nous utilisons
la fonction title comme ceci :

>>title('titre de la figure')

x 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')

x 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')

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')

x 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')

x Pour mettre un quadrillage (une grille), nous utilisons la commande


grid (ou grid on).
x Pour l’enlever nous réutilisons la même commande grid (ou grid off).

Exemple :

Dessinons la fonction : = −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 :

Exercice

Représenter dans un même graphique les courbes ( ): = sur


l’intervalle = [0; 2] avec ∈ {1, 2, 4, 5, 6, 8}.

4.5.5. Représentation graphique 3D

Supposons, par exemple que l’on veuille représenter la surface définie par la
fonction = ( ) sur le carré suivant [− /2, /2] × [− /2, /2] à l'aide
d’une grille de points31 × 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 :


shadinginterp. 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 :

2. Ecrire le code en MATLAB qui calcule les sommes

Pour N = 6 et p égal à un, deux et trois.

3. Ecrire un script qui lit au clavier les coordonnées de 3 points non alignés
et qui trace le triangle formé par ces points ainsi que le cercle circonscrit.
Chapitre 5 : Equations algébriques

5.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.

Cette partie du cours sera consacrée aux techniques de résolution


numérique des équations algébriques (équations non linéaires, système
d’équations linéaires, système d’équations non linéaires, intégration
numérique)

5.2. Résolution de systèmes d’équations linéaires à l’aide de


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


, ,…, :
+ +⋯+ =
⎧ + + ⋯+ =
⎪ .
⎨ .
⎪ .
⎩ + + ⋯+ =

Du point de vue matriciel, on a = avec




… … … … … = …
… …

Les données du système linéaire sont :

x les coefficients réels ou complexes pour = 1, … , et = 1, … , (n et


p sont deux entiers connus),
x 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).
x 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, … ,

Soit U la matrice échelonnée du système, on a alors

( )
= ,
=
,

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

c- Exemple de résolution

Considérons le système suivant :

+2 +2 =2
+ 3 − 2 = −1
3 +5 +8 =8

Avec

1 2 2 2
= 1 3 −2 , = , = −1
3 5 8 8
Première étape du pivot de Gauss pour éliminer les variables dans les
lignes et :

+2 +2 =2
−4 = −3 ⟵ −
− +2 =8 ⟵ −3

Seconde étape du pivot de Gauss pour éliminer les variables dans la ligne
:

+2 +2 =2
−4 = −3
−2 =5 ⟵ +

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
5.2.2. Méthodes itératives

Soit à résoudre le système = . On cherche à obtenir une suite de


vecteurs convergeant vers tel que = .

5.2.2.1. Méthode de Jacobi

A partir d’une valeur d’essai ,


, l’approximation d’ordre k+1 est

obtenue, pour i allant de 1 à n, par la relation de récurrence :

1
= − −

La convergence est rapide si la matrice A est à diagonale strictement


dominante.

Application

On considère le système d’équations linéaires = avec

b1
a1 d1 0 _ _ 0

c1 a2 I

0 I
A= et B=
I 0

I dn-1

0 - - 0 cn-1 an bn

On donne

1
⎧ = + , >0

⎪ 1
= , >0
. ( + 1)
⎨ = − , >0

⎪ (−1)
⎩ = , >0
+1
1. Ecrire un script qui lit au clavier > 0, un entier > 0 et qui affiche
la solution de l’équation = . On utilisera la méthode itérative de
Jacobi.
2. Créer une fonction [ , , ]= ( , , 0, , ) pour la
résolution d’un système linéaire par la méthode de Jacobi. On pourra
tester cette fonction avec la commande >> = \ sur le système
précédent. Prendre = 1.

5.2.2.2. Gauss-Seidel

Ici, pour i allant de 1 à n, on calcule :

1
= − −

Reprendre l’exercice sur la méthode de Jacobi en utilisant celle de Gauss-


Seidel.

5.4. Résolution d’équations non linéaires

5.4.1. algorithme de base


De façon général, la résolution numérique d’une équation non linéaire ( ) =
0 se fait de façon itérative. Il s’agit de calculer les approximations
successives de la solution exacte (qu’on ne peut déterminer) à partir d’une
valeur d’essai et d’une relation de récurrence qui varie en fonction de la
méthode utilisée (sécante, Newton-Raphson, etc.). La relation de récurrence
permet de calculer à chaque itération une nouvelle approximation à partir
d’approximations précédemment obtenues. On arrête les calculs lorsqu’on
obtient la précision voulue ou qu’on a épuisé le nombre maximal d’itération
fixé au préalable sans avoir atteint la convergence.

De façon général, l’algorithme suivant peut être utilisé :


1. Donner le nombre maximal d’itérations , le critère de
convergence , la valeur d’essai 0
2. Initialisation du compteur d’itération à 0 et de la variable X1 à X0 :
x ←0
x 1← 0
3. Itérations :
3.1 Incrémenter le compteur d’itérations :
← +1
3.2 Calculer une nouvelle approximation dans 2 à partir de 1 en
utilisant la relation de récurrence
3.3 Tester la convergence :
Si | 2 − 1| < ∗ | 2| alors
Afficher X2
Arrêt
Fin Si
3.4 Tester le nombre d’itérations :
Si ≥ alors
Afficher ‘convergence non atteinte après Nmax itérations
Arrêt
Fin Si
3.5 Copie de X2 dans X1 :
1← 2
3.6 Retour à l’étape 3

Mise en œuvre de l’algorithme

L’étape 1 peut être réalisée à travers des constantes ou des variables


d’entrée. Quant à l’étape 3, une boucle infinie peut être utilisée, la condition
de sortie de boucle pouvant être réalisée au test de convergence ou de
l’atteinte du nombre maximal d’itérations Nmax sans convergence.

Activité 5.4.1

On considère une suite numérique définie par la relation de récurrence


suivante :

=
= −( (− ) − 2 + 1)/(− (− ) − 2)
a. Ecrire un script qui lit au clavier a et n, puis calcule et affiche
b. Ecrire un script qui lit au clavier a et n, puis calcule et affiche le
tableau suivant où 1 ≤ ≤ :

k (− )−2 +1
1 ⋮ ⋮
⋮ ⋮ ⋮
n ⋮ ⋮

Exécuter ce script dans un premier temps avec = 1 et = 50, puis


avec = 20 et = 50. Que conclure ?

5.4.2. Méthode de Newton-Raphson


Soit à résoudre une équation non linéaire ( ) = 0. On utilise dans
l’algorithme du paragraphe 3.4.1 la relation de récurrence suivante pour
la méthode de Newton-Raphson:

= − ( )/ ′( )

Activité 5.4.2

On considère l’équation non linéaire ( ) = 0 où f est une fonction donnée.


Créer la fonction [ , , ]= ℎ( , 0, , ) pour la
résolution numérique de ( ) = 0, par l’algorithme de Newton Raphson. 0,
et sont respectivement la valeur d’essai, le critère de convergence
et le nombre maximal d’itération. est une fonction définie par ( )=
[ ( ), ′( )]. , et sont respectivement l’indicateur de convergence,
le nombre d’itérations et la solution obtenue en résolvant l’équation. Conv
prendra la valeur 1 en cas de convergence et 0 sinon.

Tester cette fonction avec l’équation (− ) − 2 + 1 = 0 Prendre =1 −


5, 0 = 1 et = 1000.

Solution

function [conv,iter,Sol]=NewRaphSol(fdf,x0,epsi,Nmax)
%==========================================================================
% Solveur d'équation non linéaire de type f(x)=0.
% Utilisation: [conv,iter,sol]=NewRaphSol(fdf,x0,epsi,Nmax)
% Méthode: Newton Raphson
% Arguments:
% fdf(x)=[f(x),f'(x)] : fonction définissant f et sa dérivée f'
% x0 : valeur d'essai
% epsi : critère de convergence => |x(n+1)-x(n)|/|x(n+1)|<epsi
% Nmax : nombre maximal d'itérations
% Sortie
% conv : variable prenant la valeur 1 s'il y a convergence et 0 sinon
% iter : variable indiquant le nombre d'itérations effectuées
% Sol : solution obtenue
% Auteur: GBAGUIDI Thomas Brice
%==========================================================================
%-----------Initialisation
compteur=0;
X1=x0;
%-----------Itérations
while 1>0
compteur=compteur+1;
rapport=fdf(X1);
X2=X1-rapport(1)/rapport(2);
Sol=X2;
test1=abs(X2-X1);
test2=abs(X2);
%-----------Test de convergence
if test1<test2*epsi
conv=1;
iter=compteur;
break;
end
%-----------Test sur le nombre d'itérations
ifcompteur>=Nmax
conv=0;
break;
end
X1=X2;
end
end

5.4.1. 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. Elleconsiste à se donner deux points x0et 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 x1et x2.
La méthode de la sécante permet d’approcher par itérations la valeur x au
moyen de larelation suivante :
− !
= −
( )− ( !)

Activité 5.4.3
Reprendre l’activité 5.4.2 en considérant la méthode de la sécante.
Remarque
Les méthodes les plus sophistiquées pour le calcul des zéros d’une fonction
combinent différents algorithmes. Par exemple, la fonction de MATLAB
(voir Section 1.5.1) adopte la méthode de Dekker-Brent (voir [QSS07],
Section 6.2.3). Dans sa version de base, l’instruction ( , 0) calcule le
zéro de la fonction fun en partant de 0, où fun peut être une chaîne de
caractères qui définit une fonction de x, ou bien une fonction inline, une
fonction anonyme, ou bien encore le nom d’un M-fichier.

Activité 5.4.3

Faire la résolution de l’équation non linéaire (− ) − 2 + 1 = 0 en utilisant


la fonction ( ) et comparer le résultat à celui des activités 5.4.1 et5.4.2

Exercice 5.4.1 Un solide ponctuel, au repos à t = 0, est placé sur un plan


dont la pente varie avec une vitesse constante Ȱ. A un temps t > 0, sa
position est donnée par

( , )= [ ℎ( )− ( )]
2

où g = 9.8 m/s2 désigne l’accélération de la gravité. En supposant que cet


objet s’est déplacé d’un mètre en une seconde, calculer la valeur de Ȱ avec
une tolérance de 10Ѹ5.
Exercice 5.4.2
Considérons le système mécanique représenté par les quatre barres rigides ai
de la Figure 2.1. Pour une valeur admissible de l’angle β, déterminons la
valeur de l’angle α entre les barres a1 et a2. Partant de la relation vectorielle
a1 Ѹ a2 Ѹ a3 Ѹ a4 = 0
et remarquant que la barre a1 est toujours alignée avec l’axe des x, on peut
déduire les relations suivantes entre β et α
a a a +a −a +a
(β) − (α) − (β − α) = −
a a 2a a
où ai est la longueur connue de la i-ème barre. Cette égalité, appelée
équation de Freudenstein, peut être réécrite comme suit : f(α) = 0, où
a a a +a −a +a
( )= (β) − (x) − (β − x) +
a a 2a a
Utiliser la méthode de Newton pour résoudre l’équation f(α) = 0 pour șѮ [0,
2ȧ/3] avec une tolérance de 10Ѹ5. Supposer que les longueurs des barres
sont a1 = 10 cm, a2 = 13 cm, a3 = 8 cm et a4 = 10cm. Pour chaque valeur de
ș, considérer deux valeurs initiales, x(0) = Ѹ0.1 et x(0) = 2ȧ/3.

5.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 desfonctions élémentaires ou sont trop difficiles à calculer.
Nous distinguerons deux optiques :
x la fonction à intégrer est remplacée par une fonction interpolante ou
par une fonction d’approximation ;
x 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.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 parmorceaux. D’un point de vue géométrique, on
assimile l’aire comprise entre le graphe de f etl’axe des x à la somme des
aires de n trapèzes.
Considérons que la division en sous-intervalles est uniforme et posons :

= + ℎoùℎ = et ( ) = ; = 0, 1, … ,

Sur l’intervalle [ , !] l’aire ∫ !


( ) est remplacée par ℎ × ( + ! )/2, aire

du trapèze correspondant.
! ℎ
( ) = ( ) = ℎ×( + ! )/2 = + +2
2

Si le pas de subdivision n’est pas constant, on obtient :


!
( ) = ( ) = ℎ ×( + ! )/2 = ( − )×( + ! )/2

On peut montrer que l’erreur commise est proportionnelle à ℎ si la fonction f


est deux fois continument dérivable. On dit que la méthode des trapèzes est
d’ordre 2. La formule exacte pour les fonction f polynôme de degré ≤ 1. La
formule des trapèzes peut être améliorée en procédant comme suit : on
développe f(x) en série de Taylor au voisinage de x0.
Exemple
5.5.2. Méthode de Simpson 1/3
Chapitre 7 : Equation différentielle ordinaire
Introduction
Une équation différentielle est une équation impliquant une ou plusieurs
dérivées d’une fonction inconnue. Si toutes les dérivées sont prises par
rapport à une seule variable, on parle d’équation différentielle ordinaire.
Une équation mettant en jeu des dérivées partielles est appelée équation aux
dérivées partielles.
On dit qu’une équation différentielle (ordinaire ou aux dérivées partielles) est
d’ordre p si elle implique des dérivées d’ordre au plus p. Nous consacrerons
le chapitre suivant à l’étude d’équations aux dérivées partielles.
Dans le présent chapitre, nous considérons des équations
différentiellesordinaires d’ordre un.

7.1 Quelques problèmes types


Les équations différentielles décrivent l’évolution de nombreux phénomènes
dans des domaines variés, comme le montre les quatre exemples suivants.
Problème 7.1 : (Thermodynamique) Considérons un corps ponctuel de
masse m et de température interne T situé dans un environnement de
température constante Te. Le transfert de chaleur entre le corps et l’extérieur
peut être décrit par la loi de Stefan-Boltzmann
( )= ( ( )− )
où t est la variable temporelle, la constante de Boltzmann (égale à 5.6 ×
10 / , est l’abréviation de Joule, K celle de Kelvin et, naturellement,
m et s celles de mètre et seconde), est la constante d’émissivité du corps, S
sa surface et est la vitesse de transfert dechaleur. Le taux de variation de
l’énergie ( ) = ( ) (où est lacapacité calorifique du corps) est égal, en
valeur absolue, à la vitesse .Par conséquent, en posant (0) = , le calcul
de ( ) nécessite la résolution de l’équation différentielle ordinaire

=−

Ce qui donne

=− ( ( )− ) (7.1)
Problème 7.2(Dynamique des populations) Considérons une populationde
bactéries dans un environnement confiné dans lequel pasplus de B individus
ne peuvent coexister. On suppose qu’au temps initialle nombre d’individus
est égal à ≪ et que le taux de croissancedes bactéries est une constante
positive C. Alors, la vitesse de croissancede la population est proportionnelle
au nombre de bactéries, sousla contrainte que ce nombre ne peut dépasser
B. Ceci se traduit parl’équation différentielle suivante

= 1− (7.2)

dont la solution y = y(t) représente le nombre de bactéries au temps t.


Supposons que deux populations y1 et y2 soient en compétition.
L’équation (5.2) est alors remplacée par

= (1 − − )
(7.3)
=− (1 − − )

Où et représentent les taux de croissance des deux populations.


Les coefficients et commandent le type d’interaction entre les deux
populations, tandis que et sont reliés à la quantité de nutriments
disponibles.
Les équations (5.3) sont appelées équations de Lotka-Volterra et servent de
base à divers modèles. Leur résolution numérique est traitée dans l’Exemple
7.7.
Problème 7.3 (Trajectoire au baseball) On veut simuler la trajectoired’une
balle de baseball depuis le lanceur jusqu’au catch. En adoptantle référentiel
représenté sur la Figure 7.1, les équations décrivant lemouvement de la balle
sont (voir [Ada90], [GN06])
Résolution numérique des problèmes aux limites
Problème d’ordre 2
Il s’agit des problèmes de la forme :
= ( , , ′)
( )= (1)
( )=

Au problème (1) est associée la famille de problèmes aux valeurs initiales


paramétrés par le scalaire u suivant :
= ( , , ′)
( )= (2)
( )=

Il revient donc à chercher u telle que la solution de (2) vérifie (1), c’est-à-
dire ( ) = ( ) = .
Avec 1 = et 2 = ′,
1 = 1( , 1, 2) = 2

2 = 2( , 1, 2) = ( , 1, 2)
(2) ⇔
⎨ 1( ) =
⎩ 2( ) =
Activité 1
1. Créer une fonction MATLAB 4 ( , , , , , ) pour la résolution du
problème (2) parla méthode de Runge-Kutta explicite d’ordre 4 où n est le
nombre de subdivision de l’intervalle [ , ]. La fonction retournera deux
vecteurs x et y de la solution du problème ;
Faire une application avec le problème (3):

+3 =0
(0) = 0 (3)
(2) = 1

2. Créer la fonction ℎ ( , , , , , ) avec des arguments relatifs au


problème (2) et qui retourne ( ) où est la solution du problème (2) et
n le nombre de subdivision de l’intervalle [ , ]. On utilisera la méthode
de Runge-Kutta explicite d’ordre 4. On pourra tester cette fonction avec
le problème (3).
3. Représenter la fonction ⟼ ℎ ( , , , , , ) pour le problème (3), on
choisira un intervalle de sorte que la courbe de ℎ coupe la droite
= = 1. En déduire une solution du problème (3) (en faire la
représentation graphique sur l’intervalle [0 ; 2].
4. Rechercher les solveurs ODE prédéfinis dans MATLAB et les utiliser pour
résoudre le problème «

Solution de 1

On utilise l’algorithme de Runge-Kutta d’ordre 4 explicite.

function [x,y,dy]=RK4exp(f,a,b,alpha,u,N)
%============================================================
% Cette fonction est un solveur de problème aux valeurs initiales
% d’ordre 2 de la forme y’’=f(x,y,y’) avec les conditions :
% y(a)=alpha et y’(a)=u.
%
% Utilisation: [x,y,dy]=RK4exp(f,a,b,alpha,u,N)
%
% Description des arguments :
% f : fonction de x, y et y’ définissant le second membre
% du problème
% a : borne inférieure de l’intervalle de résolution
% b : borne supérieure de l’intervalle de résolution
% alpha : scalaire définissant la condition y(a)=alpha
% u : scalaire définissant la condition y’(a)=u
% n : nombre de subdivision n de l’intervalle [a,b]
%
% Sortie
% x : vecteur des abscisses de la solution du problème
% y : vecteur des ordonnées de la solution du problème
% dy: dérivée de y
% Auteur: GBAGUIDI T. Brice
%===========================================================
%------Pas de subdivision
h=(b-a)/N ;
%------Création du vecteur x et initialisation de y1=y et y2=y’
x=linspace(a,b,N+1) ;
y1=zeros(1,N+1) ;
y2=zeros(1,N+1) ;
%------Conditions initiales
y1(1)=alpha ;
y2(1)=u ;
%------Boucle pour le calcul de y1 et y2
for n=1:N
K11=h*y2(n) ;
K21=h*f(x(n),y1(n),y2(n)) ;
K12=h*(y2(n)+K21/2) ;
K22=h*f(x(n)+h/2,y1(n)+K11/2,y2(n)+K21/2) ;
K13=h*(y2(n)+K22/2) ;
K23=h*f(x(n)+h/2,y1(n)+K12/2,y2(n)+K22/2) ;
K14=h*(y2(n)+K23) ;
K24=h*f(x(n)+h,y1(n)+K13,y2(n)+K23) ;
y1(n+1)=y1(n)+(K11+2*K12+2*K13+K14)/6 ;
y2(n+1)=y2(n)+(K21+2*K22+2*K23+K24)/6 ;
end
y=y1 ;
dy=y2 ;
end

Application pour le problème (3) avec u=1/2

>> f=@(x,y,z)(-3*y*z); [x,y,dy]=RK4exp(f,0,2,0,1/2,1000) ; plot(x,y,x,dy) ;

>>legend(‘y’,’Dérivée de y’) ; grid on ;


0.7
y
Dérivée de y
0.6

0.5

0.4

0.3

0.2

0.1

0
0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2

Solution de 2

On utilise les mêmes séquences que la fonction 4 ( , , , ℎ , , ) sauf


que ℎ ( , , , ℎ , , ) retourne la dernière composante du vecteur y

function [yb]=theta(f,a,b,alpha,u,N)
%============================================================
% Cette fonction est un solveur de problème aux valeur initiale
% d’ordre 2 de la forme y’’=f(x,y,y’) avec les conditions :
% y(a)=alpha et y’(a)=u.
%
% Utilisation: [x,y,dy]=RK4exp(f,a,b,alpha,u,N)
%
% Description des arguments :
% f : fonction de x, y et y’ définissant le second membre
% du problème
% a : borne inférieure de l’intervalle de résolution
% b : borne supérieure de l’intervalle de résolution
% alpha : scalaire définissant la condition y(a)=alpha
% u : scalaire définissant la condition y’(a)=u
% n : nombre de subdivision de l’intervalle [a,b]
%
% Sortie
% x : vecteur des abscisses de la solution du problème
% y : vecteur des ordonnées de la solution du problème
% dy: dérivée de y
% Auteur: GBAGUIDI T. Brice
%===========================================================
%------Pas de subdivision
h=(b-a)/N ;
%------Création du vecteur x et initialisation de y1=y et y2=y’
x=linspace(a,b,N+1) ;
y1=zeros(1,N+1) ;
y2=zeros(1,N+1) ;
%------Conditions initiales
y1(1)=alpha ;
y2(1)=u ;
%------Boucle pour le calcul de y1 et y2
for n=1:N
K11=h*y2(n) ;
K21=h*f(x(n),y1(n),y2(n)) ;
K12=h*(y2(n)+K21/2) ;
K22=h*f(x(n)+h/2,y1(n)+K11/2,y2(n)+K21/2) ;
K13=h*(y2(n)+K22/2) ;
K23=h*f(x(n)+h/2,y1(n)+K12/2,y2(n)+K22/2) ;
K14=h*(y2(n)+K23) ;
K24=h*f(x(n)+h,y1(n)+K13,y2(n)+K23) ;
y1(n+1)=y1(n)+(K11+2*K12+2*K13+K14)/6 ;
y2(n+1)=y2(n)+(K21+2*K22+2*K23+K24)/6 ;
end
yb=y1(end) ;
end

Solution de 3

Ici il faut créer une subdivision d’un intervalle et calculer les yb


correspondant aux composantes respectives du vecteur issu de la
subdivision. L’intervalle sera déterminé de telle sorte que la courbe de ⟼
( ) coupe la droite = = 1. Le point d’intersection ainsi obtenu détermine
la valeur de u pour laquelle est solution du problème aux limites (1).

Problème d’ordre supérieur


Activité 2
Création d’un solveur des problèmes de la forme
= ( , ,…, )
(4)
( )=

( )
( )= ⋮
( )
( , )
( , )= ⋮
( , )
( )
( )= ⋮ = ⋮
( )

1. Créer une fonction MATLAB RK4SysLin( , , , , ) pour la résolution du


problème (4) parla méthode de Runge-Kutta explicite d’ordre 4 où n est
le nombre de subdivision de l’intervalle [ , ]. La fonction retournera le
vecteur abscisse x et la matrice y solution du problème ;
2. Tester la fonction RK4SysLin( , , , , ) avec le problème (3).
3. En utilisant la fonction RK4SysLin( , , , , ), résoudre les problèmes
(5) et (6)
−2 −6 =0
(0) = 2 (5)
(5) = (5) = 0

⎧ =

(6)
⎨ (0) = ′′(0) = 0
⎪ (1) = ′′(1) = 0

Exercice

Vous aimerez peut-être aussi