tp2 matlab - Examen corrige
L'ordinateur affiche (sort) la valeur de a. Ce cas est particulièrement simple
puisqu'il faut au contraire préciser à Matlab qu'on ne veut pas afficher la réponse:
.
part of the document
ondition dêtre sûr quil y en a un nombre FINI ! Sinon, lordinateur va planter.
1/ La boucle itérative for
help for
for i=1:10;
y1(i)=i^2;
end;
y1
Noubliez pas le ; et le end
for i= 1:3:25;
y2(i)=3*i+2;
end;
y2
Ecrivez encore quelques boucles pour entrer des suites que vous connaissez.
En général, les boucles for sont très pratiques pour effectuer une suite dopérations, mais avec Matlab, il existe une méthode souvent plus efficace: la vectorisation. On létudiera plus en détail dans le II/.
help disp
for i=12:-2:1;disp(i),end;
for i=12:-2:1;
disp(i);
if i==8, break;
end;
Comparez avec la suite dinstructions suivante:
for i=12:-2:1;
disp(i);
end;
if i==8, break;
Expliquez la différence.
La suite de Fibonacci est définie par récurrence à partir de ses deux premiers termes u0 et u1 en posant u(n+2)=u(n+1)+u(n)
Effectuez, puis expliquez les lignes suivantes:
n=25;u(0)=1;u(1)=1;
for i=2:n
u(i)=u(i-1)+u(i-2);
end;
u(n)
2/ La boucle répétitive while
help while
v(0)=1;v(1)=1;
i=1;
while v(i)0
y=y/x;
x=x-sin(x)^2;
n=n+1;
if n==1000, break;end;
end;
n,x
La syntaxe if ---, --- else --- end; est très souvent utile. Leelse est facultatif, maisnoubliez pas le end;
Dans de gros prgrammes, il est préférable de passer à la ligne pour rester lisible; on écrit donc:
if taratata==1, turlututu=3 %Notez le premier ==, puis le =, expliquez la différence.
else
if taratata==-8, tralala=34
end; %cest le end du deuxième if
end; % cest le end du premier if
n=5;k=1;
while n~=1
if mod(n,2)==0
n=n/2;k=k+1;
else n=3*n+1;k=k+1;
end;
end;
Cette suite sappelle suite de Syracuse. Grâce à la programmation de cette suite sur ordinateur on constate quelle converge. Essayez de le démontrer
et si vous y arrivez ,
bravo! Doù lintérêt de pouvoir calculer rapidement les termes de la suite.
II/- Création de vecteurs , vectorisation
La vectorisation est un avantage de Matlab : quand on a une suite dopérations à effectuer, et quon connait le nombre dopérations, on peut effectuer une boucle « for, mais on peut aussi souvent faire des opérations vectorielles ;
Comparez les instructions :
for i=1:10;
y1(i)=i^2;
end;y1
avec
i=1:10;
y1=i.^2
Vectorisez la boucle suivante:
for i= 1:3:25;
y2(i)=3*i+2;
end; y2
On peut retenir les deux règles suivantes:
-quand il est possible de vectoriser, alors cest préférable.
-quand la suite dopérations dune boucle itérative ne dépend pas de lordre dans lequel ces opérations sont effectuées, alors on peut (et on doit) vectoriser le problème.
Pour vectoriser un problème, il faut savoir créer des vecteurs (et des matrices).
Création
- : Vous avez souvent rencontré cette instruction, elle permet de créer des vecteurs en progression arithmétique
x=6 :-0,6 :3
y=1 :2 :9
z=-pi :pi/5:pi
-la fonction linspace. Essayez help linspace
help logspace
- les fonctions prédéfinies pour rentrer des matrices
x=zeros(1,5)
y=ones(5,1)
z=rand(2,3)
clear ;
-les crochets pour rentrer des vecteurs et matrices de petite taille à la main.
x=[1,2,8]
y=[4 6 1]
z=[3 ;-2 ;2]
t=[3 ;-1,2]
expliquez.
A=[x ;y]
Opérations
On peut modifier des vecteurs par des opérations scalaires ou matricielles :
x2=x.*y
x3=x2.+x
y
b1=y*x
b2=y*x
b3=y.*z
b4=x.^2
b5=x./y
b6=x.\y
A=2*eye(3,3)+rand(3,3)./100
t=A\x
u=A*t % Laligne précédente permet de résoudre léquation matricielle At=x
c=diag(A)
B=diag(x)
Exercice : résoudre matriciellement
3x+2y=12 et x+y=5
help reshape
A=[2 4 1 4 ; 3 1 3 6 ; 7 3 1 2 ]
B=reshape(A,6,2)
C=reshape(A,4,3)
D=reshape(C,2,6)
Essayez sur dautres exemples.
Regardez laide pour max,min,sum , prod, cumsum puis essayez sur les exemples précédents, en cherchant avant de taper lesinstructions de quelle taille va être le résultat :
max(A)
a=sum(A)
a2=sum(A)
b,cumsum(b)
prod(C)
etc
III/- Création de fonctions
1/- Fichiers Matlab
Pour diverses raisons il est important de savoir créer des fichiers Matlab. Cela sert évidemment à sauver les programmes, ou scripts quon a écrit, mais cest indispensable au sein même dun programme pour faire appel à des fonctions dont on se sert souvent.
En haut de la fenêtre Matlab, en cliquant sur File on peut créer un nouveau fichier (New) ou en ouvrir un ancienOpen. Une nouvelle fenêtre souvre dans laquelle vous allez pouvoir taper puis sauver votre fichier.
Il faut toujours donner une extension .m à vos fichiers, par exemple toto.m et les sauver sur votre disquette (a:).
Créez un fichier sappelant votrenom.m, tapez-y une suite dinstructions, par exemple
for i= 1:3:25;
y2(i)=3*i+2;
end;
y2
Sauvez votre fichier , fermez-le, puis tapez son nom sur la ligne de commande .
Matlab effectue alors les instructions contenues dans votre fichier.
2/-Création de fonctions.
help function
Si on veut effectuer plusieurs fois la même opération, ou si on veut écrire des programmes clairs dans lesquels les différentes étapes sont bien délimitées, il faut créer des fonctions.
Matlab comporte déjà beaucoup de fonctions mathématiques prédéfinies. Tapez
help elfun
Il y a deux méthodes pour créer des fonctions.
Fonctions en ligne
La première doit être évitée si possible, mais peut parfois être utile si on veut aller vite:
Tapez: help inline
g1=inline(sin(t^2)+3)
g2=inline(x^2+cos(y-1),x,y)
g1 est une fonction à une seule variable, il ny a pas besoin de la préciser, Matlab la reconnaît tout seul.
g2 est une fonction de deux variables x et y
g1(0), g2(0,1)
on peut également définir des fonctions dépendant de paramètres:
g3=inline(x^3-4y^2+5t, x,y)
Là, g3 est une fonction de deux variables x et y, et t est un paramètre qui doit être connu au moment de l' appel de la fonction. Tapez
g3(1,0)
t=6;
g3(1,0)
Fichiers .m
La meilleure méthode pour créer des fonctions est de créer un fichier avec extension .m pour chaque fonction utilisée.
Un exemple: créez un nouveau fichier qui sappelle g2.m .
Tapez dans ce fichier les instructions suivantes:
function [z]=g2(x,y)
z= x^2+cos(y-1)
Sauvez votre fichier sur votre isquette et fermez le .
Sur votre ligne de commande, tapez maintenant
[z]=g2(2,3)
Pour des fonctions aussi simples, lintérêt de créer des fichiers pour chaque fonction nest pas clair. Mais prenez lhabitude de créer systématiquement des fonctions de cette manière, cela simplifiera la programmation par la suite.
Attention: quand on déclare une fonction, il est indispensable de lui donner le nom du fichier dans lequel elle est. Sinon, vous ne pourrez pas lappeler depuis la ligne de commande Matlab. Essayez pour vous en convaincre:
Ouvrez un nouveau fichier tralala.m et tapez dedans ;
function [z]=g(x,y)
z= x^2+cos(y)
Sauvez le puis essayez de demander la valeur g(30) par exemple.
Plus généralement, une fonction Matlab peut avoir plusieurs (ou aucune) variables à lentrée : e1,e2,.. et plusieurs variables à la sortie: s1,s2,..
Essayez help nargin
help nargout
Exercice: Créez un fichier eq1.m, et programmez une fonction function [x,n]=eq1(a,b) qui résout léquation du premier degré ax+b=0, avec n le nombre de solutions et x la solution sil y en a.
Vous pouvez utiliser les instructions if
else
et nargin
Idée:
-sil ny a pas deux variables dentrée, il ny a pas de solution n=0
-sil y en a deux, résoudre léquation, et sil y a une solution, donner sa valeur à x et n=1
Exercice:
De même, créez un fichier eq2.m, et programmez une fonctionfunction [x1,x2,n]=eq2(a,b,c) qui résout léquation du second degré a.x^2+bx+c=0.
-Sil y a trois variables dentrée
-si le discriminant est strictement positif, alors n=2, x1=
,x2=
-si le discriminant est nul, alors
-sinon, il ny a pas de solution, alors
-sil y a deux variables dentrée, on résout léquation du premier degré
-sinon,
Exercice
créez une fonction syracuse qui pour une valeur (entière) de n donnée au départ (en entrée), vous donne le nombre k ditérations nécessaires avant darriver à 1.
Remarque: Vous pouvez rentrer vos fonctions dans laide en ligne, à condition davoir ajouté des explications. Cela peut être utile si vous avez un gros programme avec de nombreuses fonctions f1, f2, f3, g1
Ouvrez par exemple votre fichier eq2.m, ou nimporte quel autre que vous avez écrit, et APRES la première ligne, tapez %suivi dune explication de votre choix sur votre fonction.
Sauvez et fermez votre fichier, puis tapez help nomdufichier.
IV/- Graphisme
Dans toute la suite, pensez à créer (et sauvegarder) des fichiers .m pour chaque courbe tracée. Pour faire tracer la courbe, tapez juste le nom de votre fichier sur la ligne de commande.
1/ Graphisme en deux dimensions
Il existe de nombreuses options qui permettent de tracer des courbes variées.
Tapez help plot
Un exemple simple :
x=-pi :pi/100 :pi ;y=sin(x) ;
plot(x,y)
Retenez avec cet exemple que pour tracer une courbe, il faut donner à Matlab deux VECTEURS, x et y (de même taille), et Matlab trace une courbe passant par les points de coordonnées (x(i),y(i)), mais pas la fonction sin x
Pour comprendre, essayez les exemples suivants :
x=-pi :pi /5 :pi ;y=cos(x) ;
plot(x,y)
Puis
x=-pi :pi :pi ;y=cos(x)+1 ;plot(x,y)
Expliquez.
Plusieurs courbes, avec des options graphiques
x=-pi :pi /5 :pi ;y=cos(x) ;plot(x,y,y)
x=-pi :pi /5 :pi ;y=cos(x) ;plot(x,y,r.)
Consultez help plot et essayez toutes les options que vous trouvez.
Si on veut deux options, il suffit de juxtaposer les symboles associés, comme ci-dessus avec r.
Attention, ne demandez pas des options contradictoires comme ry. Vous pouvez essayer pour vous en convaincre, ça ne marche pas.
Pour tracer plusieurs courbes sur le même dessin, il suffit de les demander de la façon suivante :
x=-pi :pi /5 :pi ;y=cos(x) ;z=sin(x^2) ; t=log(x+2*pi) ;
plot(x,y,m :,x,z,g*,x,t,k