Vous êtes sur la page 1sur 12

10/12/2017

5.Fonctions d’entrée / sortie sous


MATLAB
 Affichage simple des données
• disp(A): afficher le contenu d’un tableau A de valeurs numériques ou
de caractères (texte) sans écrire le nom de la variable
- toutes les valeurs du tableau doivent être du même format (soit
du texte soit des valeurs numériques)
• num2str(A): convertir les données numériques contenues dans le
tableau A en une chaîne de caractères.
>>res=sin(pi);
>>disp(['Le résultat est ', num2str(res)]);
 Lecture simple des données
• input(‘texte’) : demander à l’utilisateur de saisir des données
numériques à la suite d’une message ‘texte’ qui s’affiche à l’écran

• input(‘texte’,’s’) : demande à l’utilisateur de saisir des données texte


(chaîne de caractères) à la suite d’une message ‘texte’ qui s’affiche à
l’écran. Exemple:
N = input( 'Nombre de boucles est N=\n'); % entrée interactive
disp(N) % affiche la valeur de N
1

5.Fonctions d’entrée / sortie sous


MATLAB
 Impressions dirigées par format
Pour personnaliser l'affichage, il est possible d'utiliser la fonction
sprintf qui permet de construire des chaînes de caractères
complexes, en formatant l'affichage des variables.
sprintf(format, variables)

- variables est le nom des variables à imprimer suivant le modèle
d'édition spécifié dans format;
- format est le format d'édition. Il s'agit d'une chaîne de
caractères contenant les modèles d'éditions des variables à
imprimer.
>> sprintf('%s', 'il fera beau a rabat') Ou
temps = 'il fera beau a rabat'; sprintf('%s',temps)

1
10/12/2017

5.Fonctions d’entrée / sortie sous


MATLAB
où format est une chaîne de caractères décrivant le format d'écriture des
variables var1,var2,... que l'on
souhaite afficher. Les principaux types de formats d'écriture sont :
- %d entier %5d : entier de taille 5, par exemple 34562
- %f réel %5.2f : réel de taille 5 avec 2 chiffres après la virgule, par
exemple 32.42
- %e exponentiel %10.2e : nombre de la forme -21.01e+05
- %g réel double précision mode automatique de détection entre %e et %f
- %s chaîne de caractères
Par souci de simplicité, on peut se contenter d'utiliser les formats %d, %f,
%e sans spécifier de taille précise.
Par ailleurs on dispose de certains opérateurs de mise en forme, par exemple
\n pour passer à la ligne. Ainsi,
on écrira, par exemple :
fprintf('\n Convergence en %d iterations ',it)
où it désigne une variable contenant un entier.

5.Fonctions d’entrée / sortie sous


MATLAB

>> x = pi/3; y = sin(x);


>> sprintf(’sin(%8.6f) = %4.2f’, x,y)
ans =
sin(1.047198) = 0.87
>> sprintf(’sin(%8.6f) = %4.2E’, x,y)
ans =
exp(1.047198) = 8.66E-01

2
10/12/2017

5.Fonctions d’entrée / sortie sous


MATLAB
d’impression est réutilisé pour tous les éléments du tableau,
colonne par colonne.

>> x = [1:10];
>> sprintf(’ %d ,’,x)
ans =
1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ,

5.Fonctions d’entrée / sortie sous


MATLAB
Ouverture et fermeture d’un fichier
L’instruction fid=fopen(nomfichier,permission) ouvre le fichier
nomfichier et retourne un entier qui identifie ce fichier dans fid,
permission étant une chaine de caractères spécifiant les opérations
possibles avec ce fichier :
– ’r’ pour lire (par défaut, le fichier est ouvert en mode lecture),
– ’w’ pour écrire,
– ’a’ pour ajouter,
– ’a+’ pour lire et ajouter,
– ’w+’ pour écrire et lire.
NB : fid = −1 si le fichier n’a pas pu être ouvert.
L’instruction fclose(fid) ferme le fichier dont l’identificateur donné par
la commande fopen est fid.
L’instruction fclose(’all’) ferme tous les fichiers ouverts.

3
10/12/2017

5. Fonctions d’entrée / sortie sous


MATLAB
 Fichier de données : load, save
save : écrit toutes les variables du workspace dans le fichier
matlab.m
load : charge dans le workspace toutes les variables du fichier
matlab.m
 Fichier numérique :dlmread
• dlmread(‘nom_fichier’) lit les données numériques à partir de
mon_fichier.
• dlmwrite(‘nom_fichier’,M) ecrit les données numériques de M dans
mon_fichier.
>> A = rand(6,5); A = floor(A * 100);
>> dlmwrite('myfile.txt', A);
>> dlmread('myfile.txt');
Voir aussi textread, textscan, importdata …

5.Fonctions d’entrée / sortie sous


MATLAB
ex : % ce programme affiche un message
clear all;
reponse = input (‘fait-il beau? (y/n) ‘, ‘s’);
if (reponse==‘y’)
fprintf (‘vous êtes de bonne humeur \n’);
else
fprintf (‘vous êtes de mauvaise humeur \n’);
end
Exécution:
>> question
fait-il beau? (y/n) y
vous êtes de bonne humeur
>> help question
ce programme affiche un message
>>

4
10/12/2017

5. Fonctions d’entrée / sortie sous


MATLAB
 Fichier texte : fopen, fclose
fopen : ouverture d’un fichier
fclose : fermeture d’un fichier
fscanf : lecture formatée
fprintf : écriture formatée
fid = fopen('test.txt','w'); ouvre un fichier ou le créé
fprintf(fid,'%s\n','vecteur x'); écrit dans le fichier de
nom test.txt.
fid est sa référence pour matlab.
 Fichier son :wavread, wavwrite

5. Fonctions d’entrée / sortie sous


MATLAB
 Exemple:
 Ecriture dans le fichier exemple.txt
x = linspace(0,1,10);
u = [x; exp(x)];
fid = fopen('exemple.txt','w+');
fprintf(fid,'%6.2f %12.8f\n',u);
fclose(fid);

 Lecture à partir du fichier exemple.txt


fid = fopen('exemple.txt', 'r');
v = fscanf(fid, '%f %f', [2 inf])
fclose(fid)
10

5
10/12/2017

Résolution des équations différentielles

Les principales fonctions de MATLAB qui permettent la


résolution des équations différentielles sont :
 ode23 : Méthode de Runge-Kutta dite d’ordre 2,3
 ode45 : Méthode de Runge-Kutta dite d’ordre 4,5
(la plus utilisée)

11

Exemple 1 : équation différentielle du premier ordre


Soit une fonction y1(t) soumise à l’équation différentielle :
Créons le fichier f10.m :

Créons le fichier f1o.m:


function dy=f1o(t,y)
%equation differentielle du 1er ordre
dy(1)=(10-y(1))./2;

12

6
10/12/2017

Pour resoudre:
[t,y]=ode23('f1o’,[0,20],5) ou [t,y]=ode23(@f1o,[0,20],5)
plot(t,y)
Pour avoir une tolérance sur les calculs de 1e-7 :
>> [ t , y ] = ode23 ('f1o' ,{ 0 20} , [ 5 ] , 1e-7)
A tester :
>> [t , y ] = ode45 ( 'f1o' , [0 20 ], 5 )
10

9.5

8.5

7.5

6.5

5.5

5 13
0 2 4 6 8 10 12 14 16 18 20

Reformulation du problème
 Reformuler le problème sous la forme d’un système
d’équations différentielles du premier ordre.
 Pour utiliser les solveurs ODE, on doit d’abord réécrire les
équations différentielles sous la forme d’un système équivalent
d’équations différentielles du premier ordre.
 On peut écrire une équation différentielle quelconque

sous la forme d’un système d’équation différentielles du premier


ordre en faisant le changement de variable suivant :

14

7
10/12/2017

 Reformuler le problème sous la forme d’un système


d’équations différentielles du premier ordre.
 Le résultat est un système de n équations différentielles du
premier ordre équivalent :

 Remarque : Noter les indices à gauche et à droite du signe =

15

 Exemple 2 : équation différentielle du deuxième ordre


Créons le fichier f2o.m :

……………………….

Pour resoudre:

………………

16

8
10/12/2017

 Exemple 2 : équation différentielle du deuxième ordre


Créons le fichier f2o.m :
function dy=f2o(t,y)
%equation differentielle 2ieme ordre
dy(1)=-0.5.*y(1)-2.*y(2);
dy(2)=y(1);
dy=dy'

Pour resoudre:
[t,y]=ode23(@f2o,[0,10],[0 2])
Ou
[t,y]=ode45(@f2o,[0,10],[0 2])
plot(t,y) ou plot ( t , y ( : , 1 ) ) ou plot ( t , y ( : , 1 ) )

17

Exemple 3 : équation différentielle du troisième


ordre

 𝑦3 = 6 avec 𝑦3 𝑡 = 0 = 1, 𝑦3 𝑡 = 0 = 1 , 𝑦3 𝑡 = 0 = 2
 Créons le fichier f3o.m :
………………………..

Pour resoudre
 ……………………………………..

18

9
10/12/2017

Exemple 3 : équation différentielle du troisième


ordre

 Créons le fichier f3o.m :


function dy=f3o(t,y)
%edp 3ieme ordre
dy(1)=6;
dy(2)=y(1);
dy(3)=y(2);
dy=dy';
 [t,y]=ode45(@f3o,[0 2],[2 1 1])
 Plot(t,y)

19

 Exemple traité:
Soit l’équation différentielle du second ordre connue sous le nom de équation
𝑑2 𝑦
de l’oscillateur harmonique : + 𝜔0 2 y=0
𝑑𝑡 2
Pour résoudre cette équation à l’aide des solveurs ode, il faut l’exprimer sous
une forme vectorielle, pour cela :
 ……………………………………………..

20

10
10/12/2017

 Exemple traité:
Soit l’équation différentielle du second ordre connue sous le nom de équation
𝑑2 𝑦
de l’oscillateur harmonique : + 𝜔0 2 y=0
𝑑𝑡 2
Pour résoudre cette équation à l’aide des solveurs ode, il faut l’exprimer sous
une forme vectorielle, pour cela :
 Création de 2 vecteurs de dimension 2 correspondant à l’ordre de
l’équation différentielle :
𝒅𝒚
• vecteur y : solution y(1)=y et y(2)=
𝒅𝒕
𝒅𝒚 𝒅𝟐 𝒚
• vecteur dydt: dérivée dydt(1)= et dydt(2)=
𝒅𝒕 𝒅𝒕𝟐

21

On transforme l’équation différentielle d’ordre 2 en un système de


deux équations différentielles du premier ordre :
Équation différentielle:
𝑑2 𝑦 𝑑2 𝑦
+ 𝜔0 2 y=0 c’est à dire = −𝜔0 2 y
𝑑𝑡 2 𝑑𝑡 2

dydt(1)=y 2
Forme vectorielle:
dydt(2)= − 𝜔0 2 𝑦 1
On écrit une fonction function correspondant à ces deux lignes:

function dydt=oscillateur(t,y)
omega=1;
dydt(1)=y(2);
dydt(2)=-omega.^2*y(1);
dydt=dydt’ ;% on convertit la ligne en colonne.
22

11
10/12/2017

 On écrit un fichier .m appelé equadiff dans lequel


 On définit le domaine d’étude :
tinitial = 0; tfinal = 10; deltat=[0 10];
 On définit les conditions initiales : dy/dt(0) = 0 et y (0) = 0.25
yinit=[0 0.25]
 On appelle ode45 [t,y]=ode45(@oscillateur,deltat,yinit)
[t,y]=ode45(@oscillateur, [0 10], [0 0.25])
t: vecteur contenant les instants auxquels la solution a été
calculée.
y: matrice deux colonnes
- la première colonne y( :,1) contient y (t)
- la seconde colonne y( :,2) contient la dérivée
dy/dt
 On fait la représentation graphique de la solution en fonction de t
: plot(t,y)
23

12