function TP0_corr
format long
close all

% Ce Tp a pour objectif de vous familiariser (si vous ne l etes pas deja) avec Matlab,
% ainsi qu avec le format des sujets de Tps que nous allons utiliser dans ce cours.
% Il consiste en une serie de questions, sans necessairement de lien les unes avec les autres,
% mais vous permettant de voir l essentiel des fonctions Matlab dont nous aurons besoin ce semestre.


%---------------
% Question 1
%---------------
% Que font les lignes suivantes :
% Reponse
a = 5;        % on crée une variable a, de valeur 5
b = 2;        % on crée une variable b, de valeur 2
c = a + b;    % on crée une variable c, de valeur a + b = 5 + 2 = 7
a = 3;        % on change la valeur de a, mais ça ne change pas la valeur de c !!!
c             % on vérifie que c vaut toujours 5
a+b           % évidemment, a+b a changé, et vaut maintenant 3 + 2 = 5

Pause('Question 1')
%------------
% Question 2
%-------------
% En matlab, tout (ou presque) est une matrice.
% Par exemple, la commande A = [1,2,3;4,5,6] definit une matrice A de 2 lignes et 3 colonnes
% dont la premiere ligne est 1 2 3 et la seconde 4 5 6.
% Definissez (et affichez) une matrice M de taille 2 x 2 telle que la premiere ligne soit 3,3 et la seconde 2,1;
% Definissez, et affichez, le vecteur colonne V de taille 4, de composantes 1 2 3 et 4, et le vecteur
% Vt, vecteur transpose de V.

M = [3,3;2,1]
V = [1;2;3;4]
Vt = [1,2,3,4]  % vecteur transposé de V construit "a la main"
Vt = V'         % vecteur transposé construit en utilisant le ' de matlab

Pause('Question 2')
%--------------
% Question 3
%-------------
% Comment cree-t-on rapidement une matrice de taille 10 x 6
%  - remplie de zeros ?
%  - remplie de 1 ?
%  - remplie aleatoirement ?
% Comment cree-t-on rapidement un vecteur contenant :
%   - tous les entiers de 1 à 20 en ordre croissant
%   - tous les entiers pairs de 1 à 20 en ordre croissant
%   - tous les entiers de 1 à 10 en ordre décroissant
% Reponse

M = zeros(10,6)     % matrice remplie de zeros
M = ones(10,6)      % matrice remplie de 1
M = rand(10,6)      % matrice remplie aleatoirement, reels pris aleatoirement dans [0,1] (loi uniforme)
M = randn(10,6)     % matrice remplie aleatoirement, reels pris dans tout R (loi gaussienne)

V = 1:20            % vecteur des entiers de 1 a 20
V = 2:2:20          % vecteur des entiers de 2 a 20, par pas de 2 (ce qui donne les entiers pairs compris entre 2 et 20)
V = 10:-1:1         % vecteur des entiers de 10 a 1, par pas de -1 (ce qui donne les entiers de 10 a 1 en ordre decroissant)

Pause('Question 3')
%----------------
% Question 4
%----------------
% Completez la fonction Plusgrandquezero qui se trouve en fin de fichier.
% Testez la sur la matrice M donnée ci-après
% Reponse

M = [[2,1,-1];[0,1,-1];[-2,-1,-1]]
A = Plusgrandquezero(M)

Pause('Question 4')
%--------------
% Question 5
%-----------------
% En fait, on peut faire beaucoup plus rapide que la fonction Plusgrandquezero, pour le
% meme resultat. Pour commencer, enlevez les ";" des commandes suivantes, et essayez
% de comprendre ce qu elles font
% Reponse
A = [1,2;1,-3]
B = [1,2;0,1]
A*B				% multiplication matricielle de A et B
B*A				% multiplication matricielle de B et A (/!\ different de A*B !)
A+B				% addition des deux matrices A et B
A-B				% soustraction des deux matrices A et B
A.*B			% multiplication coefficients a cofficients de A et B
B./A      		% division coefficient a coefficient de B et A
A > 0  			% matrice valant 1 quand A(i,j)> 0, 0 sinon
A == B
B.*(A>0)		% matrice valant B(i,j) quand A(i,j) >0, 0 sinon

Pause('Question 5')
%------------------
% Question 6
%-----------------
% En deduire comment obtenir le meme resultat que la fonction Plusgrandquezero en 
% une seule commande
% Reponse

M = [[2,1,-1];[0,1,-1];[-2,-1,-1]]
A = M.*(M>0)		% cf question precedente


Pause('Question 6')
%----------------
% Question 7
%------------------
% Completez la fonction Fonction, en fin de fichier. Testez la avec le vecteur
% a = -2:2;
% Vous devez obtenir
%  0.512681174086530   0.289634379594613   0.000000000000000   0.000000000000000   9.330481220648306
% Reponse

a = -2:2;
Fonction(a)

Pause('Question 7')
%------------------
% Question 8
%-----------------
% A l aide de la fonction plot, representez en vert le triangle de sommets (0,0), (2,2), (-1,3)
% 
% Reponse

plot([0,2,-1,0],[0,2,3,0],'g');   % plot( abscisses, ordonnees, couleur)


Pause('Question 8')
%----------------
% Question 9
%------------------
% Rajoutez au graphique précédent le rectangle de sommets (-1,-1), (1,-1), (1,1), (-1,1),
% dessinez en bleu
% Reponse

hold on;									% on demande de garder la figure precedente
plot([-1 1 1 -1 -1],[-1 -1 1 1 -1],'b-');
hold off									% on arrete le maintien de la figure

Pause('Question 9')
%---------
%Question 10
%--------------
% A l aide des fonctions linspace et plot, representez sur une nouvelle figure le graphique de la fonction Fonction
% sur l intervalle [-1,1] en rouge, et l axe des abscisses en noir

figure();											% pour obtenir une nouvelle figure
xx = linspace(-1,1,150);							% vecteur de 150 abscisses equireparties entre -1 et 1 (-1 et 1 inclus)
plot(xx,Fonction(xx),'r',[-1,1],[0,0],'k');			% le dessin demande

Pause('Question 10')

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%% LA PARTIE FONCTIONS A COMPLETER COMMENCE ICI %%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

function A = Plusgrandquezero(B)
% Cette fonction prend en argument une matrice B, et renvoie
% une matrice A telle que A(i,j) = B(i,j) si B(i,j) > 0
%                         A(i,j) = 0 sinon

[m,n] = size(B);                         	% on recupere les dimensions de B
A = zeros(m,n); 							% on cree une matrice A de la bonne dimension, remplie de zeros
for kk=1:m 
	for ll=1:n
		if B(kk,ll) > 0
			A(kk,ll) = B(kk,ll);			% si B(kk,ll)>0, alors on met la valeur de B(kk,ll) dans A(kk,ll)
		end
	end
end

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

function y = Fonction(x)
% Cette fonction prend comme argument un vecteur x de taille quelconque
% et renvoit y un vecteur tel que y(i) = exp(x(i)) * (x(i)^2 - x(i)) / (cos(x(i))+2)
% pour tout i de 1 jusqu a taille de x.

y = exp(x).*(x.^2-x)./(cos(x)+2);   % /!\ les operations composantes par composantes s'obiennent en rajourant un '.'
									% devant le symbole de l'operation desiree

%%%%%% /!\ NE RIEN MODIFIER A PARTIR D ICI /!\ %%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function Pause(c)
disp(strcat(c,'. Appuyer sur une touche pour continuer'));
pause
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
