Kitabı oku: «Modelamiento y simulación de sistemas con Simulink», sayfa 3
1.5.8 Representación de una matriz
La forma usual de representar una matriz, en este caso una matriz de orden 4 × 4, se muestra en la expresión 1.9:

siendo la convención básica para crear la matriz X de orden 4 x 4 en Matlab, como se indica en la expresión 1.10:

Como se aprecia en la expresión 1.10, la notación punto y coma (;) se utiliza para indicar el final de cada fila de la matriz (a excepción de la última fila); y se debe tener en cuenta que cada fila debe tener el mismo número de columnas. También hay la opción de crear la matriz fila por fila, como se muestra en la expresión 1.11:

Otra forma de construir la matriz de la expresión 1.9 constaría en crear cuatro vectores fila separados, conteniendo cada uno la misma cantidad de columnas, para luego concatenarlos entre sí verticalmente, como se indica en las expresiones 1.12a, 1.12b, 1.12c, 1,12d y 1.12e.

A continuación se presenta una serie de ejemplos demostrativos de cómo construir una matriz designada por la letra A y de orden 4 x 5:

1 clc; % <enter > Limpieza de la ventana de comandos
2 clear all; % <enter > Limpieza del espacio de trabajo
3 A = [11 12 13 14 15; 21 22 23 24 25; 31 32 33 34 35; 41 42 43 44 45] % <enter > Primera forma de creación de una matriz
4 A = [11:15; 21:25; 31:35; 41:45] % <enter > Segunda forma
5 A = [11 12 13 14 15; ... % <enter > Tercera forma - primer línea
6 21 22 23 24 25; ... % <enter > Tercera forma - segunda línea
7 31 32 33 34 35; ... % <enter > Tercera forma - tercera línea
8 41 42 43 44 45] % <enter > Tercera forma - cuarta línea
9 A = [11 12 13 14 15 % <enter > Cuarta forma - primera línea
10 21 22 23 24 25 % <enter > Cuarta forma - segunda línea
11 31 32 33 34 35 % <enter > Cuarta forma - tercera línea
12 41 42 43 44 45] % <enter > Cuarta forma - cuarta línea
13 v1 = [11 12 13 14 15]; % <enter > Quinta forma - primera línea
14 v2 = [21 22 23 24 25]; % <enter > Quinta forma - segunda línea
15 v3 = [31 32 33 34 35]; % <enter > Quinta forma - tercera línea
16 v4 = [41 42 43 44 45]; % <enter > Quinta forma - cuarta línea
17 A = [ v1; v2; v3; v4] % <enter > Quinta forma - concatenación - resultado
1.5.9 Ejemplo. Construcción de una matriz con base en submatrices
Se requiere construir la matriz X (9 x 12), en la cual se aprecia que las disposiciones de sus elementos poseen cierta particularidad repetitiva, haciendo posible el uso de submatrices para su construcción sin la necesidad de que el ingreso de datos sea elemento por elemento.

Solución. De la siguiente manera se construye la matriz X:
1 clc; % <enter > Limpieza de la ventana de comandos
2 clear all; % <enter > Limpieza del espacio de trabajo
3 a = [1 1 1; 0 1 0; 1 1 1] % <enter > Matriz a
4 X = [a 2*a 3*a 4*a; 5*a 6*a 7*a 8*a; 9*a 10*a 11*a 12*a] % <enter > Cálculo
1.5.10 Función ones y zeros
Se utiliza la función ones para crear una matriz en la cual todos los elementos tengan el valor unitario; ejemplo:
1 clc; % <enter > Limpieza de la ventana de comandos
2 clear all; % <enter > Limpieza del espacio de trabajo
3 on = ones (2 ,5) % <enter > Creación de una matriz de unos
4 on = ones (5 ,5) % <enter > Creación de una matriz de unos
5 on = ones (5) % <enter > Creación de una matriz de unos
6 on = ones (1 ,5) % <enter > Creación de un vector fila de unos
De manera similar, se utiliza la función zeros para crear una matriz en la cual todos los elementos sean iguales a cero; ejemplo:
1 clc; % <enter > Limpieza de la ventana de comandos
2 clear all; % <enter > Limpieza del espacio de trabajo
3 zer = zeros (3 ,2) % <enter > Creación de una matriz de ceros
4 zer = zeros (3 ,3) % <enter > Creación de una matriz de ceros
5 zer = zeros (3) % <enter > Creación de una matriz de ceros
6 zer = zeros (3 ,1) % <enter > Creación de un vector columna de ceros
1.5.11 Ejemplo. Extracción de elementos de una matriz
A continuación, se muestra la construcción de una matriz A (3 x 6) con las funciones vistas anteriormente linspace y ones, y como extraer algunos de sus elementos:

Solución. De la siguiente manera se construye la matriz X:
1 clc; % <enter > Limpieza de la ventana de comandos
2 clear all; % <enter > Limpieza del espacio de trabajo
3 A = [3:2:13; linspace (20 ,21 ,6); ones (1 ,6)] % <enter > Matriz A
4 A(3 ,4) % <enter > Elemento de la fila 3 y columna 4.
5 A(: ,2) % <enter > Elementos de todas las filas y columna 2.
6 A(2 ,:) % <enter > Elementos de la fila 2 y todas las columnas.
7 A (1:3 ,3:5) % <enter > Elementos de las filas 1 a 3 y columnas 3 a 5.
8 A (: ,1:2:5) % <enter > Elementos de las filas 1 a 3 y columnas 1, 3 y 5.
9 A(: ,:) % <enter > Elementos de todas las filas y todas las columnas.
1.5.12 Ejemplo. Reordenamiento de submatrices de una matriz
Se precisa, mediante un ejemplo, la forma de reordenar submatrices pertenecientes a una misma matriz. La matriz designada en X1 (9 x 9) contiene cuatro submatrices con valores diferentes a cero;

dichas submatrices se reordenarán con la finalidad de obtener la matriz X2.

Solución. La secuencia para obtener el reordenamiento de las submatrices que generarán la matriz X2 es la siguiente:
1 clc; % <enter > Limpieza de la ventana de comandos
2 clear all; % <enter > Limpieza del espacio de trabajo
3 X1 =[1:3 zeros (1 ,3) 7:9; 10:12 zeros (1 ,3) 16:18; 19:21 zeros (1 ,3) 25:27; zeros (1 ,9); zeros (1 ,9); zeros (1 ,9); 55:57 zeros (1 ,3) 61:63; 64:66 zeros (1 ,3) 70:72; 73:75 zeros (1 ,3) 79:81] % <enter > Matriz X1
4 Temp1 =X1 (1:3 , 1:3) % <enter > Almacenamiento temporal
5 X1 (1:3 , 1:3) =X1 (7:9 , 7:9) % <enter > Reemplazo
6 X1 (7:9 , 7:9) = Temp1 % <enter > Reemplazo
7 Temp2 =X1 (1:3 , 7:9) % <enter > Almacenamiento temporal
8 X1 (1:3 , 7:9) =X1 (7:9 , 1:3) % <enter > Reemplazo
9 X1 (7:9 , 1:3) = Temp2 % <enter > Reemplazo
10 X2=X1 % <enter > Muestreo de la matriz X2
1.5.13 Función diag
La función diag sirve para crear una matriz diagonal, en la cual solo los elementos que pertenecen a la diagonal principal tienen valores diferentes de cero. En el siguiente ejemplo se presenta una matriz diagonal A (3 x 3), en la cual sus elementos diagonales son a11 = 8, a22 = 9 y a33 = 16:
1 clc; % <enter > Limpieza de la ventana de comandos
2 clear all; % <enter > Limpieza del espacio de trabajo
3 a = [8 9 16] % <enter > Creación del vector a
4 A = diag (a) % <enter > Cálculo mediante la función diag
5 A = diag ([8 9 16]) % <enter > Cálculo mediante la función diag
Si fuese el caso que se desea obtener los valores de los elementos de la diagonal principal de una matriz de orden n x n, también se utiliza la función diag; como se indica en el siguiente ejemplo:
1 clc; % <enter > Limpieza de la ventana de comandos
2 clear all; % <enter > Limpieza del espacio de trabajo
3 A = [11 12 13 14; 21 22 23 24; 31 32 33 34; 41 42 43 44] % <enter > Matriz
4 B = diag (A) % <enter > Uso de la función diag
5 B = diag (A (1:2 ,1:2) ) % <enter > Uso de la función diag
También se puede obtener una matriz diagonal con respecto a una matriz cualquiera de orden n x n; ejemplo:
1 clc; % <enter > Limpieza de la ventana de comandos
2 clear all; % <enter > Limpieza del espacio de trabajo
3 A = [11 12 13 14; 21 22 23 24; 31 32 33 34; 41 42 43 44]; % <enter > Matriz
4 Adiag = diag ( diag (A)) % <enter >
1.5.14 Función eye
En el caso de requerir una matriz identidad, se debe utilizar la función eye; ejemplo:
1 clc; % <enter > Limpieza de la ventana de comandos
2 clear all; % <enter > Limpieza del espacio de trabajo
3 d = eye (3 ,2) % <enter > Uso de la función eye
4 d = eye (3 ,3) % <enter > Uso de la función eye
5 d = eye (3) % <enter > Uso de la función eye
1.5.15 Función repmat
En caso de que se requiera tener un mismo valor para todas las componentes de un vector o de una matriz, se emplea la función repmat. Para una mejor comprensión de cómo se puede hacer uso de esta función, se presenta un desarrollo simbólico matricial y, posteriormente, un desarrollo demostrativo en el software.
En base al vector dado X (1 x 5), indicado en la expresión 1.13, se construye la matriz Y; cuya sintaxis para su construcción es Y = repmat (X,4,1)

el cual tiene por equivalencia una matriz de orden 4 x 5; cuya representación es mostrada en la expresión 1.14.

Una matriz Z, en base a la matriz X, considerando 4 filas y 2 columnas tendrá por formulación Z repmat (X,4,2)

También se puede considerar la traspuesta de X para construir una matriz. Sea el caso de la matriz W, cuya formulación es W = repmat (X',1,4), que cuenta con 1 fila y 4 columnas mostrada en la expresión 1.16.

A continuación, se muestra la secuencia para la construcción de un vector fila X (1 x 6) y de una matriz W (3 x 3) haciendo uso de la función repmat:
1 clc % <enter > Limpieza de la ventana de comandos
2 clear all % <enter > Limpieza del espacio de trabajo
3 X = repmat (45.72 , 1, 6) % <enter > Creación de la matriz X
4 X = [45.72 45.72 45.72 45.72 45.72 45.72] % <enter > Creación de X
5 X (1 ,1:6) =45.72 % <enter > Creación de X
6 W= repmat (45.72 , 3, 3) % <enter > Creación de W
7 W = [45.72 45.72 45.72; 45.72 45.72 45.72; 45.72 45.72 45.72] % <enter >
8 W (1:3 ,1:3) =45.72 % <enter > Creación de W
1.5.16 Función meshgrid
La función meshgrid tiene por sintaxis la expresión 1.17.

Al emplear la función meshgrid en caso de tener los vectores x (1 x 5) y y (1 x 4), indicados en las expresiones 1.18a y 1.18b,

se obtendrán las matrices X y Y, indicadas en las expresiones 1.19a y 1.19b.

El siguiente ejemplo demostrativo incluye la función meshgrid:
1 clc % <enter > Limpieza de la ventana de comandos
2 clear all % <enter > Limpieza del espacio de trabajo
3 x = [1 ,2 ,3 ,4 ,6] % <enter > Creación del vector x
4 y = [5 ,6 ,7 ,8] % <enter > Creación del vector y
5 [X,Y] = meshgrid (x,y) % <enter > Uso de la función meshgrid
6 [Y,X] = meshgrid (y,x) % <enter > Uso de la función meshgrid
1.5.17 Funciones fliplr y flipud
Entre otras funciones que intervienen en la manipulación de matrices, se encuentran las funciones fliplr y flipud. La función fliplr invierte las columnas de una matriz horizontalmente y la función flipud, similar a fliplr, invierte las filas de una matriz verticalmente; las sintaxis de estas funciones son:

Al aplicar ambas funciones en el desarrollo simbólico de una matriz X de orden 3 x 6 (expresión 1.21), se consigue por resultado las expresiones 1.22a y 1.22b.

Luego:

En el siguiente ejemplo explícito se muestra más en detalle el resultado de la aplicación de dichas funciones:
1 clc % <enter > Limpieza de la ventana de comandos
2 clear all % <enter > Limpieza del espacio de trabajo
3 X = [1 2 3 4 5; 11 12 13 14 15] % <enter > Creación de la matriz X
4 X1 = fliplr (X) % <enter > Uso de la función fliplr
5 X2 = flipud (X) % <enter > Uso de la función flipud
6 X3 = flipud ( fliplr (X)) % <enter > Uso de las funciones fliplr y flipud
1.5.18 Suma, resta y concatenación de matrices
Realizar procesos sencillos, pero no menos importantes, comprenden la suma, resta y concatenación entre matrices. Para dos matrices arbitrarias X (3 x 5) y Y (3 x 5), indicadas en las expresiones 1.23a y 1.23b,

se genera una matriz resultante C (expresión 1.24) de la adición y sustracción entre estas, declarando C = X±Y ya que ambas poseen un mismo número de filas y columnas.

Para obtener una concatenación horizontal de matrices se declara C [X, Y]o C = X Y], obteniendo por resultado la expresión 1.25. Para esto, las matrices X y Y deben tener el mismo número de filas; aunque no necesariamente el mismo número de columnas.

Similarmente, para obtener una concatenación vertical de matrices se declara C =[X, Y], obteniendo por resultado la expresión 1.26. Para esto, las matrices X y Y deben tener el mismo número de columnas; aunque no necesariamente el mismo número de filas.

A continuación, se presenta un ejemplo que incluye la suma, resta y concatenación de matrices:
1 clc % <enter > Limpieza de la ventana de comandos
2 clear all % <enter > Limpieza del espacio de trabajo
3 X = [1 2 3 4 5; 6 7 8 9 10] % <enter > Creación de la matriz X
4 Y = [11 12 13 14 15; 16 17 18 19 20] % <enter > Creación de la matriz Y
5 C1 = X+Y % <enter > Operación de suma de matrices
6 C2 = X-Y % <enter > Operación de resta de matrices
7 C3 = [X Y] % <enter > Operación de Concatenación horizontal
8 C4 = [X; Y] % <enter > Operación de Concatenación vertical
9 C5 = [X Y X] % <enter > Operación de Concatenación horizontal
10 C6 = [X; Y; X] % <enter > Operación de Concatenación vertical
1.5.19 Operador punto
El operador punto (.) permite realizar operaciones elemento por elemento en matrices del mismo orden. El desarrollo simbólico de la multiplicación, división y potenciación entre los elementos de las matrices X (4 x 4) y Y (4 x 4), dadas en las expresiones 1.27a y 1.27b,

se presenta en las matrices resultantes indicadas en las expresiones 1.28a, 1.28b y 1.28c.

Un ejemplo explícito usando el operador punto, se muestra a continuación:
1 clc % <enter > Limpieza de la ventana de comandos
2 clear all % <enter > Limpieza del espacio de trabajo
3 X = [1 2 3 4; 5 6 7 8] % <enter > Creación de la matriz X
4 M = [2 2 2 2; 3 3 3 3] % <enter > Creación de la matriz M
5 C1 = X.*M % <enter > Notación punto para multiplicación
6 C2 = X./M % <enter > Notación punto para división
7 C3 = X.^M % <enter > Notación punto para potenciación
8 C4 = X.*X % <enter > Notación punto para multiplicación
9 C5 = X./X % <enter > Notación punto para división
10 C6 = X.^X % <enter > Notación punto para potenciación
1.5.20 Determinante de una matriz
La representación común del determinante de una matriz A (n x n) es como se indica en la expresión 1.29;

cuya función de cálculo det, tiene por sintaxis:

A continuación se presenta un ejemplo práctico, en el cual se halla el determinante de una matriz:
1 clc % <enter > Limpieza de la ventana de comandos
2 clear all % <enter > Limpieza del espacio de trabajo
3 A = [1 3 7 8; 4 2 1 3; 6 2 8 9; 1 3 4 7] % <enter > Matriz A
4 d1 = det(A) % <enter > Determinante de la matriz A
5 syms a b c d % <enter > Declaración de variables
6 M = [a b; c d]; % <enter > matriz M
7 det(M); % <enter > Determinante de M
8 A = sym ([2/3 1/3; 1 1]); % <enter > Matriz A
9 det(A); % <enter > Determinante de A
1.5.21 Inversa de una matriz
Para hallar la inversa de una matriz se utiliza la función inv, la cual tiene por sintaxis:

A continuación se presenta un ejemplo demostrativo en el cual se usa la función inv:
1 clc % <enter > Limpieza de la ventana de comandos
2 clear all % <enter > Limpieza del espacio de trabajo
3 M = magic (3) % <enter > Creación de la matriz M
4 M1 = inv(M) % <enter > Inversa de la matriz M
5 M2 = inv(M)*M % <enter > Comprobación de propiedad
6 M3 = M*inv(M) % <enter > Comprobación de propiedad
7 C = [1 2 3; 6 9 13; 6 12 18] % <enter > Creación de la matriz C
8 C1 = inv(C)*C % <enter > Comprobación de propiedad
9 C2 = C*inv(C) % <enter > Comprobación de propiedad
1.5.22 Arreglos multidimensionales
En programación es de gran utilidad almacenar los datos en arreglos multidimensionales. Matlab utiliza paginas adicionales para representar datos a partir de la tercera dimensión; valga mencionar que un arreglo multidimensional es aquel que cuenta con más de 2 subíndices. En el siguiente ejemplo se presentan arreglos tridimensionales:
1 clc % <enter > Limpieza de la ventana de comandos
2 clear all % <enter > Limpieza del espacio de trabajo
3 x = [1 2 3; 4 5 6; 7 8 9] % <enter > Creación de la matriz x
4 y = 10*x % <enter > Creación de la matriz y
5 z = 10*y % <enter > Creación de la matriz z
6 w = 10*z % <enter > Creación de la matriz w
7 matrix3D (: ,: ,1) = x % <enter > Asignación de x a matrix3D
8 matrix3D (: ,: ,2) = y % <enter > Asignación de y a matrix3D
9 matrix3D (: ,: ,3) = z % <enter > Asignación de z a matrix3D
10 matrix3D (: ,: ,4) = w % <enter > Asignación de w a matrix3D
11 matrix3D % <enter > Muestreo de la matriz matrix3D
12 A = [5 7 8; 0 1 9; 4 3 6]; % <enter > Primera página
13 A(: ,: ,2) = [1 0 4; 3 5 6; 9 8 7]; % <enter > Segunda página
En la figura 1.5 se aprecia el orden que tienen los arreglos multidimensionales; repartidos en el siguiente orden, respectivamente: filas, columnas y páginas.
Figura 1.5. Representación de arreglo multidimensional
Se pueden generar arreglos multidimensionales llamando algunas funciones como: zeros, ones, rand o eye, con más de dos argumentos; como se muestra a continuación:
1 clc % <enter > Limpieza de la ventana de comandos
2 clear all % <enter > Limpieza del espacio de trabajo
3 mat1 = zeros (3 ,3 ,5) % <enter > Creación de matrices de ceros
4 mat2 = zeros (3 ,4 ,5) % <enter > Creación de matrices de ceros
5 mat3 = ones (2 ,2 ,4) % <enter > Creación de matrices de unos
6 mat4 = rand (5 ,5 ,3) % <enter > Creación de matrices aleatorias
7 mat5 = eye (5 ,5 ,3) % <enter > Creación de matrices identidades
1.6 ENTRADAS Y SALIDAS CONTROLADAS POR EL USUARIO
Es posible generar un mecanismo interactivo, al momento de ejecutar un programa, mediante la función input para el ingreso de datos y mediante las funciones disp y fprintf para la obtención de resultados.
1.6.1 Entradas definidas por el usuario
Al hacer uso de la función input se genera un mensaje personalizado en la ventana de comandos, el cual estará a la espera de un ingreso solicitado al usuario; ejemplos:
1 clc % <enter > Limpieza de la ventana de comandos
2 clear all % <enter > Limpieza del espacio de trabajo
3 z1= input ( ' Ingrese un valor positivo : ' ) % <enter > Ingreso
4 z2 = input ( ' Ingrese un valor negativo : ' ) % <enter > Ingreso
5 a = input ( ' Ingrese una matriz : ' ) % <enter > Ingreso
6 b = input ( ' Ingrese una matriz tridimensional : ' ) % <enter > Ingreso
7 c = input ( ' Ingrese la opción (1) o la opción (2): ' ) % <enter > Ingreso
8 x = input ( ' Ingrese su nombre en apóstrofes : ' ) % <enter > Ingreso
9 y = input ( ' Ingrese su nombre : ' , ' s ' ) % <enter > Ingreso
10 [x,y] = ginput (4) % <enter > Uso de la función ginput
11 plot (1:10) % <enter > Uso de la función plot
12 gtext ( ' Mi gráfico ' , ' Color ' , ' red ' , ' FontSize ' ,14) % <enter > gtext
13 plot (1:10) % <enter > Uso de la función plot
14 gtext ({ ' Mi ' ; ' gráfico ' }) % <enter > gtext