VaultBy ENSAMIENParrainage
Note2025-02-28

Notes MATLAB

CHOUBIK Houssam

TP2 : vecteurs et matrices (28-02-2025)

Matrices aléatoires

rand(n)
  • matrice carrée d'ordre n de réels aléatoires entre 0 et 1
randi(m,n)
  • matrice carrée d'ordre n d'entiers aléatoires entre 1 et m (i pour integer)

Produit scalaire

>> x = [10 20 30 69 90];
>> a = x*x'
a =
       14261
>> b = sum(x.*x)
b =
       14261

Les deux écritures x*x' et sum(x.*x) sont équivalentes.

repmat

repmat(M, m, n) répète la matrice M m fois en ligne et n fois en colonne. Utile pour générer des motifs ou étendre une matrice.

>> M = [1 2; 3 4];
>> repmat(M, 3, 5)     % matrice 6 x 10 : M répétée 3 fois vers le bas et 5 fois vers la droite

toeplitz

toeplitz(c, r) crée une matrice de Toeplitz dont la première colonne est c et la première ligne est r.

>> n = 5;
>> M = toeplitz([1 3 zeros(1,n-2)], [1 2 zeros(1,n-2)])
M =
     1     2     0     0     0
     3     1     2     0     0
     0     3     1     2     0
     0     0     3     1     2
     0     0     0     3     1

Si le premier élément de c et celui de r sont différents, MATLAB affiche un avertissement et garde celui de la colonne :

>> toeplitz([1 2 3], [4 5 6])
Warning: First element of input column does not match first element of input row.
         Column wins diagonal conflict.
ans =
     1     5     6
     2     1     5
     3     2     1

kron

>> A = [1 2; 3 4];
>> B = [5 6; 7 8];
>> kron(A,B)
ans =
     5     6    10    12
     7     8    14    16
    15    18    20    24
    21    24    28    32

kron multiplie chaque élément de A par la matrice B, on obtient une matrice par blocs :

kron(A,B) = [ 1*B  2*B
              3*B  4*B ]

TP3 : représentation graphique (28-02-2025)

Le point-virgule ; exécute une instruction sans afficher le résultat. Une expression non affectée (par exemple a+b;) est quand même rangée dans la variable ans, visible dans le Workspace.

>> a = 4, b = 2
>> a + b;

TP8 : polynômes, fractions rationnelles (15-03-2025)

Un polynôme est représenté par le vecteur de ses coefficients, du plus haut degré au plus bas : [2 5 4] correspond à 2x² + 5x + 4.

Dérivée : polyder

>> x = [2 5 4];
>> polyder(x)              % dérivée de x
ans =
     4     5
>> q = [5 2 3];
>> polyder(x, q)           % dérivée du produit x(t)*q(t)
ans =
    40    87    72    23
>> polyder(conv(x, q))     % même résultat : conv calcule le produit des polynômes
ans =
    40    87    72    23

[y, z] = polyder(a, b) renvoie y et z tels que y/z est la dérivée de la fraction a/b :

>> [y, z] = polyder(x, q)
y =
   -21   -28     7
z =
    25    20    34    12     9

Intégrale : polyint et polyval

polyint(p) ou polyint(p, constante) donne une primitive. Pour une intégrale entre deux bornes, on évalue la primitive avec polyval puis on fait la différence :

>> w = [2 2];
>> P = polyint(w)
P =
     1     2     0
>> polyval(P, [1 3])
ans =
     3    15
>> diff(polyval(P, [1 3]))   % intégrale de 1 à 3 = 15 - 3
ans =
    12

diff(v) renvoie les différences entre éléments voisins : diff([5 2 3 10]) donne [-3 1 7].

Décomposition en éléments simples : residue

>> n = 6;                 % numérateur
>> d = [1 6 11 6 0];      % dénominateur
>> [r, p, k] = residue(n, d)
r =
   -1.0000
    3.0000
   -3.0000
    1.0000
p =
   -3.0000
   -2.0000
   -1.0000
         0
k =
     []

Donc 6 / (x⁴ + 6x³ + 11x² + 6x) = -1/(x+3) + 3/(x+2) - 3/(x+1) + 1/x.

On revient à la fraction de départ avec [n, d] = residue(r, p, k).

Interpolation polynomiale : polyfit

>> x = randi(10, 1, 10);
>> y = randi(10, 1, 10);
>> p = polyfit(x, y, 4)    % polynôme de degré 4 le plus proche des points
>> rats(p)                 % affiche les coefficients sous forme de fractions

Avec un degré trop grand (ici 9 pour 10 points dont certains x sont répétés), MATLAB prévient que le polynôme est mal conditionné : il faut réduire le degré ou utiliser des x distincts.

Coder et décoder un message

>> m = 'bonjour je suis houssam';
>> code = double(m) + 25;     % codes ASCII décalés de 25
>> char(code - 25)            % on retrouve le message
ans =
    'bonjour je suis houssam'

    Type at least 2 letters. ↑ ↓ to move, Enter to open.