0% encontró este documento útil (0 votos)
16 vistas23 páginas

A Punt Es Intro Ducci On Mat Lab

Este documento explica la manipulación básica de matrices en MATLAB, incluyendo la definición de variables y matrices, operaciones con matrices como sumas y multiplicaciones, y funciones para crear y acceder a elementos de matrices.

Cargado por

Alberto1601
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
16 vistas23 páginas

A Punt Es Intro Ducci On Mat Lab

Este documento explica la manipulación básica de matrices en MATLAB, incluyendo la definición de variables y matrices, operaciones con matrices como sumas y multiplicaciones, y funciones para crear y acceder a elementos de matrices.

Cargado por

Alberto1601
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 23

Informática: Notas de Clase

TÍTULOS DE GRADO EN INGENIERÍA INDUSTRIAL

ETSII - UCLM |30/09/2014

1.0
INFORMÁTICA: NOTAS DE CLASE
MANIPULACIÓN BÁSICA DE MATRICES EN MATLAB

TABLA DE CONTENIDO
1 Manipulación básica de matrices en MATLAB ............................................................................................................................... 1.1
1.1 Definición de variables.................................................................................................................................................................. 1.1
1.2 Definición de matrices................................................................................................................................................................... 1.2
1.2.1 Operador dos puntos (:) ........................................................................................................................................................ 1.2
1.3 Operaciones con matrices............................................................................................................................................................ 1.3
1.3.1 Operaciones matriciales básicas ......................................................................................................................................... 1.3
1.3.2 Operaciones mixtas ................................................................................................................................................................... 1.4
1.3.3 Operaciones escalares con matrices .................................................................................................................................. 1.4
1.3.4 División inversa .......................................................................................................................................................................... 1.5
1.3.5 Operadores relacionales y lógicos ...................................................................................................................................... 1.6
1.4 Direccionamiento de matrices ................................................................................................................................................... 1.8
1.4.2 Resumen del direccionamiento de matrices ............................................................................................................... 1.10
1.4.3 Matrices vacías ......................................................................................................................................................................... 1.10
1.4.4 Concatenación de matrices por cajas ............................................................................................................................. 1.10
1.4.5 Matrices multidimensionales ............................................................................................................................................ 1.11
1.5 Algunas funciones básicas ........................................................................................................................................................ 1.11
1.5.1 Creación de matrices ............................................................................................................................................................. 1.11
1.5.2 Tamaño ........................................................................................................................................................................................ 1.12
1.5.3 Búsqueda .................................................................................................................................................................................... 1.13
1.5.4 Manejo de matrices ................................................................................................................................................................ 1.14
1.6 Ayuda de MATLAB ....................................................................................................................................................................... 1.14
1.6.1 Operadores y caracteres especiales ................................................................................................................................ 1.14
1.6.2 Funciones matemáticas básicas........................................................................................................................................ 1.15
1.6.3 Operadores aritméticos ........................................................................................................................................................ 1.17
1.6.4 Operadores relacionales y lógicos ................................................................................................................................... 1.18
1.6.5 Creación y manipulación de matrices ............................................................................................................................ 1.19

i
INFORMÁTICA: NOTAS DE CLASE
MANIPULACIÓN BÁSICA DE MATRICES EN MATLAB

1 MANIPULACIÓN BÁSICA DE MATRICES EN MATLAB


En estas notas se explica la utilización de la Ventana de Comandos de MATLAB para crear, modificar y acceder a los
elementos de una matriz, así como las operaciones básicas que se pueden realizar con ellas.

1.1 DEFINICIÓN DE VARIABLES


Las variables escalares se definen utilizando el operador de asignación = y dando un valor inicial a las mismas:
>> x = 5
x =
5
Los nombres de las variables deben cumplir las siguientes reglas:
• Deben comenzar por una letra.
• Pueden contener letras, números y el carácter de subrayado.
• Distinguen mayúsculas de minúsculas: la variable A, es distinta a la variable a.
• La longitud máxima del nombre de una variable viene dada por la constante de sistema namelengthmax.
• No pueden corresponderse con palabras clave de MATLAB como if o end. Para ver una lista de dichas
palabras se puede usar la función iskeyword.
• Para evitar crear variables con el mismo nombre que otras existentes o con el nombre de alguna función
reservada, se puede utilizar la función exist para comprobar la disponibilidad de ese identificador. Por
ejemplo, existe una función que se llama min, pero no existe una función/variable llamada
identificadordisponible:
>> exist('min')
ans =
5
>> exist('identificadordisponible')
ans =
0
Con las variables se pueden utilizar los operadores aritméticos habituales (suma +, resta -, multiplicación *,
división /, potencia ^), operadores relacionales y lógicos (comparaciones y funciones lógicas como AND y OR) y
multitud de funciones matemáticas (logaritmos, trigonométricas, exponenciales…).
>> y = 2^x
y =
32
>> z = 3*log(x)
z =
4.8283
Recordad que, puesto que MATLAB es un sistema originalmente anglosajón, para indicar números reales se utiliza
exclusivamente el punto:
>> x2 = 7.4
x2 =
7.4000
Si no se asigna el resultado de una expresión a una variable, MATLAB, automáticamente crea la variable ans, que
contiene el resultado de la última operación que no se haya asignado:
>> x^2 - y
ans =
-7
Para ver una lista de operadores y funciones básicas para trabajar con escalares (la mayor parte de ellos también
permiten su uso con matrices) podéis utilizar las siguientes instrucciones:
>> help ops
>> help elfun

1.1
MANIPULACIÓN BÁSICA DE MATRICES EN MATLAB INFORMÁTICA: NOTAS DE CLASE

1.2 DEFINICIÓN DE MATRICES


Una matriz se define igual que una variable escalar salvo porque deberemos indicar más de un elemento. Las reglas
para indicar los contenidos son las siguientes:
• Todos los contenidos de una matriz se indicarán entre corchetes.
• Los espacios y/o las comas se usan para separar elementos de una misma fila.
• Los puntos y coma y/o los saltos de línea se utilizan para pasar a la siguiente fila.
>> A = [1,2 3; 4 5,6; 7 8 9]
A =
1 2 3
4 5 6
7 8 9
>> A = [1,2,3
4,5,6
7 8 9]
A =
1 2 3
4 5 6
7 8 9
Todas las filas deben tener el mismo número de elementos. MATLAB no rellena con ceros en caso de que falte
alguno, sino que da un error:
>> A = [1 2; 3]
??? Error using ==> vertcat
CAT arguments dimensions are not consistent.

1.2.1 OPERADOR DOS PUNTOS (:)


Permite crear vectores equiespaciados sin necesidad de indicar todos los elementos de forma explícita. Se utiliza de
la siguiente forma:
inicio:incremento:fin

inicio marca el primer valor del vector, incremento indica el salto entre elementos, y fin determina cual será
el límite hasta el que incrementaremos el elemento inicial:
>> 1:2:7
ans =
1 3 5 7
En caso de no especificar el incremento se toma 1 como incremento por defecto:
>> 1:4
ans =
1 2 3 4
Tanto el incremento como los valores de inicio y fin pueden ser números reales:
>> 1:0.2:1.8
ans =
1.0000 1.2000 1.4000 1.6000 1.8000
E incluso un número negativo:
>> 5:-1:2
ans =
5 4 3 2
Si al aplicar el incremento se sobrepasa el valor final, el nuevo número calculado no se añade al vector:
>> 1:2:6
ans =
1 3 5
Podemos aplicarlo por filas para definir una matriz:
>> A = [1:5; 6:10]
A =
1 2 3 4 5
6 7 8 9 10
Si fin ya es superior a inicio, el vector que se crea está vacío:

1.2
INFORMÁTICA: NOTAS DE CLASE
MANIPULACIÓN BÁSICA DE MATRICES EN MATLAB

>> v = [5:1:1]
v =
Empty matrix: 1-by-0
>> v = [1:-1:4]
v =
Empty matrix: 1-by-0

1.3 OPERACIONES CON MATRICES


Distinguiremos entre operaciones matriciales, que son las definidas habitualmente en álgebra para trabajar con
matrices y alguna más especial, mixtas en las que uno de los operandos es escalar y el otro es matricial o escalares,
en las que las operaciones se realizan elemento a elemento entre los dos operandos.

1.3.1 OPERACIONES MATRICIALES BÁSICAS


Los operadores básicos son los siguientes:
• Suma +
• Resta –
• Multiplicación *
• División /
• División inversa \
• Trasposición ‘
• Potencia ^
Las operaciones entre matrices deben ser coherentes con las dimensiones de las mismas.
Las sumas sólo se pueden realizar si las dimensiones de ambos sumandos son iguales, y lo mismo ocurre con las
restas:
>> A = [1 2 3; 4 5 6; 7 8 9];
>> B = [1 2; 3 4];
>> A + B
??? Error using ==> plus
Matrix dimensions must agree.
>> B = magic(3)
B =
8 1 6
3 5 7
4 9 2
>> A + B
ans =

9 3 9
7 10 13
11 17 11
Para realizar multiplicaciones será necesario que las columnas del primer operando sean iguales a las filas del
segundo:
>> A * B
ans =
26 38 26
71 83 71
116 128 116
Estas dimensiones deben coincidir incluso en el caso de vectores. No es lo mismo un vector fila que uno columna.
>> x = [1 2 3]
x =
1 2 3
>> y = [2;3;4]
y =
2
3

1.3
MANIPULACIÓN BÁSICA DE MATRICES EN MATLAB INFORMÁTICA: NOTAS DE CLASE

4
>> x+y
??? Error using ==> plus
Matrix dimensions must agree.
>> x+y'
ans =
3 5 7
La traspuesta no tiene restricciones dimensionales, mientras que la potencia necesita que la matriz sea cuadrada.
La operación división de matrices lo que hace es multiplicar por la inversa de la matriz por la que estamos
dividiendo, de modo que A/B es equivalente a A*inv(B)1, donde inv es una función que calcula la inversa de la
matriz:
>> A = magic(3);
>> B = [1 2 3; 3 1 2; 2 4 3];
>> A/B
ans =
1.0000 3.0000 -1.0000
2.0000 0.2000 0.2000
-3.0000 -0.2000 3.8000
>> A*inv(B)
ans =
1.0000 3.0000 -1.0000
2.0000 0.2000 0.2000
-3.0000 -0.2000 3.8000
La división inversa se detalla más adelante.

1.3.2 OPERACIONES MIXTAS


Este tipo de operaciones involucran a una matriz y un escalar como operandos. Estamos acostumbrados a usar estas
operaciones para multiplicaciones y divisiones, pero en MATLAB también se pueden aplicar a sumas y restas. La
operación se realiza en todos los elementos de la matriz uno por uno:
>> B - 3
ans =
5 -2 3
0 2 4
1 6 -1

1.3.3 OPERACIONES ESCALARES CON MATRICES


A veces resulta útil hacer una serie de multiplicaciones de un conjunto elevado de datos (por ejemplo para las
prácticas de Física) que podemos (y normalmente lo haremos) almacenar en un vector. Si queremos dibujar un
círculo, por ejemplo, lo que haríamos es:
>> x = -1:0.1:1;
>> y = sqrt(1-x*x)
??? Error using ==> mtimes
Inner matrix dimensions must agree.
Nos aparece un error informando de que las dimensiones de los operandos de x*x no son adecuadas.

1Esta división se puede utilizar aunque la matriz derecha no sea cuadrada. En ese caso se calcula la pseudoinversa de la matriz
por la que se está dividiendo, se multiplica por ella, y después se deshace la pseudoinversa:
>> A = magic(3);
>> B = [1 2 3; 3 1 2];
B =
1 2 3
3 1 2
>> A/B
ans =
-0.2000 2.8000
2.2400 0.2400
1.5600 0.5600

1.4
INFORMÁTICA: NOTAS DE CLASE
MANIPULACIÓN BÁSICA DE MATRICES EN MATLAB

Sin embargo, nosotros no queremos hacer una multiplicación matricial, sino multiplicar cada uno de los elementos
por separado. Para ello tenemos que anteponer un ‘.’ a la operación que queremos realizar:
>> y = sqrt(1-x.*x)
y =
Columns 1 through 8
0 0.4359 0.6000 0.7141 0.8000 0.8660 0.9165 0.9539
Columns 9 through 16
0.9798 0.9950 1.0000 0.9950 0.9798 0.9539 0.9165 0.8660
Columns 17 through 21
0.8000 0.7141 0.6000 0.4359 0
Así ya podríamos dibujar el círculo y ajustar los ejes para que se vea con relación de aspecto 1:1:
>> plot(x,y)
>> axis equal

1.2

0.8

0.6

0.4

0.2

-0.2

-1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1

El operador de multiplicación escalar de matrices (punto ‘.’) se puede anteponer a las operaciones de multiplicación
(‘.*’), división (‘./’), división inversa (‘.\’) y potencia (‘.^’).
Para consultar la ayuda acerca de estos operadores, podéis escribir
>> help arith

1.3.4 DIVISIÓN INVERSA


Este operador parece inútil porque hace lo mismo que el operador de barra normal solo que dividiendo de derecha
a izquierda, sin embargo tiene una diferencia fundamental. En realidad, cuando escribimos ‘5\25’, lo que MATLAB
calcula es ‘5-1*25’. Esto, que trabajando con escalares, no tiene ningún valor, tiene una importancia grande cuando
se opera con matrices, ya que la multiplicación de matrices no es conmutativa, por lo que no es lo mismo
premultiplicar por la inversa (división inversa) o postmultiplicar por la inversa (división normal).
1.3.4.1 APLICACIÓN A LA RESOLUCIÓN DE SISTEMAS DE ECUACIONES
Los sistemas de ecuaciones lineales se escriben en general como A*x = b, y la solución viene dada por x = A-1*b, por
lo que necesitamos premultiplicar b por A-1, de modo que usamos la división inversa.
Tipos de sistemas:
• Compatible determinado: calcula la solución del sistema mediante eliminación gaussiana.
>> A =[1 1; 2 1], b = [0;1]
A =
1 1
2 1
b =
0
1
>> x = A\b
x =
1
-1

1.5
MANIPULACIÓN BÁSICA DE MATRICES EN MATLAB INFORMÁTICA: NOTAS DE CLASE

• Sistema indeterminado (más incógnitas que ecuaciones): Da una de las infinitas soluciones válidas (hace cero
una de las incógnitas y calcula las otras dos)
>> A =[1 1 3; 1 2 4], b = [0;1]
A =
1 1 3
1 2 4
b =
0
1
>> A\b
ans =
0
1.5000
-0.5000
• Sistema sobredeterminado (más ecuaciones que incógnitas): obtiene una solución del sistema en el sentido
de minimizar el error cuadrático medio, ya que no es un sistema que tenga solución.
>> A =[1 1; 1 2; 3 4], b = [0;1;2]
A =
1 1
1 2
3 4
b =
0
1
2
>> x = A\b
x =
-0.5000
0.8333
• Incompatible: no existe solución al sistema.
>> A =[1 1; 2 2], b = [0;1]
A =
1 1
2 2
b =
0
1
>> x = A\b
Warning: Matrix is singular to working precision.
x =
-Inf
Inf

1.3.5 OPERADORES RELACIONALES Y LÓGICOS


Son los operadores que utilizaremos cuando deseemos analizar si nuestras variables cumplen con una determinada
condición a la hora de tomar decisiones en nuestro código.
• Operadores relacionales: <, <=, >, >=, ==, ~=.
• Operadores lógicos: & (AND), | (OR), ~ (NOT).
Realizan comparaciones entre elementos, ya sean escalares o matrices, y devuelven un valor lógico (booleano) cuyo
valor es 1 o 0 por cada elemento que comparan. Se debe cumplir la coherencia dimensional cuando se comparen
matrices entre sí.
>> A = magic(3)
A =
8 1 6
3 5 7
4 9 2
>> B = A > 4

1.6
INFORMÁTICA: NOTAS DE CLASE
MANIPULACIÓN BÁSICA DE MATRICES EN MATLAB

B =
1 0 1
0 1 1
0 1 0
>> whos A ans
Name Size Bytes Class Attributes

A 3x3 72 double
B 3x3 9 logical
Esos elementos de tipo lógico se pueden utilizar como variables booleanas en expresiones relacionadas por
operadores lógicos. Por ejemplo, si calculamos en otra matriz qué elementos son menores que 6
>> C = A < 6
C =
0 1 0
1 1 0
1 0 1
Y luego hacemos la intersección de ambos con un AND
>> B & C
ans =
0 0 0
0 1 0
0 0 0
Tenemos que el único elemento que es mayor que 4 y menor que 6 es el 5. También lo podríamos haber calculado
como
>> (A > 4) & (A < 6)
ans =
0 0 0
0 1 0
0 0 0
Es importante tener en cuenta que el lenguaje matemático no siempre se puede escribir directamente como
comandos de MATLAB. Por ejemplo, para decir que un número está entre 4 y 6, matemáticamente podemos
expresarlo como 4<A<6. Sin embargo, al escribir esto en línea de comandos tenemos:
>> 4<A<6
ans =
1 1 1
1 1 1
1 1 1
¿Qué ha ocurrido? La línea 4<A<6 contiene dos operaciones distintas de MATLAB, puesto que tiene dos operadores
relacionales. MATLAB realiza primero la comparación 4<A, y después compara el resultado con 6. Si dividimos el
proceso en dos pasos, vemos que MATLAB primero compara los contenidos de A con el número 4:
>> 4<A
ans =
1 0 1
0 1 1
0 1 0
El segundo paso consiste en comparar los resultados de la operación anterior (ans) con el número 6. Como ans, al
contener el resultado de una comparación, sólo tiene unos y ceros, todos los elementos de ans son menores que 6:
>> ans<6
ans =
1 1 1
1 1 1
1 1 1
Para ver la ayuda referente a estos operadores debéis teclear
>> help relop

1.7
MANIPULACIÓN BÁSICA DE MATRICES EN MATLAB INFORMÁTICA: NOTAS DE CLASE

1.4 DIRECCIONAMIENTO DE MATRICES


Hasta ahora hemos trabajado con una matriz completa, pero se puede trabajar con elementos concretos, filas,
columnas o cajas en lugar de con toda ella. Vamos a ver ejemplos de todos estos casos.
Definimos una matriz para trabajar con ella
>> A = [1 2 3; 4 5 6; 7 8 9]
A =
1 2 3
4 5 6
7 8 9
Para acceder a un elemento de ella, ponemos entre paréntesis los índices del elemento al que queremos acceder,
separados por comas2. En MATLAB los índices comienzan siempre en uno, de modo que el primer elemento de la
matriz A será el A(1,1). Si queremos guardar el valor del elemento de la segunda fila y tercera columna en una
variable b:
>> b = A(2,3)
b =
6
Si los índices utilizados se salen de los límites de la matriz, MATLAB nos dará un error, ya que no puede leer un valor
que no existe
>> c = A(2,4)
??? Attempted to access A(2,4); index out of bounds because size(A)=[3,3].
Podemos modificar el valor de un elemento de la matriz asignando un valor como si fuera una variable cualquiera
>> A(2,3) = 0
A =
1 2 3
4 5 0
7 8 9
Si tratamos de asignar un valor a un elemento que está fuera de los límites de la matriz, MATLAB NO NOS DARÁ
NINGÚN ERROR3. Simplemente aumentará el tamaño de la matriz para que ese elemento exista y los elementos
nuevos que no hayamos asignado, se rellenarán con ceros
>> A(2,5) = 10
A =
1 2 3 0 0
4 5 0 0 10
7 8 9 0 0
Podemos acceder a los elementos con un único índice, como si la matriz fuese un vector. En tal caso, la matriz se
considerará un vector como si se hubiese desarrollado por columnas, es decir
>> A = [1 2 3; 4 5 6; 7 8 9]
>> A(:)
ans =
1
4
7
2
5
8
3
6
9
>> A(6:8)
ans =
8 3 6
También podemos acceder a submatrices (cajas) usando vectores para los índices

2 En el caso de que estemos trabajando con vectores, utilizamos un único índice para acceder a sus elementos, ya que son
estructuras de datos que tienen una sola dimensión: v(2) sería el segundo elemento del vector v.
3 Es decir, que MATLAB no puede leer valores fuera del tamaño actual de la matriz (¿Cuánto valdrían?), pero sí que puede asignar

valores fuera de la matriz, redimensionando la misma y completando con ceros.

1.8
INFORMÁTICA: NOTAS DE CLASE
MANIPULACIÓN BÁSICA DE MATRICES EN MATLAB

>> B = A([2 3],[2 3])


B =
5 6
8 9
En el orden que queramos, incluso en orden inverso
>> B = A([3 2],[3 2])
B =
9 8
6 5
O incluso salteado, porque lo que hace MATLAB es combinar los índices de filas y columnas y construir la submatriz
resultado elemento a elemento. Por ejemplo, si escribimos la siguiente línea
>> B = A([1 3],[4 2])
La matriz B, contendrá los siguientes elementos:
1,4 1,2
=
3,4 3,2
,
De modo que el resultado será
B =
0 2
0 8
Podemos usar el operador dos puntos para crear esos vectores de índices
>> B = A(2:3,2:4)
B =
5 0 1
8 9 0
Cuando escribimos sólo el operador dos puntos seleccionamos todos los elementos (todas las filas o todas las
columnas)
>> B = A(:,2:3)
B =
2 3
5 0
8 9
Podemos usar otras variables o incluso expresiones para acceder a elementos. La única condición es que los
contenidos de las variables o los resultados de las expresiones sean valores enteros positivos y que representen
índices dentro de la matriz
>> x = [1 2]
x =
1 2
>> A(x,x)
ans =
1 2
4 5
1.4.1.1 EJERCICIOS
Sea
A =
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
Diga cuál es la salida de las siguientes entradas por línea de comandos:
a) A(1,:) b) A(:,5) c) A(:,6) d) A(1,1:2:5)
e) A([2 4],:) f) A(:,[3 1]) g) A(4:-1:1,3:4) h) A(:,4:-2:1)
i) A([2 2],[5 2]) j) A([3 3],[1 1]) k) A(3:2,[5 4]) l) A([3 2],[5 4])

1.9
MANIPULACIÓN BÁSICA DE MATRICES EN MATLAB INFORMÁTICA: NOTAS DE CLASE

1.4.2 RESUMEN DEL DIRECCIONAMIENTO DE MATRICES


A(r,c) Direcciona una submatriz de A definida por el vector índice de las filas deseadas r y el vector índice
de las columnas deseadas c.
A(r,:) Direcciona una submatriz de A definida por el vector índice de las filas deseadas r.
A(:,c) Direcciona una submatriz de A definida por el vector índice de las columnas deseadas c.
A(:) Direcciona todos los elementos de A tomados columna a columna.
A(i) Direcciona una submatriz de A definida por un único vector índice como si A fuese el vector columna
A(:).

1.4.3 MATRICES VACÍAS


Podemos crear matrices vacías, útiles cuando no sabemos cuántos elementos vamos a necesitar definir en una
matriz
>> D = []
D =
[]
Podemos borrar filas o columnas de una matriz mediante la matriz vacía
>> C(2,:) = []
C =
2 2 3
8 8 9
Pero deben ser filas o columnas completas
>> C(2,1:2) = []
??? Subscripted assignment dimension mismatch.

1.4.4 CONCATENACIÓN DE MATRICES POR CAJAS


La concatenación consiste en unir varias matrices o submatrices (cajas) en una sola. La única restricción que
tenemos es la coherencia dimensional.
Lo más sencillo que podemos hacer es unir dos matrices del mismo tamaño en filas
>> A = [1 2 3; 4 5 6; 7 8 9];
>> B = magic(3);
>> D = [A B]
D =
1 2 3 8 1 6
4 5 6 3 5 7
7 8 9 4 9 2
O en columnas
>> D = [A;B]
D =
1 2 3
4 5 6
7 8 9
8 1 6
3 5 7
4 9 2
Se pueden hacer concatenaciones mucho más complicadas, en las que se unan tres matrices de distintos tamaños,
por ejemplo, si queremos obtener una matriz E que se forme como

= −− ,

Para poder combinar esas tres matrices (D, B y la matriz de ceros, Z) necesitamos crear una matriz con B y Z, para
que unamos dos matrices con 6 filas cada una (coherencia dimensional). Para ello definimos una matriz DENTRO
de otra como sigue
>> E = [D, [B; zeros(3)]]
E =
1 2 3 8 1 6

1.10
INFORMÁTICA: NOTAS DE CLASE
MANIPULACIÓN BÁSICA DE MATRICES EN MATLAB

4 5 6 3 5 7
7 8 9 4 9 2
8 1 6 0 0 0
3 5 7 0 0 0
4 9 2 0 0 0

1.4.5 MATRICES MULTIDIMENSIONALES


Aunque en general trabajaremos únicamente con vectores o matrices de dos dimensiones, MATLAB permite crear
y manejar matrices multidimensionales. Para ello, a la hora de acceder a los elementos se utilizarán tantos índices
como dimensiones tenga la matriz
>> T = zeros(3,3,2)
T(:,:,1) =
0 0 0
0 0 0
0 0 0
T(:,:,2) =
0 0 0
0 0 0
0 0 0
>> T(:,:,2) = magic(3)
T(:,:,1) =
0 0 0
0 0 0
0 0 0
T(:,:,2) =
8 1 6
3 5 7
4 9 2
>> T(:,:,1) = [1 2 3; 4 5 6; 7 8 9]
T(:,:,1) =
1 2 3
4 5 6
7 8 9
T(:,:,2) =
8 1 6
3 5 7
4 9 2

1.5 ALGUNAS FUNCIONES BÁSICAS


A continuación se presentan algunas funciones de uso básico para crear matrices nuevas.

1.5.1 CREACIÓN DE MATRICES


zeros(f,c) Crea una matriz de dimensiones fxc rellena de ceros.
ones(f,c) Crea una matriz de dimensiones fxc rellena de unos.
Crea una matriz de dimensiones fxc que contiene unos en la diagonal
eye(f,c)
principal y ceros en el resto de elementos.
diag(v) Crea una matriz cuadrada con el vector v en su diagonal principal.
Crea una matriz de dimensiones fxc que contiene números reales aleatorios
rand(f,c)
entre 0 y 1 en todos sus elementos.
primes(n) Crea un vector con los números primos menores que n (empezando en 2)
factor(n) Crea un vector con la descomposición en factores primos de n.

1.11
MANIPULACIÓN BÁSICA DE MATRICES EN MATLAB INFORMÁTICA: NOTAS DE CLASE

1.5.1.1 EJERCICIOS
Crear en MATLAB las siguientes matrices en una única línea de comandos sin escribirlas directamente.
A = G =
0 0 0 0 0 0 0 6 0
0 0 0 0 0 0 0 0 5
0 0 0 0 0 0 0 0 0
B = I =
1 0 0 0 3 3 3 3
0 1 0 0 3 3 3 3
0 0 1 0
0 0 0 1
C = J =
1 1 1 1 2 3
1 1 1 1 2 3
1 1 1 1 2 3
1 1 1
D = K =
1 0 0 0 0 3 4 5 6 7
0 1 0 0 0 6 8 10 12 14
0 0 1 0 0 9 12 15 18 21
E = L =
0 1 1 1 1 1 1/2 1/3
1 0 1 0 1 1/2 1/4 1/6
1 1 0 1 0 1/3 1/6 1/9
F = M =
0 0 0 0 0 1 1 1 1
1 0 0 0 0 1 2 3 4
0 2 0 0 0 1 4 9 16
0 0 3 0 0 1 8 27 64

1.5.2 TAMAÑO
Es muy útil, y en gran número de cálculos necesario, saber el tamaño de los vectores y/o matrices con los que
estamos trabajando. MATLAB nos proporciona varios modos para conocer este(os) valor(es).
El primero es el comando whos:
>> whos
Name Size Bytes Class Attributes

A 3x4 96 double
B 3x2 48 double
C 2x3 48 double
D 0x0 0 double
a 1x1 8 double
ans 2x2 32 double
b 2x1 16 double
k 1x4 32 double
x 1x7 56 double
y 1x4 32 double
Otro método consiste simplemente en añadir la columna ‘Size’ en la ventana ‘Workspace’ del entorno gráfico de
MATLAB, de manera que nos aparecerá automáticamente el tamaño de cada variable en dicha ventana.
Sin embargo, a la hora de programar utilizando el lenguaje M de MATLAB, el más habitual, y el único que es
realmente útil, es la función size que devuelve un vector con el tamaño en filas y columnas de una matriz.
>> size(A)
ans =
3 4
Podemos pedir sólo las filas.
>> size(A,1)
ans =
3

1.12
INFORMÁTICA: NOTAS DE CLASE
MANIPULACIÓN BÁSICA DE MATRICES EN MATLAB

O sólo las columnas.


>> size(A,2)
ans =
4
O podemos guardarlas en variables independientes.
>> [f,c] = size(A)
f =
3
c =
4
Existe otra función llamada length que nos devuelve solamente el máximo de las dos dimensiones (filas o
columnas).
>> length(x)
ans =
7
Lo que es muy útil al trabajar con vectores que no sabemos si son fila o columna.

1.5.3 BÚSQUEDA
La función find busca elementos de una matriz que cumplan una determinada condición y devuelve sus índices:
>> x = -3:3
x =
-3 -2 -1 0 1 2 3
>> k = find(abs(x)>1)
k =
1 2 6 7
Estos índices se pueden utilizar para ver cuánto valían esos elementos.
>> y = x(k)
y =
-3 -2 2 3
Si trabajamos con matrices nos devuelve los índices desarrollando la matriz como un vector (por columnas)
>> A = magic(3)
A =
8 1 6
3 5 7
4 9 2
>> find(A<4)
ans =
2
4
9
>> A(ans)
ans =
3
1
2
A menos que le pidamos expresamente que nos dé los índices en forma de filas y columnas.
>> [f,c] = find(A<4)
f =
2
1
3
c =
1
2
3

1.13
MANIPULACIÓN BÁSICA DE MATRICES EN MATLAB INFORMÁTICA: NOTAS DE CLASE

1.5.4 MANEJO DE MATRICES


flipud(A) Realiza una simetría de la matriz con respecto a la horizontal
fliplr(A) Intercambia de izquierda a derecha
rot90(A) Rota una matriz en el sentido contrario a las agujas del reloj 90º
diag(A) Extrae la diagonal de la matriz A como un vector columna
diag(v) Crea una matriz diagonal con el vector v en su diagonal
tril(A) Extrae la parte triangular inferior de la matriz A
triu(A) Extrae la parte triangular superior de la matriz A
Solicitando ayuda aparecen muchas más funciones tanto de creación como de manipulación elemental:
>> help elmat

1.6 AYUDA DE MATLAB


Esta es la ayuda que MATLAB ofrece en la ventana de comandos. Hay mucha más información en la ayuda del menú
de la barra superior.

1.6.1 OPERADORES Y CARACTERES ESPECIALES


>> help ops
Operators and special characters.

Arithmetic operators.
plus - Plus +
uplus - Unary plus +
minus - Minus -
uminus - Unary minus -
mtimes - Matrix multiply *
times - Array multiply .*
mpower - Matrix power ^
power - Array power .^
mldivide - Backslash or left matrix divide \
mrdivide - Slash or right matrix divide /
ldivide - Left array divide .\
rdivide - Right array divide ./
kron - Kronecker tensor product kron

Relational operators.
eq - Equal ==
ne - Not equal ~=
lt - Less than <
gt - Greater than >
le - Less than or equal <=
ge - Greater than or equal >=

Logical operators.
relop - Short-circuit logical AND &&
relop - Short-circuit logical OR ||
and - Element-wise logical AND &
or - Element-wise logical OR |
not - Logical NOT ~
xor - Logical EXCLUSIVE OR
any - True if any element of vector is nonzero
all - True if all elements of vector are nonzero

Special characters.
colon - Colon :
paren - Parentheses and subscripting ( )

1.14
INFORMÁTICA: NOTAS DE CLASE
MANIPULACIÓN BÁSICA DE MATRICES EN MATLAB

paren - Brackets [ ]
paren - Braces and subscripting { }
punct - Function handle creation @
punct - Decimal point .
punct - Structure field access .
punct - Parent directory ..
punct - Continuation ...
punct - Separator ,
punct - Semicolon ;
punct - Comment %
punct - Invoke operating system command !
punct - Assignment =
punct - Quote '
transpose - Transpose .'
ctranspose - Complex conjugate transpose '
horzcat - Horizontal concatenation [,]
vertcat - Vertical concatenation [;]
subsasgn - Subscripted assignment ( ),{ },.
subsref - Subscripted reference ( ),{ },.
subsindex - Subscript index
metaclass - Metaclass for MATLAB class ?

Bitwise operators.
bitand - Bit-wise AND.
bitcmp - Complement bits.
bitor - Bit-wise OR.
bitmax - Maximum floating point integer.
bitxor - Bit-wise XOR.
bitset - Set bit.
bitget - Get bit.
bitshift - Bit-wise shift.

Set operators.
union - Set union.
unique - Set unique.
intersect - Set intersection.
setdiff - Set difference.
setxor - Set exclusive-or.
ismember - True for set member.

See also arith, relop, slash, function_handle.

1.6.2 FUNCIONES MATEMÁTICAS BÁSICAS


>> help elfun
Elementary math functions.

Trigonometric.
sin - Sine.
sind - Sine of argument in degrees.
sinh - Hyperbolic sine.
asin - Inverse sine.
asind - Inverse sine, result in degrees.
asinh - Inverse hyperbolic sine.
cos - Cosine.
cosd - Cosine of argument in degrees.
cosh - Hyperbolic cosine.
acos - Inverse cosine.
acosd - Inverse cosine, result in degrees.

1.15
MANIPULACIÓN BÁSICA DE MATRICES EN MATLAB INFORMÁTICA: NOTAS DE CLASE

acosh - Inverse hyperbolic cosine.


tan - Tangent.
tand - Tangent of argument in degrees.
tanh - Hyperbolic tangent.
atan - Inverse tangent.
atand - Inverse tangent, result in degrees.
atan2 - Four quadrant inverse tangent.
atanh - Inverse hyperbolic tangent.
sec - Secant.
secd - Secant of argument in degrees.
sech - Hyperbolic secant.
asec - Inverse secant.
asecd - Inverse secant, result in degrees.
asech - Inverse hyperbolic secant.
csc - Cosecant.
cscd - Cosecant of argument in degrees.
csch - Hyperbolic cosecant.
acsc - Inverse cosecant.
acscd - Inverse cosecant, result in degrees.
acsch - Inverse hyperbolic cosecant.
cot - Cotangent.
cotd - Cotangent of argument in degrees.
coth - Hyperbolic cotangent.
acot - Inverse cotangent.
acotd - Inverse cotangent, result in degrees.
acoth - Inverse hyperbolic cotangent.
hypot - Square root of sum of squares.

Exponential.
exp - Exponential.
expm1 - Compute exp(x)-1 accurately.
log - Natural logarithm.
log1p - Compute log(1+x) accurately.
log10 - Common (base 10) logarithm.
log2 - Base 2 logarithm and dissect floating point number.
pow2 - Base 2 power and scale floating point number.
realpow - Power that will error out on complex result.
reallog - Natural logarithm of real number.
realsqrt - Square root of number greater than or equal to zero.
sqrt - Square root.
nthroot - Real n-th root of real numbers.
nextpow2 - Next higher power of 2.

Complex.
abs - Absolute value.
angle - Phase angle.
complex - Construct complex data from real and imaginary parts.
conj - Complex conjugate.
imag - Complex imaginary part.
real - Complex real part.
unwrap - Unwrap phase angle.
isreal - True for real array.
cplxpair - Sort numbers into complex conjugate pairs.

Rounding and remainder.


fix - Round towards zero.
floor - Round towards minus infinity.
ceil - Round towards plus infinity.

1.16
INFORMÁTICA: NOTAS DE CLASE
MANIPULACIÓN BÁSICA DE MATRICES EN MATLAB

round - Round towards nearest integer.


mod - Modulus (signed remainder after division).
rem - Remainder after division.
sign - Signum.

1.6.3 OPERADORES ARITMÉTICOS


>> help arith
Arithmetic operators.
+ Plus.
X + Y adds matrices X and Y. X and Y must have the same
dimensions unless one is a scalar (a 1-by-1 matrix).
A scalar can be added to anything.

- Minus.
X - Y subtracts matrix X from Y. X and Y must have the same
dimensions unless one is a scalar. A scalar can be subtracted
from anything.

* Matrix multiplication.
X*Y is the matrix product of X and Y. Any scalar (a 1-by-1 matrix)
may multiply anything. Otherwise, the number of columns of X must
equal the number of rows of Y.

.* Array multiplication
X.*Y denotes element-by-element multiplication. X and Y
must have the same dimensions unless one is a scalar.
A scalar can be multiplied into anything.

^ Matrix power.
Z = X^y is X to the y power if y is a scalar and X is square. If y is an
integer greater than one, the power is computed by repeated
multiplication. For other values of y the calculation
involves eigenvalues and eigenvectors.
Z = x^Y is x to the Y power, if Y is a square matrix and x is a scalar,
computed using eigenvalues and eigenvectors.
Z = X^Y, where both X and Y are matrices, is an error.

.^ Array power.
Z = X.^Y denotes element-by-element powers. X and Y
must have the same dimensions unless one is a scalar.
A scalar can operate into anything.
1.6.3.1 AYUDA DE LA DIVISIÓN NORMAL E INVERTIDA
>> help slash
Matrix division.
\ Backslash or left division.
A\B is the matrix division of A into B, which is roughly the
same as INV(A)*B , except it is computed in a different way.
If A is an N-by-N matrix and B is a column vector with N
components, or a matrix with several such columns, then
X = A\B is the solution to the equation A*X = B computed by
Gaussian elimination. A warning message is printed if A is
badly scaled or nearly singular. A\EYE(SIZE(A)) produces the
inverse of A.
If A is an M-by-N matrix with M < or > N and B is a column
vector with M components, or a matrix with several such columns,
then X = A\B is the solution in the least squares sense to the
under- or overdetermined system of equations A*X = B. The

1.17
MANIPULACIÓN BÁSICA DE MATRICES EN MATLAB INFORMÁTICA: NOTAS DE CLASE

effective rank, K, of A is determined from the QR decomposition


with pivoting. A solution X is computed which has at most K
nonzero components per column. If K < N this will usually not
be the same solution as PINV(A)*B. A\EYE(SIZE(A)) produces a
generalized inverse of A.

/ Slash or right division.


B/A is the matrix division of A into B, which is roughly the
same as B*INV(A) , except it is computed in a different way.
More precisely, B/A = (A'\B')'. See \.

./ Array right division.


B./A denotes element-by-element division. A and B
must have the same dimensions unless one is a scalar.
A scalar can be divided with anything.

.\ Array left division.


A.\B. denotes element-by-element division. A and B
must have the same dimensions unless one is a scalar.
A scalar can be divided with anything.

1.6.4 OPERADORES RELACIONALES Y LÓGICOS


>> help relop
Relational operators.
< > Relational operators.
The six relational operators are <, <=, >, >=, ==, and ~=.
A < B does element by element comparisons between A and B
and returns a matrix of the same size with elements set to logical
1 (TRUE) where the relation is true and elements set to logical 0
(FALSE) where it is not. A and B must have the same dimensions
(or one can be a scalar).

& Element-wise Logical AND.


A & B is a matrix whose elements are logical 1 (TRUE) where both A
and B have non-zero elements, and logical 0 (FALSE) where either has
a zero element. A and B must have the same dimensions (or one can
be a scalar).

&& Short-Circuit Logical AND.


A && B is a scalar value that is the logical AND of scalar A and B.
This is a "short-circuit" operation in that MATLAB evaluates B only
if the result is not fully determined by A. For example, if A equals
0, then the entire expression evaluates to logical 0 (FALSE), regard-
less of the value of B. Under these circumstances, there is no need
to evaluate B because the result is already known.

| Element-wise Logical OR.


A | B is a matrix whose elements are logical 1 (TRUE) where either
A or B has a non-zero element, and logical 0 (FALSE) where both have
zero elements. A and B must have the same dimensions (or one can
be a scalar).

|| Short-Circuit Logical OR.


A || B is a scalar value that is the logical OR of scalar A and B.
This is a "short-circuit" operation in that MATLAB evaluates B only
if the result is not fully determined by A. For example, if A equals
1, then the entire expression evaluates to logical 1 (TRUE), regard-
less of the value of B. Under these circumstances, there is no need

1.18
INFORMÁTICA: NOTAS DE CLASE
MANIPULACIÓN BÁSICA DE MATRICES EN MATLAB

to evaluate B because the result is already known.

~ Logical complement (NOT).


~A is a matrix whose elements are logical 1 (TRUE) where A has zero
elements, and logical 0 (FALSE) where A has non-zero elements.

xor Exclusive OR.


xor(A,B) is logical 1 (TRUE) where either A or B, but not both, is
non-zero. See XOR.

1.6.5 CREACIÓN Y MANIPULACIÓN DE MATRICES


>> help elmat
Elementary matrices and matrix manipulation.

Elementary matrices.
zeros - Zeros array.
ones - Ones array.
eye - Identity matrix.
repmat - Replicate and tile array.
rand - Uniformly distributed random numbers.
randn - Normally distributed random numbers.
linspace - Linearly spaced vector.
logspace - Logarithmically spaced vector.
freqspace - Frequency spacing for frequency response.
meshgrid - X and Y arrays for 3-D plots.
accumarray - Construct an array with accumulation.
: - Regularly spaced vector and index into matrix.

Basic array information.


size - Size of array.
length - Length of vector.
ndims - Number of dimensions.
numel - Number of elements.
disp - Display matrix or text.
isempty - True for empty array.
isequal - True if arrays are numerically equal.
isequalwithequalnans - True if arrays are numerically equal.

Matrix manipulation.
cat - Concatenate arrays.
reshape - Change size.
diag - Diagonal matrices and diagonals of matrix.
blkdiag - Block diagonal concatenation.
tril - Extract lower triangular part.
triu - Extract upper triangular part.
fliplr - Flip matrix in left/right direction.
flipud - Flip matrix in up/down direction.
flipdim - Flip matrix along specified dimension.
rot90 - Rotate matrix 90 degrees.
: - Regularly spaced vector and index into matrix.
find - Find indices of nonzero elements.
end - Last index.
sub2ind - Linear index from multiple subscripts.
ind2sub - Multiple subscripts from linear index.
bsxfun - Binary singleton expansion function.

Multi-dimensional array functions.


ndgrid - Generate arrays for N-D functions and interpolation.

1.19
MANIPULACIÓN BÁSICA DE MATRICES EN MATLAB INFORMÁTICA: NOTAS DE CLASE

permute - Permute array dimensions.


ipermute - Inverse permute array dimensions.
shiftdim - Shift dimensions.
circshift - Shift array circularly.
squeeze - Remove singleton dimensions.

Array utility functions.


isscalar - True for scalar.
isvector - True for vector.

Special variables and constants.


ans - Most recent answer.
eps - Floating point relative accuracy.
realmax - Largest positive floating point number.
realmin - Smallest positive floating point number.
pi - 3.1415926535897....
i - Imaginary unit.
inf - Infinity.
nan - Not-a-Number.
isnan - True for Not-a-Number.
isinf - True for infinite elements.
isfinite - True for finite elements.
j - Imaginary unit.
why - Succinct answer.

Specialized matrices.
compan - Companion matrix.
gallery - Higham test matrices.
hadamard - Hadamard matrix.
hankel - Hankel matrix.
hilb - Hilbert matrix.
invhilb - Inverse Hilbert matrix.
magic - Magic square.
pascal - Pascal matrix.
rosser - Classic symmetric eigenvalue test problem.
toeplitz - Toeplitz matrix.
vander - Vandermonde matrix.
wilkinson - Wilkinson's eigenvalue test matrix.

1.20

También podría gustarte