Td corrigé tp2 matlab - Examen corrige pdf

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 qu’il y en a un nombre FINI ! Sinon, l’ordinateur va planter.
1/ La boucle itérative “for”
help for
for i=1:10;
y1(i)=i^2;
end;
y1
N’oubliez 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 d’opé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 d’instructions 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. Le’else’ est facultatif, maisn’oubliez 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; %c’est le ‘end’ du deuxième ‘if’
end; % c’est 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 s’appelle suite de Syracuse. Grâce à la programmation de cette suite sur ordinateur on constate qu’elle converge. Essayez de le démontrer … et si vous y arrivez ,… bravo! D’où l’inté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 d’opérations à effectuer, et qu’on connait le nombre d’opé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 c’est préférable.
-quand la suite d’opérations d’une boucle itérative ne dépend pas de l’ordre 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

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 d’autres exemples.

Regardez l’aide 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 qu’on a écrit, mais c’est indispensable au sein même d’un 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 ancien‘Open’. Une nouvelle fenêtre s’ouvre 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 s’appelant ‘votrenom.m’, tapez-y une suite d’instructions, 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 n’y 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 s’appelle 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, l’intérêt de créer des fichiers pour chaque fonction n’est pas clair. Mais prenez l’habitude 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 l’appeler 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 à l’entré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 s’il y en a.
Vous pouvez utiliser les instructions if… … else … et nargin
Idée:
-s’il n’y a pas deux variables d’entrée, il n’y a pas de solution n=0
-s’il y en a deux, résoudre l’équation, et s’il y a une solution, donner sa valeur à x et n=1
Exercice:
De même, créez un fichier eq2.m, et programmez une fonction’function [x1,x2,n]=eq2(a,b,c) ‘qui résout l’équation du second degré a.x^2+bx+c=0.
-S’il y a trois variables d’entrée
-si le discriminant est strictement positif, alors n=2, x1=…,x2=…
-si le discriminant est nul, alors…
-sinon, il n’y a pas de solution, alors…
-s’il y a deux variables d’entré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 d’itérations nécessaires avant d’arriver à 1.
Remarque: Vous pouvez rentrer vos fonctions dans l’aide en ligne, à condition d’avoir 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 n’importe quel autre que vous avez écrit, et APRES la première ligne, tapez %suivi d’une 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