Salta el contingut
clear all; 

Manipulació bàsica de matrius

En aquest tutorial explicarem alguns dels conceptes bàsics per treballar amb matrius a MATLAB.

Activeu "Output inline" a la dreta de la barra de desplaçament.

image_0.png

Crear una matriu

  • Crea una estructura de matriu utilitzant claudàtors \(begin:math:display\) \(end:math:display\)
  • Separa les columnes amb un espai o una coma ,
  • Separa les files amb un punt i coma ;
    syms m11 m12 m13 m21 m22 m23 m31 m32 m33 real
    M = [m11, m12, m13 ; %row separated by semicolon
         m21, m22, m23 ; %column separated by comma
         m31  m32  m33] %column separated by space
    
    M =

$$ \displaystyle \left(\begin{array}{ccc} m_{11} & m_{12} & m_{13} \newline m_{21} & m_{22} & m_{23} \newline m_{31} & m_{32} & m_{33} \end{array}\right) $$

La funció eye() et permet crear una matriu identitat:

IdentityMatrix = eye(3)
IdentityMatrix = 3x3
     1     0     0
     0     1     0
     0     0     1

Per crear una matriu de zeros o uns, pots utilitzar les funcions següents. Pots definir les dimensions com (fila,columna):

OneMatrix = ones(2,4)
OneMatrix = 2x4
     1     1     1     1
     1     1     1     1
ZeroMatrix = zeros(2,2)
ZeroMatrix = 2x2
     0     0
     0     0

Transposar una matriu

Transposa una matriu afegint-hi un apòstrof '

M_transposed = M'
M_transposed =

$$ \displaystyle \left(\begin{array}{ccc} m_{11} & m_{21} & m_{31} \newline m_{12} & m_{22} & m_{32} \newline m_{13} & m_{23} & m_{33} \end{array}\right) $$

Això també es pot utilitzar per transformar un vector fila en un vector columna. Es pot fer amb una variable o amb l’array mateix.

syms v1 v2 v3 real
V_column = [v1, v2, v3]
V_column =

$$ \displaystyle \left(\begin{array}{ccc} v_1 & v_2 & v_3 \end{array}\right) $$

V_row = [v1, v2, v3]'
V_row =

$$ \displaystyle \left(\begin{array}{c} v_1 \newline v_2 \newline v_3 \end{array}\right) $$

V_row_2 = V_column'
V_row_2 =

$$ \displaystyle \left(\begin{array}{c} v_1 \newline v_2 \newline v_3 \end{array}\right) $$

Invertir una matriu

Per invertir una matriu tenim diverses opcions, com ara:

Sample_Matrix = [1, 2, 3;
                 4, 5, 6;
                 6, 2, 10]
Sample_Matrix = 3x3
     1     2     3
     4     5     6
     6     2    10
Sample_Matrix_inv_1 = inv(Sample_Matrix)
Sample_Matrix_inv_1 = 3x3
   -1.0556    0.3889    0.0833
    0.1111    0.2222   -0.1667
    0.6111   -0.2778    0.0833
Sample_Matrix_inv_2 = Sample_Matrix^-1 
Sample_Matrix_inv_2 = 3x3
   -1.0556    0.3889    0.0833
    0.1111    0.2222   -0.1667
    0.6111   -0.2778    0.0833
Sample_Matrix_inv_3 = eye(3)/Sample_Matrix
Sample_Matrix_inv_3 = 3x3
   -1.0556    0.3889    0.0833
    0.1111    0.2222   -0.1667
    0.6111   -0.2778    0.0833

Invertir una matriu no quadrada

Per invertir una matriu no quadrada pots utilitzar la pseudoinversa:

$$ A^{\dagger} ={\left(A^T \cdot A\right)}^{-1} \cdot A^T $$

Sample_Matrix_non_square = Sample_Matrix(1:3,1:2)

Sample_Matrix_non_square = 3x2
     1     2
     4     5
     6     2
Sample_Matrix_non_square_inverse_1 = inv(Sample_Matrix_non_square' * Sample_Matrix_non_square) * Sample_Matrix_non_square'
Sample_Matrix_non_square_inverse_1 = 2x3
   -0.0590   -0.0641    0.2192
    0.1214    0.2175   -0.1653
Sample_Matrix_non_square_inverse_2 = pinv(Sample_Matrix_non_square)
Sample_Matrix_non_square_inverse_2 = 2x3
   -0.0590   -0.0641    0.2192
    0.1214    0.2175   -0.1653

Accedir als elements d’una matriu

Per accedir a un element específic d’una matriu, pots incloure (fila,columna) com a extensió de la variable:

M(1,1)
ans = $\displaystyle m_{11} $

També pots accedir a seccions de la matriu si defineixes una regió com (fila_inicial : fila_final, columna_inicial : columna_final)

M(1:2,1:2)
ans =

$$ \displaystyle \left(\begin{array}{cc} m_{11} & m_{12} \newline m_{21} & m_{22} \end{array}\right) $$

Amb aquesta notació també podem escriure en elements específics de la matriu i sobreescriure’ls:

M(1:3, 3)=V_row
M =

$$ \displaystyle \left(\begin{array}{ccc} m_{11} & m_{12} & v_1 \newline m_{21} & m_{22} & v_2 \newline m_{31} & m_{32} & v_3 \end{array}\right) $$

M(1:2,1:2)=eye(2)
M =

$$ \displaystyle \left(\begin{array}{ccc} 1 & 0 & v_1 \newline 0 & 1 & v_2 \newline m_{31} & m_{32} & v_3 \end{array}\right) $$

Combinar matrius

Per combinar dues matrius 2D en una sola matriu, podem utilitzar la funció cat(Dimensió, Matriu_1, ..., Matriu_n):

Matrix_1 = ones(3)
Matrix_1 = 3x3
     1     1     1
     1     1     1
     1     1     1
Matrix_2 = ones(3) * 2
Matrix_2 = 3x3
     2     2     2
     2     2     2
     2     2     2
Matrix_combined_1 = cat(1, Matrix_1, Matrix_2)
Matrix_combined_1 = 6x3
     1     1     1
     1     1     1
     1     1     1
     2     2     2
     2     2     2
     2     2     2
Matrix_combined_2 = cat(2, Matrix_1, Matrix_2)
Matrix_combined_2 = 3x6
     1     1     1     2     2     2
     1     1     1     2     2     2
     1     1     1     2     2     2
Matrix_combined_3 = cat(3, Matrix_1, Matrix_2)
Matrix_combined_3 = 
Matrix_combined_3(:,:,1) =

     1     1     1
     1     1     1
     1     1     1

Matrix_combined_3(:,:,2) =

     2     2     2
     2     2     2
     2     2     2
Matrix_3 = ones(3) * 3;
Matrix_combined_4 = cat(3, Matrix_1, Matrix_2, Matrix_3)
Matrix_combined_4 = 
Matrix_combined_4(:,:,1) =

     1     1     1
     1     1     1
     1     1     1

Matrix_combined_4(:,:,2) =

     2     2     2
     2     2     2
     2     2     2

Matrix_combined_4(:,:,3) =

     3     3     3
     3     3     3
     3     3     3

Operacions matemàtiques amb matrius

Per sumar dues matrius de la mateixa mida:

Matrix_4 = [1, 2, 3;
            1, 2, 3;
            1, 2, 3]
Matrix_4 = 3x3
     1     2     3
     1     2     3
     1     2     3
Matrix_added = Matrix_1 + Matrix_4
Matrix_added = 3x3
     2     3     4
     2     3     4
     2     3     4

Per restar matrius de la mateixa mida:

Matrix_subtracted = Matrix_4 - Matrix_1
Matrix_subtracted = 3x3
     0     1     2
     0     1     2
     0     1     2

Per multiplicar dues matrius:

Matrix_multiply =  Matrix_2 * Matrix_4
Matrix_multiply = 3x3
     6    12    18
     6    12    18
     6    12    18

Per tenir operacions element a element com

$$ \left\lbrack \begin{array}{cc} \textrm{m11} & \textrm{m12}\newline \textrm{m21} & \textrm{m22} \end{array}\right\rbrack =\left\lbrack \begin{array}{cc} \textrm{a11}\cdot \;\textrm{b11} & \textrm{a12}\cdot \textrm{b12}\newline \textrm{a21}\cdot \textrm{b21} & \textrm{a22}\cdot \textrm{b22} \end{array}\right\rbrack =\left\lbrack \begin{array}{cc} \textrm{a11} & \textrm{a12}\newline \textrm{a21} & \textrm{a22} \end{array}\right\rbrack \ldotp \times \left\lbrack \begin{array}{cc} \textrm{b11} & \textrm{b12}\newline \textrm{b21} & \textrm{b22} \end{array}\right\rbrack $$

podem afegir un . davant de l’operador:

Matrix_element_multiply =  Matrix_2 .* Matrix_4
Matrix_element_multiply = 3x3
     2     4     6
     2     4     6
     2     4     6
Matrix_element_devision = Matrix_4 ./ Matrix_2
Matrix_element_devision = 3x3
    0.5000    1.0000    1.5000
    0.5000    1.0000    1.5000
    0.5000    1.0000    1.5000
Matrix_element_squared = Matrix_4.^2
Matrix_element_squared = 3x3
     1     4     9
     1     4     9
     1     4     9

Altres funcions útils

Dimensions

Per obtenir les dimensions d’una matriu pots utilitzar la funció size():

[rows, columns, dimensions] = size(Matrix_combined_4)
rows = 3
columns = 3
dimensions = 3

si només t’interessen algunes de les dimensions:

[rows, ~, ~] = size(Matrix_4)
rows = 3

Suma d’elements d’una matriu

Pots sumar els elements de les columnes d’una matriu utilitzant la funció sum():

Matrix_column_sum = sum(Matrix_4)
Matrix_column_sum = 1x3
     3     6     9

pots sumar tots els elements d’una matriu entre ells donant l’input opcional "all":

Matrix_total_sum = sum(Matrix_4,"all")
Matrix_total_sum = 18

Màxim/Mínim

Pots extreure el valor màxim o mínim de cada columna utilitzant la funció max() o min()

Max_column = max(Matrix_4)
Max_column = 1x3
     1     2     3
Min_column = min(Matrix_4);

Per obtenir el màxim o el mínim de tota la matriu, pots donar l’input opcional \(begin:math:display\)\(end:math:display\) i "all"

MaxAll = max(Matrix_4, [], "all")
MaxAll = 3
MinAll = min(Matrix_4, [], "all")
MinAll = 1

Rang

Utilitzant la funció rank() pots extreure el rang de la teva matriu, que es defineix com el nombre de columnes (o files) linealment independents en aquella matriu. El rang proporciona informació sobre la dimensionalitat de l’espai de columnes de la matriu.

Per a una matriu identitat, el rang és el mateix que el nombre de files/columnes. La matriu identitat és de "rang complet".

IdentityRank = rank(eye(4))
IdentityRank = 4

Tanmateix, per a la Matriu 4, que conté la mateixa fila diverses vegades, el rang és només 1.

MatrixRank = rank(Matrix_4)
MatrixRank = 1