0% ont trouvé ce document utile (0 vote)
49 vues6 pages

CFN - Matlab

Le document présente des fonctionnalités de base de MATLAB, y compris la manipulation de vecteurs et de matrices, l'indexage, les opérations sur les tableaux, et la création de graphiques. Il aborde également les structures de contrôle comme les conditions et les boucles, ainsi que la définition de fonctions. Enfin, des exemples pratiques illustrent comment utiliser ces fonctionnalités pour effectuer des calculs et des visualisations.

Transféré par

Daniel Defoing
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
49 vues6 pages

CFN - Matlab

Le document présente des fonctionnalités de base de MATLAB, y compris la manipulation de vecteurs et de matrices, l'indexage, les opérations sur les tableaux, et la création de graphiques. Il aborde également les structures de contrôle comme les conditions et les boucles, ainsi que la définition de fonctions. Enfin, des exemples pratiques illustrent comment utiliser ces fonctionnalités pour effectuer des calculs et des visualisations.

Transféré par

Daniel Defoing
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

CFN - MATLAB

• format long/short/eps/hex/... ​: afficher les nombres de façon différente (plus ou moins de


décimales, notation scientifique...)

• En MATLAB, tout est vecteur, même les "entiers".

◦ Vecteur ligne : l = [1 2 3]

◦ Colonne : c = [1;2;3]

◦ v = [1:0.3:10] = 1:0.3:10 ​= valeurs de 1 à 10 avec un step de 0.3 ​. Syntaxe : start:step:stop

◦ b = linspace(1, 10, 5) ​: 5 valeurs identiquement espacées de 1 à 10.

◦ Transposition de matrice : opérateur ' ​( l = l' ​)

◦ c = ([Link])' ​: créé un vecteur colonne d'éléments de 5 à 9 avec un spacing de 2 , le tout en une


seule commande. Les parenthèses spécifient l'ordre des opérations.
[Link]' ​fonctionne aussi dans ce cas.

• Génération de matrices

◦ x = rand(5) ​: génération d'une matrice 5x5 de nombres aléatoires (valeurs entre 0 et 1)


Cas général, pour une matrice row * col ​: mat = rand(row, col)

◦ Matrices de 1 ou de 0 : ones(row, col) ​et zeros(row, col)

◦ Taille : size(x) ​. Longueur : length(x) ​. Créer une matrice aléatoire d'une même taille qu'une
existante : rand(size(x))


x = rand(1, 10); % mat. 1x10 (liste de 10 éléments)
[h, w] = size(x); % size() renvoie deux valeurs, donc pour en avoir une précise il
faut un vecteur

◦ Concaténation de matrices

▪ Avec c ​une matrice 4x4 générée par c = rand(4) ​, et eye ​la matrice identité

• Indexage

◦ On commence à compter à partir de 1 (contrairement à la plupart des langages de programmation).

◦ Chercher un élément : mat(x, y) ​.

1/6
◦ Slicing : vec(2:4) ​. Exemple d'opération avancée sur le slicing :

▪ Supposons qu'on veuille calculer des sommes partielles, c'est à dire un ensemble de sommes en
excluant chaque élément tour à tour. Par exemple, pour l'ensemble {2, 3, 4}, on calculerait 2 ∗
3, 2 ∗ 4, 3 ∗ 4.

% version "naïve", sans réel slicing
x = rand(1, 10);
[h, w] = size(x);
Pk = zeros(h, w);
for i = 1:w
Pk(i) = sum(x(1:i-1)) + sum(x(i+1:end));
end

Pk

%version avec slicing


X = [2, 3, 4, 5];
n = length(X);
P = zeros(1, n); % Initialisation d'un vecteur de résultats

for k = 1:n
P(k) = prod(X([1:k-1, k+1:end])); % Produit sans X(k)
end

disp(P);

◦ Prendre le dernier élément : vec(end) ​. Prendre le plus grand : max(x) ​.

▪ Prendre le plus grand et son index correspondant : [vMax,ivMax] = max(v2)

◦ Aller chercher toute une ligne : mat(1, :) ​, le : ​signifie "tout" quand il est écrit seul.

◦ Si on utilise un seul indice pour accéder à un élément dans une matrice, MATLAB va parcourir chaque
colonne, et quand il a fini une colonne il passe à la ligne suivante.
A = [5 6; 7 8]
A(3) -> 6.
Extraire plusieurs indices : vect([1 3 6]) ​( [1 3 6] ​en tant qu'index)

• Opérations sur les arrays

◦ x = [1 2 3];
y = x + 2;
y = 3 4 5

◦ Note : deux arrays peuvent être additionnés s'il font la même taille.

◦ Arrondir à l'entier : x = round(y)

◦ Multiplication de matrices : z = [3 4] * [10 20] -> Error using * ​(car on ne peut multiplier
que des matrices de taille n * p ​et p * n ​).

2/6
◦ Produit cartésien (dot product) : z = [3 4] .* [10 20]

▪ x = [1 2; 3 4; 5 6; 7 8].*[1;2;3;4] ​-> chaque ligne de la première matrice est multipliée.

▪ En général, pour faire des opérations élément par élément, on utilise le . ​avant l'opérande.

◦ Pour trouver le nombre de colonnes et de lignes d'une matrice, plutôt que de faire :


dr = size(data(:, 1))
dr = dr(1)
dc = size(data(1, :))
dc = dc(2)

▪ On peut simplement faire : [dr,dc] = size(data)

◦ Ignorer un output : ~ ​(par exemple : [~,xcol] = size(x) ​renvoie juste le nombre de colonnes de
x ​)

◦ Pas hésiter à voir la documentation, ici randi​par exemple

• Plotting : afficher des graphiques

◦ Forme générale : plot(v1, v2, *args) ​, avec args ​des arguments pour styliser le graphique.

◦ Par exemple : plot(sample, v1, "r-o", LineWidth=4) ​.


r-o ​veut dire "couleur rouge - ligne continue ( - ​), points à chaque donnée ( o ​).

▪ Pour des lignes en pointillés, on utilisera -- ​, pour des étoiles à la place des points, on utilisera *
...
Les possibilités ne manquent pas, c.f la documentation.

▪ Si on plot un seul graphique ( plot(v1) ​), les valeurs de 1 à sa longueur seront sur l'axe x.

▪ hold on ​affichera tous les plots suivants sur les axes déjà présents, hold off ​arrête cet effet.

◦ Annotations de plot

3/6

title("Sample Mass")
ylabel("Mass (g)")
legend("Exp A", "Exp B")

bar(data(3,:))
title("Sample " + sample(3) + " Data")

▪ Les deux dernières lignes donnent :

• Conditions et booléens

◦ 1 = True ​, 0 = False ​. L'équivalent de != ​est ~= ​.

◦ AND et OR sont & ​et | ​.


[5 10 15] > 12
ans = 0 0 1


v = v1(v1 > 6) % extraire les éléments d'un array qui respectent une condition donnée
v =
6.6678
9.0698
% note : pas forcément nécessaire que l'array "dans la condition" soit le même que
l'array modifié


x(x==999) = 1 % remplace tous les 999 dans x par des 1
x = v1(v1>6 | v1<2) % trouver des valeurs plus grandes que 6 ou plus petites que 2

◦ if - elseif - else - end

4/6

▪ Rien à rajouter, si ce n'est que ça ressemble à la syntaxe usuelle en Python et qu'on peut
évidemment utiliser les AND et OR vus un peu plus tôt.

• Boucles for (les while suivent exactement la même logique)


hold on

for idx = 1:10


plot(idx,density(idx),"*")
drawnow
end

hold off

• Fonctions

◦ Supposons qu'on veuille écrire une fonction pour faire des opérations de base sur des matrices. On
aurait ceci :


function ex5(A, B)
disp(’Somme :’);
C = A+B;
disp(C);
disp(’Différence :’);
A-B
disp(’Produit :’);

5/6
A*B
end

◦ Cette fonction ne renvoie rien. Comment renvoyer des choses alors ?


function sol = second_degre(a, b, c)
% sol agira comme une "valeur de retour"
delta = b^2 - 4 * a * c;

if delta < 0
disp("Delta négatif, pas de solution réelle");
sol = [];
else
rac1 = (-b + sqrt(delta)) / (2 * a);
rac2 = (-b - sqrt(delta)) / (2 * a);
sol = [rac1, rac2];
end
end

%appeler la fonction : truc = second_degre(1, 2, 3)

% Exemple d'application sur plusieurs triplets


coeffs = [1, -3, 2; 1, -2, 1; 2, 4, 1]; % Matrice de coefficients (a, b, c)
solutions = [];

for i = 1:size(coeffs, 1)
a = coeffs(i, 1);
b = coeffs(i, 2);
c = coeffs(i, 3);
sol = second_degre(a, b, c);
solutions = [solutions; sol]; % Stocke les résultats dans une matrice
end

disp(solutions)

6/6

Vous aimerez peut-être aussi