Cours Matlab
Cours Matlab
Cours Matlab
MATLAB
2
4.5 Interruption d’une boucle de contrôle . . . . . . . . . . . . . . . . . . . . . . 30
5 Exercice récapitulatif . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
INTRODUCTION A
L’ENVIRONNEMENT MATLAB
1 Introduction générale
Matlab est un logiciel de calcul scientifique développé par la société Mathworks. Initialement
développé à la fin des années 70 pour effectuer le calcul matriciel, Matlab est utilisé aujourd’hui au-
tant pour le calcul matriciel que pour l’analyse des données, leur visualisation et le développement
d’algorithmes.
— Sa richesse fonctionnelle : Avec ses multiples fonctions intégrées, Matlab permet de réaliser
des manipulations mathématiques complexes en écrivant peu d’instructions.
— Sa manière de tout gérér comme étant des matrices : Ce qui libère l’utilisateur de
s’occuper de typage de données et ainsi de lui éviter les problèmes de transtypage.
— La possibilité d’utiliser les boites à outils (toolboxes) : Ce qui encourage son uti-
lisation dans plusieurs disciplines (simulation, traitement de signal, imagerie, intelligence
artificielle,...etc.).
— Le traitement du signal
— Le traitement d’image
— L’automatisme
1
Cours : Application numérique avec MATLAB Coaching school
3 Environnement de MATLAB
Toutefois, il est possible de modifier l’interface de MATLAB à sa préference avec l’option Layout.
>> 5*9
ans =
45
>> 5*9;
>>
Il est possible d’écrire plusieurs expressions dans la même ligne en les faisant séparées par des
virgules ou des points virgules.
>> 5+6,2*5-1;12-4
ans =
11
ans =
8
Il est également possible d’écrire une longue instruction sur plusieurs lignes en utilisant les trois
points de suspension (...)
>> x=5
x =
5
L’opérateur d’affectation est utilisé d’une manière récursive comme dans l’exemple suivant :
>> x=5
x =
5
>> x=x+3
x =
8
>> x=2*x*x
x =
128
NB : Le nom d’une variable ne doit contenir que des caractères alphanumériques ou le symbole
«_» (underscore), et doit commencer par un alphabet. Nous devons aussi faire attention aux
majuscules car le MATLAB est sensible à la casse (A et a sont deux identifiants différents).
Dans cette exemple, V est une variable de type caractère affectée par le caractère ‘M AT LAB’,
x et y sont des variables numériques et z est une variable tableau. La commande whos fournie
plus d’informations que la commande who et la fenêtre W orkspace donne plus de détails sur les
variables.
Pour supprimer une variable de la mémoire, la commande suivante est peut être utilisée :
clear N om_variable
>> clear x
Et pour supprimer tous les variables, c’est la commande clear ou clear all qui est utilisée :
>> clear
Pour mettre fin à l’enregistrement, il faut quitter MATLAB ou taper la commande suivante :
diary of f
>> max(A,B)
ans =
10 44 9
Lorsqu’il y a plusieurs arguments de sortie, ceux-ci sont placés entre crochets
>> disp('Bonjour')
Bonjour
Commande Signification
format short Affiche les nombres avec 04 chiffres après la virgule
format short e Affiche les nombres avec 05 chiffres avec notation en virgule flot-
tante (Notation scientifique avec 04 chiffres après la virgule)
format long e Affiche les nombres avec 16 chiffres avec notation en virgule flot-
tante (Notation scientifique avec 15 chiffres après la virgule)
MATLAB dispose également des formats format short g et format long g qui utilise la
meilleure des deux écritures à virgule fixe ou à virgule flottante.
>> pi
ans =
3.1416
>> format long
>> pi
ans =
3.141592653589793
>> format short e
>> pi^3
ans =
3.1006e+001
>> format short g
>> pi^3
ans =
31.006
>> format short
>> pi
ans =
3.1416
>> fraction = 7.2*3.1 ;
>> format rat
>> fraction
fraction =
558/25
La fonction vpa peut être utilisé afin de forcer le calcul et présenter plus de décimaux signifi-
catifs en spécifiant le nombre de décimaux désirés.
>> sqrt(2)
ans =
1.4142
>> vpa(sqrt(2),50)
ans =
1.4142135623730950488016887242096980785696718753769
Constante Valeur
pi π = 3.1415...
exp(1) e = 2.7183...
Inf ∞
N aN N ot a N umber (Pas un numéro)
eps ε ≈ 2 × 10−16
>>Z1+Z2
ans =
7 + 10i
>> Z1*Z2
ans =
-11 + 29i
>> Z1/Z2
ans =
0.4189 + 0.0135i
>> abs(Z1)
ans =
3.6056
>> angle(Z2)
ans =
0.9505
>> real(Z1)
ans =
2
>> imag(Z2)
ans =
7
Opérateur Signification
+ Addition
- Soustraction
* Multiplication
/ Division
\ Division gauche (division inverse)
∧
Puissance
’ Transposé
( et ) Les parenthèses spécifient l’ordre d’évaluation
mod Reste de la division euclidienne
>> D = 4;
>> V = (4/3)*pi*(D/2)^3
V =
33.5103
L’évaluation d’une expression s’exécute de gauche à droite en considérant la priorité des opé-
rations indiquée dans le tableau suivant :
Fonction Signification
sin(x) Sinus de x (en radian)
cos(x) Cosinus de x (en radian)
tan(x) Tangente de x (en radian)
asin(x) Arcsinus de x (en radian)
acos(x) Arccosinus de x (en radian)
atan(x) Arctangente de x (en radian)
√
sqrt(x) Racine carrée de x ( x)
abs(x) Valeur absolue de x (|x|)
exp(x) ex
log(x) Logarithme naturel de x (ln(x) = loge (x)
log10(x) Logarithme à base 10 de x (log10 (x))
imag(x) Partie imaginaire du nombre complexe x
real(x) Partie réelle du nombre complexe x
round(x) Arrondi un nombre vers l’entier le plus proche
f loor(x) Arrondi un nombre vers l’entier le plus petit
(max{n tel que n ≤ x, n entier})
ceil(x) Arrondi un nombre vers l’entier le plus grand
(min{n tel que n ≥ x , n entier})
rem(m, n) Donne le reste de la division euclidienne de m par n
lcm(m, n) Donne le PPCM de m et n
gcd(m, n) Donne le PGCD de m et n
f actor(n) Donne la décomposition en facteurs premiers de n
>> cos(pi/4)
ans =
0.7071
>> sin(pi/3)
ans =
0.8660
>> tan(pi/3)
ans =
1.7321
>> atan(pi/3)
ans =
0.8084
>> format rat
>> atan(pi/3)
ans =
1110/1373
MATLAB était conçu à l’origine pour permettre aux mathématiciens, scientifiques et ingé-
nieurs d‘utiliser facilement les mécanismes de l’algèbre linéaire. Par conséquent, l’utilisation des
vecteurs et des matrices est très intuitif et commode en MATLAB. En d’autre terme, Matlab est
un logiciel de calcul matriciel. Maitriser la manipulation des matrices est essentiel pour la prise en
main de son langage.
Une matrice est un tableau rectangulaire avec m lignes et n colonnes et contenant des éléments
numérique de même type.
1 Les vecteurs
Un vecteur est une liste ordonnée d’éléments. Si les éléments sont arrangés horizontalement
on dit que le vecteur est un vecteur ligne, par contre si les éléments sont arrangés verticalement on
dit que c’est un vecteur colonne.
Pour créer un vecteur ligne il suffit d’écrire la liste de ses composants entre crochets [ et ] et de les
séparés par des espaces ou des virgules comme suit :
>> V=[5,2,13,-6]
V =
5 2 13 -6
3
>> W=[2 3 1]
W =
2 3 1
— Soit d’écrire les composantes du vecteur entre crochets [ et ] et de les séparés par des points-
virgules ( ;) ;
13
Cours : Application numérique avec MATLAB Coaching school
>> U=[4;-2;1]
U =
4
-2
1
>> U=[4
-2
1]
U =
4
-2
1
>> U=[4 -2 1]'
U =
4
-2
1
Si les composants d’un vecteur X sont ordonnés avec des valeurs consécutives, nous pouvons
le noter avec la notation suivante :
X=Premier_élément : Dernier_élément
(Les crochets sont facultatifs dans ce cas)
>> n=0:5
n =
0 1 2 3 4 5
>> n=[0:5]
n =
0 1 2 3 4 5
Si les composants d’un vecteur X sont ordonnés avec des valeurs consécutives mais avec un pas
(d’incrémentation/décrémentation) différente de 1, nous pouvons spécifier le pas avec la notation
suivante :
>> n=0:2:10
n =
0 2 4 6 8 10
>> U=[1:2:5,-2:2:1]
U =
1 3 5 -2 0
>> A=[1 2 5]
A =
1 2 5
>> B=[A,4,6-15]
B =
1 2 5 4 6 -15
✠ 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 :
F in − Début
pas =
N ombre d′ éléments
>> V=linspace(3,9,7)
V =
3 4 5 6 7 8 9
>> W=linspace(9,3,7)
W =
9 8 7 6 5 4 3
Dans la commande linspace (Début, Fin), le nombre d’éléments est pris par défaut égale à 100,
c’est-à-dire :
L’accès aux éléments d’un vecteur se fait en utilisant la syntaxe générale suivante :
ans =
13
ans =
-1 13 -6
>> V=(4:-2:1) %Extraction des éléments de la 4e position jusqu'à la 1ere avec le pas =-2
ans =
-6 -1
V =
8 13 0 0 5
Exemple avec :
Opération Signification >> u=[-2,6,1];
>> v=[3,-1,4];
>> u+2
ans =
+ Addition des vecteurs 0 8 3
>> u+v
ans =
1 5 5
>> u-2
ans =
- Soustraction des vecteurs -4 4 -1
>> u-v
ans =
-5 7 -3
>> u*2
ans =
-4 12 2
>> u.*2
.* Multiplication élément par élément ans =
-4 12 2
>> u.*v
ans =
-6 -6 4
>> u/2
ans =
-1.0000 3.0000 0.5000
>> u./2
./ Division élément par élément ans =
-1.0000 3.0000 0.5000
>> u./v
ans =
-0.6667 -6.0000 0.2500
>> u.^2
ans =
.∧
Puissance élément par élément 4 36 1
>> u.^v
ans =
-8.0000 0.1667 1.0000
Donne le nombre
>> n=numel(x)
numel (N om_V ecteur) d’éléments qui existe
n =
dans un vecteur 4
Donne un autre vecteur
>> y=exp(x)
dont les valeurs sont les y =
2.7183 1.0000 7.3891 20.0855
exp (N om_V ecteur) exponentielles des
éléments du vecteur
initial
Donne l’élément
>> max(A)
max (N om_V ecteur) maximal d’un vecteur ans =
9
Calcule la moyenne
>> mean(A)
mean (N om_V ecteur) arithmétique des ans =
éléments d’un vecteur 3.2500
Calcule le produit
>> dot(x,A)
dot scalaire de 2 vecteurs ans =
(N om_V ecteur1, N om_V ecteur2)
19
Calcule le produit
>> a=[1,5,3];b=[4,9,8];
cross vectoriel de 2 vecteurs
>> cross(a,b)
(N om_V ecteur1, N om_V ecteur2) en dimensions 3 ans =
13 4 -11
2 Les matrices
Une matrice est un tableau rectangulaire d’éléments (bidimensionnels). Les vecteurs sont des
matrices avec une seule ligne ou une seule colonne (monodimensionnels).
Pour insérer une matrice, il faut respecter les règles suivantes :
• Les éléments doivent être mises entre des crochets [ et ]
• Les espaces ou les virgules sont utilisés pour séparer les éléments dans la même ligne
• Un point-virgule (ou la touche «entrer») est utilisé pour séparer les lignes
• Le nombre d’éléments dans chaque ligne (nombre de colonnes) doit être identique dans toutes
les lignes de la matrice
Pour illustrer cela, considéront la matrice suivante :
1 2 3
4 5 6
7 8 9
Cette matrice peut être écrite en Matlab avec l’une des syntaxes suivantes :
>> u=[1,2,3;4,5,6;7,8,9];
>> u=[1 2 3;4 5 6;7 8 9];
>> u=[1,2,3
4,5,6
7,8,9];
>> u=[[1;4;7],[2;5;8],[3;6;9]];
En 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 :
Commande Signification
zeros(n) Génère une matrice n × n avec tous les éléments = 0
zeros(m, n) Génère une matrice m × n avec tous les éléments = 0
ones(n) Génère une matrice n × n avec tous les éléments = 1
ones(m, n) Génère une matrice m × n avec tous les éléments = 1
eye(n) Génère une matrice identité de dimension n × n
magic(n) Génère une matrice magique de dimension n × n
rand(m, n) Génère une matrice de dimension m × n de valeurs aléatoires
pascal(n) Génère une matrice de Pascal d’ordre n
vander(V ) Génère une matrice de Vandermonde du vecteur V
NB :
— Une matrice magique d’ordre n est une matrice carrée n×n dont la somme de toutes les
valeurs d’une ligne, d’une colonne ou de la diagonale est la même.
>> magic3=magic(3)
magic3 =
8 1 6
3 5 7
4 9 2
>> pascal(4)
ans =
1 1 1 1
1 2 3 4
1 3 6 10
1 4 10 20
— Si V=[v1 , v2 , ...vn ] est un vecteur de dimension n, alors les éléments de la matrice de Van-
dermonde sont exprimés suivant la formule A(i, j) = vi n−j .
>> V=1:4
V =
1 2 3 4
>> vander(V)
ans =
1 1 1 1
8 4 2 1
27 9 3 1
64 16 4 1
Les opérations élément par élément sur les matrices sont les mêmes que ceux pour les vecteurs (la
seule condition nécessaire pour faire une opération élément par élément est que les deux matrices
aient les mêmes dimensions).
Commande Utilité
size (N om_M atrice) Donne la dimension d’une matrice
size (N om_M atrice, 1) Donne le nombre de lignes d’une matrice
size (N om_M atrice, 2) Donne le nombre de colonnes d’une matrice
det (N om_M atrice) Calcule le determinant d’une matrice
inv (N om_M atrice) Calcule l’inverse d’une matrice
rank (N om_M atrice) Calcule le rang d’une matrice
trace (N om_M atrice) Calcule la trace d’une matrice
eig (N om_M atrice) Calcule les valeurs propres d’une matrice
diag (N om_M atrice) Renvoie le diagonal d’une matrice
diag (N om_V ecteur) Crée une matrice ayant le vecteur dans la diagonal et 0
ailleurs.
tril (N om_M atrice) Renvoie la partie triangulaire inferieure d’une matrice
NB : La commande eig (N om_M atrice) permet également de determiner des vecteurs propres
d’une matrice carrée. L’exemple ci-dessus explicite la méthode pour le faire.
>> A=[2 1 -1
3 2 -3
3 1 -2]
A =
2 1 -1
3 2 -3
3 1 -2
>> [V,D]=eig(A)
V =
0 -0.5774 0.7071
-0.7071 -0.5774 -0.0000
-0.7071 -0.5774 0.7071
D =
-1.0000 0 0
0 2.0000 0
0 0 1.0000
Les colonnes du tableau V sont les vecteurs propres normalisés V (:, 1), V (:, 2) et V (:, 3) et la
diagonale du tableau D est formé par les valeurs propres D(1, 1), D(2, 2) et D(3, 3).
1 Fonctions
Le principe d’une fonction est d’effectuer des opérations à partir d’une ou plusieurs entrées et
fournir une ou plusieurs sorties (résultat). Les variables d’entrées sont des paramètres à spécifier
en argument de la fonction, tandis que les variables de sorties sont des valeurs qu’elle renvoie. Un
M-File f unction est tout à fait semblable aux fonctions intégrées de MATLAB.
Un fichier f unction à deux rôles, celui de définir des fonctions ou des procédures qui ne figurent
pas parmi les fonctions incorporées de MATLAB et celui de les utiliser de la même manière que
les fonctions utilisateur.
La structure générale d’un fichier fonction est :
function [sortie1,sortie2,sortie3]=Nom_fonction(arg1,arg2)
% Suite d'instructions
end
24
Cours : Application numérique avec MATLAB Coaching school
Fonction qui calcule la racine carrée d’un nombre par la méthode de Newton
Dans le cas où la fonction possède qu’une seule sortie et plusieurs arguments d’entrées, il est
plus commode d’utiliser une fonction anonyme au lieu d’utiliser un fichier fonction.
2
L’exemple de la fonction : f (x, y) = (1 − x)2 e−x −(y+1) s’écit comme suit :
2
f =
@(x,y) (1-x).^2.*exp(-(x.^2)-(y+1).^2)
Cette écriture signifie que x et y sont les arguments de la fonction f ; (x, y) pouvant être des
tableaux de même dimensions, à titre d’exemple :
>> f(2,5)
ans =
4.2484e-18
>> f(5,2)
ans =
2.7423e-14
>> x=[2 1]; y=[0 1];
>> f(x,y)
ans =
0.0067 0
2 Scripts
Un fichier script permet regrouper des séries de commandes MATLAB. Cela évite d’avoir à
saisir plusieurs fois de longues suites d’instructions. Si le script est écrit dans un fichier dont le
nom est Name_of_M-File.m alors, il peut être exécuté à partir de la fenêtre de commande de
MATLAB comme :
>> Name_of_M-file
Note :
Concernant la gestion des variables entre le programme principale (script) ou le workspace et
les fonctions, toutes les variables définies à l’intérieur d’une fonction sont des variables locales à
cette fonction. La communication avec des variables du programme principal (ou du workspace)
ou avec des variables d’autres fonctions se fait uniquement par les variables d’entrée et sortie de
la fonction. Une alternative existe toutefois : il est possible de déclarer certaines variables comme
des variables globales. Une variable globale peut être partagée entre un programme principal et
plusieurs fonctions sans qu’il soit besoin de la spécifier parmi les variables d’entrée-sortie des
différentes fonctions. Une variable globale est déclarée grâce au mot clé global suivit par le nom
du variable dans chaque fonction qui utilise ce même variable.
Execution Execution
>> programme >> racine(9)
Entrez un nombre positif: 6 ans =
2.4495 3
On ne peut pas écrire des expressions tel que : On peut écrire sans problème des expressions
comme :
>> 2*programme+4
>> 2*racine(16)+4
Opérateur Signification
== Egal à
> Strictement Supérieur à
< Strictement Inférieur à
>= Supérieur à
<= Inférieur à
∼= Différent de
4.1 L’instruction if
Cette structure permet d’exécuter un bloc d’instructions en fonction de la valeur logique d’une
expression. Sa syntaxe générale est la suivante :
if Expression_Logique
Bloc d’instructions
end
L’ensemble des instructions (Bloc d’instructions) est exécuté seulement si
(Expression_Logique) est vraie. Plusieurs tests exclusifs peuvent aussi être combinés en
utilisant la syntaxe suivante :
if Expression_Logique_1
Bloc d’instructions_1 …
elseif Expression_Logique_2
Bloc d’instructions_2 …
else
Bloc d’instructions_3 …
end
Plusieurs elseif peuvent être concaténés, leur bloc est exécuté si l’expression corres-
pondante est vraie et si toutes les conditions précédentes n’ont pas été satisfaites. Le
Bloc d’instructions_3 associé au else est quant à lui exécuté si aucune des conditions
précédentes n’a été réalisées. Soit l’exemple :
x =input('Entrer un nombre');
if x < 0
disp('x est négatif ')
elseif x > 1
disp('x est supérieur à 1')
else
x = 1
end
Dans cette structure, une expression numérique est comparée successivement à différentes va-
leurs. Dès qu’il y a identité, le bloc d’instructions correspondant est exécuté. Sa syntaxe est :
switch expression
case valeur1,
instructions_1. . .
case valeur2,
instructions_2. . .
. . . . . . . .
otherwise
instructions. . .
end
L’expression testée, expression, doit être un scalaire ou une chaîne de caractère. Une fois qu’un
bloc instructions_i est exécuté, le flux d’exécution sort de la structure et reprend après
end. Si aucune case vérifie l’égalité, le bloc qui suit otherwise est exécuté.
Soit l’exemple :
switch x
case 0,
resultat = a + b;
case 1,
resultat = a * b;
case 2,
resultat = a/b;
case 3,
resultat = a^b;
otherwise
resultat = 0;
end
En fonction de la valeur de x une opération particulière est effectuée. Par défaut, resultat
prend la valeur 0.
n = 11;
for k = 1:n
x(k)= (2*k+1)/k;
end
while expression
instructions …
end
Le terme expression est une expression logique. Si cette dernière est vraie, le bloc
instructions est exécuté. Puis, expression est de nouveau testée. L’exécution du bloc est
répétée tant que le test est vrai.
Soit l’exemple :
compteur = 0;
while compteur < 11
disp(‘toujours dans la boucle’) ;
compteur = compteur + 1;
end
5 Exercice récapitulatif
Il existe des fonctions prédéfinis en Matlab donnée dans le tableau ci-dessous. Essayons de les
programmer (pour un vecteur donnée V).
METHODES NUMERIQUES DE
RESOLUTION D’EQUATIONS
DIFFERENTIELLES
1 Problème de Cauchy
La plupart des méthodes numériques pour résoudre les équations différentielles s’appliquent
à des problèmes du type problème de Cauchy suivant le nom donné par les mathématiciens. Ce
problème se formule de la manière suivante :
Trouver y(t) définie et dérivable sur [t0 , t0 + T ] et à valeurs dans Rm telle que :
dy(t)
= f (t, y(t)) ∀t ∈ [t0 , t0 + T ]
dt
(4.1)
y(t0 )
= y0
où f (t, y(t)) est une fonction de Rm+1 dans Rm et y0 ∈ Rm . Concrètement l’expression, “trouver
y(t) à valeurs dans Rm avec y0 ∈ Rm ” consiste à dire pour des applications comme Matlab, que
l’inconnue y(t) est un vecteur de m fonctions inconnues avec pour condition limite le vecteur y0 :
y1 (t) y1 (t0 )
y0,1
y2 (t) y2 (t0 )
y0,2
..
y0 = y(t0 ) =
..
=
..
. . .
ym (t) ym (t0 ) y0,m
De même, f (t, y(t)) est une fonction de t et du vecteur y(t) et doit retourner un vecteur colonne :
y1 f1
dy(t) d y2 f2
≡ .. = f (t, y(t)) ≡ ..
. .
dt dt
ym fm
Pour la plupart des problèmes qui intéressent les scientifiques et les ingénieurs, des théorèmes
33
Cours : Application numérique avec MATLAB Coaching school
dx(m−1)
x(m) (t) ≡ = φ t, x(t), x(1) (t), ...., x(m−1) (t) ∀t ∈ [t0 , t0 + T ] (4.2)
dt
Posons de nouvelles fonctions yi (t) avec i ∈ [1, 2, ..., m] définies telles que :
y1 (t) ≡ x(t), y2 (t) ≡ x(1) (t) , ..., ym (t) ≡ x(m−1) (t) (4.3)
Grâce à ces définitions, l’équation (4.2) d’ordre m s’écrit comme un système de m équations
d’ordre 1 :
dy1 (t)
= y (2) (t)
dt
..
.
dym−1 (t)
= y (m) (t)
dt
y (t)
m = φ (t, y1 (t), y2 (t), ..., ym (t))
dt
Ce système a donc la forme d’un problème de Cauchy en posant :
y1 (t) y2 (t)
.. ..
.
.
y(t) =
et f (t, y(t)) =
ym (t)
ym−1
ym (t) φ(t, y1 , ..., ym )
dy(t)
= f (t, y(t)) ∀t ∈ [t0 , t0 + T ]
dt
By : FOKAM TAGNE YVAN e-mail : [email protected] 34
Cours : Application numérique avec MATLAB Coaching school
Pour obtenir alors un problème de Cauchy, il faut spécifierr les conditions initiales
(y1 (t0 ), y2 (t0 ), ...ym (t0 )) ce qui revient à dire d’après l’équation (4.3) qu’il faut connaître x(t) et
ses dérivées jusqu’à l’ordre m − 1 au ‘temps’ initial t0 :(x(t0 ), x(1) (t0 ), ..., x(m−1) (t0 )). On remarque
qu’une équation différentielle d’ordre m d’une seule fonction inconnue, x(t), se traduit par un
problème de Cauchy avec m fonctions inconnues, yi (t) et m conditions initiales.
a1 x(t) + a2 x(1) (t) + ... + am x(m−1) (t) + x(m) (t) = s(t) (4.4)
a1 x(t) + a2 x(1) (t) + a3 x(2) (t) + a4 x(3) (t) + x(4) (t) = s(t)
d
a1 y1 (t) + a2 y2 (t) + a3 y3 (t) + a4 y4 (t) + y4 (t) = s(t)
dt
Et on déduit alors l’équation sous forme matricielle suivante :
y1 (t) 0 1 0 0 y1 (t) 0
y2 (t) 0 0 1 0 y2 (t) 0
d
= +
y3 (t) 0 0 0 1 y3 (t) 0
dt
y4 (t) −a1 −a2 −a3 −a4 y4 (t) s(t)
résoudre, mais nous savons que le vol du point s’effectue dans un plan parallèle au plan défini
par (xOz). On arrive donc à un système de deux équations différentielles de deuxième ordre à
résoudre :
d2 x
=0
dt2
(4.5)
2
d z = −g
dt2
Avec les conditions limites
x(t0 ) = x0 x(1) (t0 ) = v0,x
z(t0 ) = z0 z (1) (t0 ) = v0,z
Nous connaissons la solution exacte de chacune de ces deux équations :
x(t) = x0 + v0,x t
1
z(t) = z0 + vo,z t − gt2
2
Pour résoudre les équations différentielles d’ordre 2 de l’équation (4.5) on va définir des fonctions
du système u(t) (pour ne pas confondre avec la position y(t)) et invoquer les substitutions de
l’équation (4.3) :
u1 (t) ≡ x(t)
u3 (t) ≡ z(t)
On peut regrouper ces deux équations sous la forme d’une seule grande équation matricielle :
u1 (t) 0 1 0 0 u1 (t) 0
u2 (t) 0 0 0 0 u2 (t) 0
du d
≡
=
+
u3 (t) 0 0 0 1 u3 (t) 0
dt dt
u4 (t) 0 0 0 0 u4 (t) −g
Ou de manière équivalente :
u2 (t)
0
du
= f (t, u(t)) =
u4 (t)
dt
−g
La solution de cette équation va donc nous fournir les fonctions : x(t) = u1 (t), vx (t) = u2 (t),
z(t) = u3 (t) et vz (t) = u4 (t).
Pour résoudre numériquement cette équation différentielle, nous pouvons utiliser la fonction
‘ode45’ de MatLab. Cette fonction prend en argument le nom de la fonction f (t, u(t)), un vecteur
contenant les valeurs de t = [t0 , t1 , ..., tN ] pour lesquelles on veut connaître les valeurs de u(t),
[u(t0 ), u(t1 ), ..., u(tN )]. Pour certaines applications, on ne s’intéressera qu’à une seule et unique
valeur u(tN ) ; dans ce cas, on donne simplement un vecteur t = [t0 , tN ]. Dans les cas où il faut
connaître une trajectoire, il faut que t = [t0 , t1 , ..., tN ] contienne suffisamment d’éléments pour que
les courbes générées par ‘plot’ paraissent lisses.
APPLICATION
Ecrivons un script permettant de résoudre l’équation différentielle (4.5) avec les conditions ini-
tiales suivantes : x0 = z0 = 0, v0 ≡∥ →
−
v0 ∥= 100ms−1 , θ0 ≡ (x̂, →
−
v0 ) = 30° et montre la position de
la particule pour N+1=31 temps compris entre 0 et 11s.
tmin=0;
tmax=11;
v0=100;
deg=30;
x0=0;
z0=0;
vx0 = v0*cos(deg*pi/180) ;
vz0 = v0*sin(deg*pi/180) ;
Nint=30;
t=linspace(tmin,tmax,Nint+1);
u0=[x0 vx0 z0 vz0];
[t usol]=ode45(@fprojectile,t,u0);
xpos=usol(:,1);
zpos=usol(:,3);
plot(xpos,zpos,'o-b'),grid
function dudt=fprojectile(t,u)
n=length(u);
dudt=zeros(n,1);
dudt(1)=u(2);
dudt(2)=0;
dudt(3)=u(4);
dudt(4)=-9.8;
end
zn+1 − zn = a(tn+1 − tn )
d’où on tire
zn+1 − zn
a=
(tn+1 − tn )
zn tn+1 − tn zn+1
b=
tn+1 − tn
xn+1 ≡ x(tn+1 + d)
APPLICATION
Le script suivant permet de déterminer la position du point d’atterrissage. Les arguments étant
les vecteurs : t = [t0 , t1 , .., tn ], x = [x(t0 ), x(t1 ), ..., x(tn )] et z = [z(t0 ), z(t1 ), ..., z(tn )].
Il est à noter que le script suivant ne fonctionne de manière satisfaisante que si l’intervalle
∆ ≡ ti+1 − ti est suffisamment petit.
function [ta,xa,n]=point_atterrissage(t,x,z)
nc=length(t);
n=1;
while (z(n+1)>0 & n<nc)% Determine l'intervalle [n,n+1] dans lequel se trouve ta
n=n+1;
end
if (n~=nc)
ta=(z(n)*t(n+1)-t(n)*z(n+1))/(z(n)-z(n+1));
xa=ta*(x(n+1)-x(n))/(t(n+1)-t(n))+(t(n+1)*x(n)-t(n)*x(n+1))/(t(n+1)-t(n));
else
disp('Pas de point datterrissage dans les données')
end
end