SESION 2-MATLAB y El Algebra Lineal
SESION 2-MATLAB y El Algebra Lineal
SESION 2-MATLAB y El Algebra Lineal
AYUDA EN LÍNEA
APROXIMACIONES
(con x escalar, vector o matriz, pero redondearía en cada caso los elemento
individualmente)
Ejemplo:
>> round ( [19.54646 13.656 -2.1565 0.78] )
ans =
20 14 -2 1
TRIGONOMETRÍA
Ejemplos:
>> sin (pi/2)
ans =
1
>> sind (-90)
ans =
-1
>> cosd (60)
ans =
0.5000
>> asind (1)
ans =
90
ALGUNAS OPERACIONES
Ejemplos:
>> abs (-7) % valor absoluto de -7
ans =
7
>> sign (10) % signo del número 10
ans =
1
>> gcd (9,12) % máximo común divisor entre 9 y 12
ans =
3
>> lcm (10,25) % mínimo común múltiplo
ans =
50
VECTORES Y MATRICES
CÓMO DEFINIRLOS
Para crear un vector introducimos los valores deseados separados por espacios (o
comas) todo ello entre corchetes []. Si lo que queremos es crear una matriz lo hacemos
de forma análoga pero separando las filas con puntos y comas (;).
Generalmente usaremos letras mayúsculas cuando nombremos a las matrices y
minúsculas para vectores y escalares. Esto no es imprescindible y Matlab no lo exige,
pero resulta útil.
Ejemplos:
>> y = [2,1,3,7] % es otro vector, los elementos los separamos con comas
y=
2137
>> z = [0 1 2,3 4,5] % es otro vector, da igual separar los elementos por comas o
espacios
z=
012345
>> x = [5 7 -2 4 -6];
>> x (2) % segundo elemento del vector x
ans =
7
Para acceder a un bloque de elementos a la vez, se usa la notación de dos puntos (:), así
x (m:n) nos da todos los elementos desde el m-ésimo hasta el n-ésimo del vector x.
Otra forma de obtener un conjunto concreto de elementos del vector es indicando entre
corchetes [] las posiciones de los elementos que queremos obtener poniendo paréntesis
fuera de los corchetes.
Para acceder a los elementos de una matriz necesitamos dar dos valores, el primero
indica la fila y el segundo la columna.
>> A = [1 2 3; 4 5 6];
>> A (2,1) % elemento de la matriz que está en la fila 2 y en la columna 1
ans =
4
Si queremos que escriba toda una fila usaremos los dos puntos para indicar que
queremos todos los elementos.
Y similar si queremos que escriba toda una columna pero ahora situamos los dos puntos
en el lugar de las filas para indicar que queremos todas las filas de esa columna.
Matlab tiene además otra forma de identificar cada elemento de una matriz, de modo
que podemos acceder a un elemento de una matriz indicando sólo un valor y no dos,
pero debemos saber que el orden elegido por Matlab es por columnas así los elementos
de la matriz A serían denominados:
Ejemplo:
Como la matriz A que teníamos era
A=
123
456
Pero es preferible para evitar confusiones trabajar con los elementos de las matrices
indicando la fila y la columna correspondiente.
A parte de definir un vector introduciendo cada uno de sus elementos, también podemos
crearlo haciendo uso de las siguientes sentencias:
(a:b) crea un vector que comienza en el valor a y acaba en el valor b aumentando de 1
en 1.
(a:c:b) crea un vector q comienza en el valor a y acaba en el valor b aumentando de c
en c.
linspace (a,b,c) genera un vector linealmente espaciado entre los valores a y b con c
elementos.
linspace (a,b) genera un vector linealmente espaciado entre los valores a y b con 100
elementos.
logspace (a,b,c) genera un vector logarítmicamente espaciado entre los valores 10^a y
10^b con c elementos.
logspace (a,b) genera un vector logarítmicamente espaciado entre los valores 10^a y
10^b con 50 elementos.
Ejemplos:
>> (1:7) % crea un vector que comienza en 1, aumenta de 1 en 1 y acaba en 7
ans =
1234567
>> logspace (0,2,4) % genera un vector logarítmicamente espaciado entre 10^0 y 10^2
con 4 elementos
ans =
1.0000 4.6416 21.5443 100.0000
Al igual que pasa con los vectores, existen unas sentencias que nos ayudan a crear más
rápidamente algunas matrices que Matlab ya tiene predefinidas (m y n deben tomar
valores naturales):
zeros (n) crea una matriz cuadrada n x n de ceros.
zeros (m,n) crea una matriz m x n de ceros.
ones (n) crea una matriz cuadrada n x n de unos.
ones (m,n) crea una matriz m x n de unos.
rand (n) crea una matriz cuadrada n x n de números aleatorios con distribución
uniforme (0,1).
rand (m,n) crea una matriz m x n de números aleatorios con distribución uniforme
(0,1).
randn (n) crea una matriz n x n de números aleatorios con distribución normal (0,1).
randn (m,n) crea una matriz m x n de números aleatorios con distribución normal (0,1).
eye (n) crea una matriz cuadrada n x n de unos en la diagonal y ceros el resto.
eye (m,n) crea una matriz m x n de unos en la diagonal y ceros el resto.
magic (n) crea una matriz cuadrada n x n de enteros de modo que sumen lo mismo las
filas y las columnas.
hilb (n) crea una matriz cuadrada n x n de Hilbert, es decir, los elementos (i,j)
responden a la expresión (1/(i+j-1)).
invhilb (n) crea una matriz cuadrada n x n que es la inversa de la matriz de Hilbert.
Ejemplos:
>> rand (2,4) % matriz de valores aleatorios entre 0 y 1 según la uniforme (0,1)
ans =
0.9355 0.4103 0.0579 0.8132
0.9169 0.8936 0.3529 0.0099
Ejemplos:
Definimos tres matrices para poder hacer operaciones entre ellas.
A=B=C=
1 2 1 1 1.0000 + 1.0000i 2.0000 + 2.0000i
3 4 0 1 3.0000 + 1.0000i 4.0000 + 7.0000i
ans =
1.0000 - 1.0000i 3.0000 - 1.0000i
2.0000 - 2.0000i 4.0000 - 7.0000i
Ejemplos:
>> x = [1 2 3]; y = [4 5 6];
>> cross (x,y) % producto vectorial
ans =
-3 6 –3
Ejemplos:
>> diag (v) % crea una matriz diagonal a partir del vector v
ans =
100
020
003
>> A = [1 2 3 4; 7 8 9 2; 2 4 6 8]
A=
1234
7892
2468
>> size (A) % devuelve las dimensiones de la matriz como un vector fila
ans =
34
>> length (A) % devuelve la mayor de las dos dimensiones de la matriz
ans =
4
u=
1 2 3 4 % convierte en ceros todos los elementos que quedan debajo de
0 8 9 2 % la diagonal principal y lo guarda en la variable u
0068
Ejemplos:
>> A = [pi 0; pi/4 pi/3]
A=
3.1416 0
0.7854 1.0472
TEXTO
Una cadena de caracteres es texto rodeado por comillas simples (') y se manejan como
vectores filas. Se direccionan y manipulan igual que los vectores. Son posibles las
operaciones matemáticas sobre cadenas. Una vez hecha una operación matemática sobre
una cadena, ésta se ve como un vector de números en ASCII.
Para ver la representación ASCII de una cadena, podemos utilizar las funciones abs,
double o sumamos cero. Para restaurarla y verla de nuevo como cadena de caracteres,
usamos la función setstr. Si queremos cambiar a minúsculas añadiremos la diferencia
entre 'a' y 'A'.
Si queremos que escriba algo en pantalla podemos utilizar el comando disp.
Ejemplos:
>> a = 'casa'; b = 'gato'; % a y b son cadenas de caracteres (se manejarán como vectores)
>> a + b
ans =
202 194 231 208
>> double (a) % otra tercera forma de ver la representación ASCII de la cadena
ans =
99 97 115 97
>> abs ('a') – abs ('A') % calculamos la diferencia entre minúsculas y mayúsculas
ans =
32
>> setstr (a-32) % escribimos los caracteres conociendo la representación ASCII
ans =
CASA
HIPERMATRICES
CÓMO DEFINIRLAS
Matlab permite trabajar con matrices de más de dos dimensiones. Los elementos de una
hipermatriz pueden ser números, caracteres, estructuras y vectores o matrices de celdas.
Las funciones que operan con matrices de más de dos dimensiones son análogas a las
funciones vistas anteriormente aunque con algunas diferencias, por ejemplo, a la hora de
definirlas:
HM(:,:,1) =
123
456
HM(:,:,2) =
789
10 11 12
Ejemplos:
>> A = zeros (2,3); B = ones (2,3); % definimos dos matrices de las mismas
dimensiones
>> cat (3,A,B) % las concatena como distintas capas de una hipermatriz
ans(:,:,1) =
000
000
ans(:,:,2) =
111
111
ESTRUCTURAS
CÓMO DEFINIRLAS
Es una agrupación de datos de tipo diferente bajo un mismo nombre. A los datos les
llamamos campos. No hace falta definir previamente el modelo de la estructura,
podemos ir creando los distintos campos uno a uno o bien con el comando struct, donde
los nombres de los campos se escriben entre apóstrofos (') seguidos del valor que se les
quiere asignar.
Ejemplos:
>> alumno.nombre = 'Pablo'; % introducimos el campo nombre en la estructura alumno
>> alumno.apellido1 = 'Fernández'; % introducimos el campo apellido1 en la estructura
alumno
>> alumno.apellido2 = 'García'; % introducimos el campo apellido2 en la estructura
alumno
>> alumno.edad = 15; % introducimos el campo edad en la estructura alumno
>> alumno % escribe por pantalla la información almacenada en la estructura alumno
alumno =
nombre: 'Pablo'
apellido1: 'Fernández'
apellido2: 'García'
edad: 15
>> alumno2 = struct ('nombre','Fermín','apellido1','Martínez','apellido2','Gil','edad',16)
alumno2 = % otro modo de introducir los campos
nombre: 'Fermín'
apellido1: 'Martínez'
apellido2: 'Gil'
edad: 16
>> alumno (1) % nos devuelve los datos del primer elemento del vector de la estructura
ans =
nombre: 'Pablo'
apellido1: 'fernández'
apellido2: 'García'
edad: 15
>> alumno (2) % nos devuelve los datos del segundo elemento del vector de la
estructura
ans =
nombre: 'Fermín'
apellido1: 'Martínez'
apellido2: 'Gil'
edad: 16
Ejemplos:
>> fieldnames (alumno) % devuelve los campos de la estructura alumno
ans =
'nombre'
'apellido1'
'apellido2'
'edad'
>> isfield (alumno,'nombre') % devuelve 1 por ser cierto que nombre es un campo de
alumno
ans =
1
>> isstruct (alumno) % devuelve 1 porque es cierto que alumno es una estructura
ans =
1
>> rmfield (alumno,'edad') % elimina el campo edad de la estructura alumno
ans =
1x2 struct array with fields:
nombre
apellido1
apellido2
>> cel {1} = [0 1 2]; % creamos otro vector de celdas definiendo celda a celda de forma
distinta
>> cel {2} = 'cadena de caracteres';
>> cel {3} = eye (2);
>> cel {4} = -7;
>> cel
cel = [1x3 double] [1x20 char] [2x2 double] [-7]
>> c = { [0 1 2] ,'cadena de caracteres',eye(2),-7}; % otra forma de crear un vector de
celdas. Si queremos crear una matriz o una hipermatriz de celdas se haría de forma
similar.
Ejemplos:
>> cell (2,3) % crea una matriz de celdas vacías
ans =
[] [] []
[] [] []
cadena de caracteres
c{3} =
10
01
c{4} =
-7
OPERADORES RELACIONALES
OPERADORES LÓGICOS
Además de los operadores relacionales y lógicos básicos anteriores, Matlab proporciona
una serie de funciones relacionales y lógicas adicionales que incluyen:
Podemos ver muchos más casos pero todos serían similares: ischar, isempty, isequal,
isfloat, isinteger, islogical, isnumeric, isprime, isreal, isscalar, isspace, …
Existe un orden de precedencia para operadores aritméticos, lógicos y relacionales, en la
siguiente tabla van de mayor a menor precedencia:
Ejemplos:
>> isnan (c) % pregunta cuando c es NaN, devuelve 1 cuando es verdadero y 0 cuando
es falso
ans =
000010
>> isinf (c) % pregunta cuando c es Inf, devuelve 1 cuando es verdadero y 0 cuando es
falso
ans =
100000