clear // Efface les valeurs des variables créées // commentaires /* commentaires par bloc */ ///////////////////////// PARTIE 1 /////////////////////// //Initialisation des variables a=1 ; b=a-3 ; disp(a); if (a=b) ; endfunction // ------------ // Q7 //------------ function [res1,res2]=operations(a,b) res1=my_sum(a,b) ; res2=my_min(a,b) ; endfunction operations(a,b) // retourne seulement la première sortie de la fonction [A,B]=operations(a,b) ;//renvoie les deux sorties nommées A et B // Fonction operations alternative function res=operations_alt(a,b) res1=my_sum(a,b) res2=my_min(a,b) res=[res1,res2] endfunction operations_alt(a,b) ; ///////////////////////// PARTIE 2 //////////////////// clear () borne_min=-1 ; borne_max=1 ; nInt=100 ; // Nombre de points qur la grille pas=(borne_max-borne_min)/(nInt-1) ; //longueur des sous-intervalles X_alt = borne_min:pas:borne_max ; // points de la grille X=linspace(borne_min,borne_max,nInt) ; // X_alt et X identiques // dl de 'exp' en 0 à l'ordre 2 Y=exp(X) // OU function res=ex(x) // Alternative en créant une fonction res=exp(x); endfunction // ------------ // Q8 //------------ plot(X,ex(X),col="red") //couleur rouge // ------------ // Q9 //------------ title("fonction exponentielle") xlabel("x") // ajoute le label en abs ylabel("y") gcf().children.grid = color("grey70")*[1 1] // ajoute une grille // ------------ // Q10 Q11 Q12 Q13 //------------ // dl de 'exp' en 0 à l'ordre 1 Y1=1+X // OU function res=dl1(x) // Alternative en créant une fonction res=1+x ; endfunction // dl de 'exp' en 0 à l'ordre 2 Y2=1+X+ X.*X/2 //OU function res=dl2(x) // Alternative en créant une fonction res=1+x+(x.*x)/2 ; // carré de chacune des composantes (sans le "." devant "*" c'est le produit matriciel" endfunction clf scf() X=X' // transposée de X plot(X,[ex(X) dl1(X) dl2(X)]) title("fonction exponentielle et ses dl ordre 1 et ordre 2 ") xlabel("x") // ajoute le label en abs ylabel("y") gcf().children.grid = color("grey70")*[1 1] hl=legend(['exp(x)';'dl1(x)';'dl2(x)']); // legende positionnée en Upper Right // Alternative avec la commande plot2d co=[color('red'),color('green'),color('navy blue')]; clf gca().line_style = 2; plot2d(X',ex(X'),co(1)) gca().line_style = 4; plot2d(X', dl1(X'),style=co(2)) gca().line_style = 3; plot2d(X', dl2(X'),style=co(3)) title("Fonction Exp et ses dl ordre 1 et 2") legends(['Expo'; 'dl1'; 'dl2'],[[co(1);2],[co(2);4],[co(3);3]],opt="lr")// on peut ajouter une légende //Alternative sans la légende avec la fonction plot gca().data_bounds(1:2) = [-1 1]; // fixe le range des abscisses plot(X', ex(X'),"+r", X', dl1(X'),"g-", X', dl2(X'),"bo") title("Fonction Exp et ses dl ordre 1 et 2") scf() // ------------ // Q14 //------------ clf subplot(3,2,1) // divise en 2 lignes 3 colonnes plot(X, sin(X)) plot(X, cos(X)) title("Le titre de la partie 1") subplot(3,2,2) Xt=X' // transpose Z=[cos(Xt) ; sin(Xt)] // il est nécessaire que dim( Z) = 2 * dim Xt // plot(T,Z) plot(Xt,Z) title ("Le titre de la partie 2") subplot(3,2,3) plot(X, sin(X),"-r") // ajoute de la couluer plot(X, cos(X),"-b") title( "Le titre de la partie 3") subplot(3,2, 4) plot(X, sin(X),":r") plot(X, cos(X),"+-b") title( "Le titre de la partie 4") subplot(3,2, 5) plot(X, sin(X)) plot(X, cos(X)) xlabel("axe x") title( "Le titre de la partie 5") subplot(3,2, 6) plot(X, sin(X)) plot(X, cos(X)) ylabel("axe y") title( "Le titre de la partie 6") ///////// PARTIE 3 Mesure du temps d'execution d'un programme (1er exemple) /////////////////////// // ------------ // Q15 //------------ clear X=1:10; Y=[1 5 7 9]; Z1=zeros(1,10); Z2=zeros(10,1); T1=ones(1,10); X=rand(1,10,"normal"); X(4); X(2:$) // usage du dollars ; affiche toutes les composantes de X à partir de la seconde X(1:$-2) // affiche toutes les composantes de X à partir de la seconde jusqu'à l'avant avant dernière X'; // X transposé // ------------ // Q16 //------------ function res=scalaire(X,Y) res=sum(X.*Y) ; endfunction function res=orthogonal(X,Y) res=(sum(X.*Y)==0) ; endfunction // ------------ // Q17 //------------ function res=suite(n) V=1:1:n; W=V.^2; res=1./W; endfunction // ------------ // Q18 //------------ function res=serie(n) res=sum(suite(n)); endfunction // ------------ // Q19 //------------ // boucle FOR for i=1:5 //Affiche les entiers de 1 à 5 disp(i); end X= [ 1 2 3 4 5]; X=1:5 ; for i=X disp(i + 1); // Affiche les nombres dans le vecteur X end function res=Sn2(n) my_suite=suite(n) res=0; for i=1:n res=res+my_suite(i) end endfunction // ALTERNATIVE sur la boucle for function res=Sn2_a(n) res=0; for i= suite(n) res=res+i end endfunction function res=serie2(n) s=0 for i=1:n s=s+1./i^2 end res=s endfunction // ------------ // Q20 //------------ disp("--- timing suites ---") timer();res=Sn2(500);disp(timer()) timer();res=serie(500);disp(timer()) /////////////////////////PARTIE 4 Mesure du temps d'exécution d'un programme (2eme exemple)//////////////////////// // ------------ // Q21 //------------ timer A=rand(100,100) timer() function [low,upp]=tab_alt_1(t) n=length(t) med=ceil(n/2) t_ord_in=gsort(t,"g","i") low=t_ord_in(1:med) upp=t_ord_in(med+1:n) endfunction // OU ALTERNATIVE function [low,upp]=tab_alt_2(t) n=length(t) med=ceil(n/2) t_ord_in=gsort(t,"g","i") low=t(t<= t_ord_in(med)) upp=t(t> t_ord_in(med)) endfunction x=linspace(0.5,3,300) y=log(x) // ------------ // Q22 //------------ // avec boucle for donne un vecteur colonne function res=derive_2(x,y) n=length(x) for i=1:n-1 res(i)=(y(i+1)-y(i))/(x(i+1)-x(i)); end endfunction // ------------ // Q23 //------------ // sans boucle for donne un vecteur ligne function res=derive_1(x,y) delt_x=diff(x) delt_y=diff(y) res=delt_y./delt_x endfunction // ------------ // Q24 //------------ // fonction f(x)=x^4 x=linspace(-10,10,4000) y=x.^4 ; clf plot(x,y) // 1ere dérivée nx=length(x); x1=x(2:nx); plot(x1,derive_1(x,y),"g") // 2eme dérivée y1=derive_1(x,y); nx1=length(x1); x2=x1(2:nx1); plot(x2,derive_1(x1,y1),"r") // 3eme dérivée y2=derive_1(x1,y1); nx2=length(x2); x3=x2(2:nx2); plot(x3,derive_1(x2,y2),"+-r") // 4eme dérivée y3=derive_1(x2,y2); nx3=length(x3); x4=x3(2:nx3); plot(x4,derive_1(x3,y3),"o-") // ------------ // Q25- Q26 //------------ // f(x) =x^3 + x^2 n=4000 x=linspace(-1000,1000,n) y=x.^3+x.^2 ; disp("--- timing dérivées (comparaison méthodes) ---") timer();y1=derive_1(x,y);disp(timer()) timer();y2=derive_2(x,y);disp(timer()) plot(x1, y1, "red") p3=scf()//nouvelle fenetre graphique timer(); y1=derive_1(x, y); disp(timer()) plot(x1, y1, "green") ///////////////////////// PARTIE 5 : Masques // ------------ // Q27 //------------ a = 1:10 a > 5 ///////////////////////// PARTIE 6 Exercices // ------------ // Q28 //------------ function res=saut(x) res(1,x<=0)=0; res(1,x>0)=1; endfunction n=100; x=linspace(-2,2,n) y=saut(x); scf() plot(x,y) // ajuster le range des ordonnées sinon pb d'affichage gca().data_bounds(3:4) = [-1 2]; gca().tight_limits = "on"; // ------------ // Q29-Q30 //------------ function res=f(x) y1= (0<=x & x <1) res(1,y1)=exp(-x(y1))-exp(-1) y2= (-1 <= x & x <0) res(1,y2)=exp(x(y2))-exp(-1) y3 = y1|y2 res(1, ~y3)=0 endfunction n=100; x=linspace(-2,2,n) y=f(x) plot(x,y) gca().data_bounds(3:4) = [-1 1]; gca().tight_limits = "on";