%%%%%%
% Quand ce fichier est ouvert dans votre MATLAB Editor, choisir
% Run du menu en haut (accepter "Add to MATLAB Path") ou, si 
% c'est déjà dans un directoire que MATLAB connait, taper son nom: 
% >> IntroMatlab1
% 
clear all   % supprimer toutes les variables 
disp('____________________________________')
disp('____________________________________')
disp('Ce script décrira plusieurs commandes utiles en MATLAB.')
disp('Ce qui est écrit après >> est la commande qu''il faudra taper.')
disp('Ce qui apparait sur l''écran est la réponse de MATLAB.') 
disp(' ')
disp('Veuillez ajuster la taille de la fenêtre ''Command Window'' pour voir un écran au complet à la fois')
disp(' ')
disp('Toucher n''importe quelle clef pour commencer ')
disp('(il faut que la fenêtre ''Command Window'' soit actif)... ')
disp('____________________________________')
pause

disp('Les commandes de base: créer les matrices et les vecteurs')
disp('Créer une matrice A:    >> A=[3 2 3; 1 -1 -4]')
A=[3 2 3; 1 -1 -4]

disp('Un vecteur ligne x:   >> x=[2 3 7]')
x=[2 3 7]

disp('Un vecteur colonne: >> [2; 3; 7] ')
[2; 3; 7]

disp('Donc, les points-virgules séparent les colonnes, et les espaces ou ')
disp('les virgules séparent les lignes.')
disp('____________________________________')
pause

disp('Pour transformer un vecteur ligne en colonne, utiliser x'':  >> x=x''')
x=x'

disp('Mais ATTENTION! x'' est la transposée CONJUGUÉE de x:  ')
disp('>> y = [1+2*i, 2-3*i]; y'' = ')
y = [1+2*i, 2-3*i];
y'

disp('Si tout ce que vous voulez est la transposée de x, la bonne façon est:')
disp('>> transpose(y)')
%disp('If all you want is the transpose, the correct way to do it is transpose(x)')
transpose(y)
disp('____________________________________')
pause
 

disp('Multiplier A par x:  >> y=A*x')
% disp('Multiply x by A')
y=A*x

disp('Définir le vecteur (colonne) b:  >> b=[0;1]; ')
% disp('Define the (column) vector b')
b=[0;1];

disp('puis construire la matrice augmentée [A | b]:  >> Aaug=[A b]'  )
% disp('and the augmented matrix [A | b]')
Aaug=[A b]


disp('Réduire Aaug à sa forme échelonnée réduite : >> rref(Aaug)')
%disp('Bring Aaug into its reduced row echelon form')
rref(Aaug)

disp('____________________________________')
pause

disp('Créer la matrice identité de dimension 3x3 :')
disp('>> I_3 = eye(3)')
I_3 = eye(3)


disp('Créer une matrice aléatoire A de dimension 3x3 (toutes les entrées de')
disp('A sont des nombres aléatoires entre 0 et 1 provenant d''une distribution')
disp('uniforme): >> A=rand(3,3)')
%disp('Create a random 3x3 matrix A (all entries of A are random numbers between 0 and 1)')
A=rand(3,3)

disp('____________________________________')
pause

disp('Calculer l''inverse de A :  >> inv(A)')
% disp('Compute the inverse of A')
inv(A)

disp('Maintenant, calculer l''inverse de A utilisant l''élimination de Gauss')
disp('(rref) : >> A_I_3 = [A I_3], rref(A_I_3)')
%disp('Now compute the inverse of A using Gaussian elimination (rref)')
A_I_3 = [A I_3]
rref(A_I_3)

disp('____________________________________')
pause

disp('générer un vecteur aléatoire de dimension 3x1 : >> b = rand(3,1)')
%disp('make random 3x1 vector')
b = rand(3,1)

disp('résoudre Ax = b en utilisant l''inverse de A : >> x = inv(A)*b')
%disp('solve Ax = b by first computing the inverse')
x = inv(A)*b

disp('résoudre Ax = b en utilisant l''opérateur \ : >> x = A\b')
%disp('solve Ax = b using the \ operator')
x = A\b

disp('____________________________________')
pause

disp('Les deux donnent la même réponse, mais la deuxième est plus efficace:')
disp(' ')
disp('Maintenant générer une matrice aléatoire A de dimension 1500x1500. ')
disp(' ')
disp('(On utilise ";" pour supprimer l''affichage de la matrice!) : ')
disp(' ')
disp('>> A = rand(1500, 1500);')
% disp('now make A a 1500x1500 random matrix - use ";" to suppress output')
A = rand(1500, 1500);
disp(' ')
disp('générer un vecteur aléatoire b de dimension 1500x1 :')
disp('>> b=rand(1500,1);')
%disp('make a random 5000x1 vector')
b=rand(1500,1);
disp(' ')
disp('Comparer la performance de deux méthodes pour résoudre un système')
disp(' ')
disp('>> tic;   inv(A)*b;   toc')
% disp('Compare which method is faster')
tic;inv(A)*b;toc
disp(' ')
disp('>> tic;       A\b;     toc')
tic;A\b;toc

disp('____________________________________')
pause
 
disp('On utilise un . pour faire une opération élément par élément.')
disp('>> y = [1;2;3]; x = [4;5;6];')
% disp('Compare .* and .^ to * and ^')
y = [1;2;3];
x = [4;5;6];

disp('x.*y donne le vecteur (x1y1, x2y2, x3y3): >> x.*y')
% disp('This produces a vector consisting of component-wise products of x and y')
x.*y

disp('x''*y donne le produit scalaire x1y1+x2y2+x3y3 : >> x''*y')
%disp('this gives the inner product')
x'*y

disp('y.^2 donne le vecteur (y1^2, y2^2, y3^2) : >> y.^2')
%disp('this produces a vector whose entries are the squares the each entry of y')
y.^2


disp('____________________________________')
pause

disp('Soient deux matrices: >> A = [1, 2, 3; 4 5 6; 7 8 9], B = [1 1 2; 2 2 3; 3 3 4]')
A = [1, 2, 3; 4 5 6; 7 8 9]
B = [1 1 2; 2 2 3; 3 3 4]

disp('____________________________________')
pause

disp('Multiplication matrice-matrice:  >> A*B')
%disp('matrix-matrix multiplcation')
A*B

disp('Le carré d''une matrice:  >> A^2')
%disp('square of a matrix')
A^2


disp('Le . donne une matrice dont les entrées sont les carrés de chaque ')
disp('entrée de la matrice A : >> A.^2')
%disp('component-wise squaring of a matrix')
A.^2

disp('____________________________________')
pause

disp('Le déterminant d''une matrice carrée A: >> det(A)')
% disp('determinant of a matrix')
det(A)

disp('Matlab donne seulement un avertissement si vous essayez d''invertir')
disp('une matrice singuliere: >> inv(A)')
% disp('Matlab gives a warning if you try to invert a singular matrix:')
inv(A)

disp('____________________________________')
pause

disp('Les normes d''un vecteur ou d''une matrice.');
%disp('norms of a vector:');
disp('Soit: >> x = [1+1i,-2, 3i]')
x = [1+1i,-2, 3i]
disp('norme 1 (somme des val abs):  >> norm(x,1)')
%disp('1-norm')
norm(x, 1)
disp('norme 2 (norme euclidienne), qui est le défaut : >> norm(x,2) (ou norm(x))')
% disp('2-norm')
norm(x, 2)
disp('norme infini (max en val abs) : >> norm(x,inf)')
%disp('infinity-norm')
norm(x, inf)


disp('____________________________________')
pause

% exemples additionnelles: 
disp('Opérations avec les matrices complexes.')
disp('>> A = [1+2*i, 2-3*i, i; 1+i, 1-3*i, 2*i  ]')
% disp('A complex matrix')
A = [1+2*i, 2-3*i, i; 1+i, 1-3*i, 2*i  ]


disp('La transposée conjuguée de la matrice A : A'' ou >> ctranspose(A)')
% disp('The conjugate transpose of A using the ctranspose(.) operator ')
ctranspose(A)

disp('La transposée de la matrice A : >> transpose(A)')
% disp('The transpose of A')
transpose(A)

disp('Fin de IntroMatlab1') 




