Introduccion Matlab
Introduccion Matlab
Introducción a la
programación con Matlab
Angelo Santana
1. Matlab como calculadora.
Funciones matemáticas
elementales
Elementos
Elementos
ElementosBásicos
Básicos
Básicosde
de
deMatlab
Matlab
Matlab
Matlab
Matlab
Matlabcomo
como
comocalculadora
calculadora
calculadora
Lista
Lista de
Listade funciones
defunciones básicas
funcionesbásicas en
básicasen Matlab
enMatlab
Matlab
>> 2+3
ans = 5
>> 4-9
ans = -5
>> 6*3
ans = 18
>> 9/2
ans = 4.5000
>> 3^2
ans = 9
>> pi
ans = 3.1416
>> sin(pi/2)
ans = 1
La función exponencial exp(x) calcula
el valor de ex . El valor de e2 , por
ejemplo, se obtiene como:
>> exp(2)
ans = 7.3891
>> log(100)
ans = 4.6052
>> log10(100)
ans = 2
>> log2(100)
ans = 6.6439
Nombre Función
cos Coseno de un ángulo (en radianes)
sin Seno de un ángulo (en radianes)
tan Tangente de un ángulo (en radianes)
exp Función exponencial (ex )
log Logaritmo neperiano
log10 Logaritmo en base 10
sinh Seno hiperbólico
cosh Coseno hiperbólico
tanh Tangente hiperbólica
Nombre Función
acos Arco coseno
acosh Arco coseno hiperbólico
asin Arco seno
asinh Arco seno hiperbólico
atan Arco tangente
atanh Arco tangente hiperbólica
abs Valor absoluto
sign Signo de un número (-1 ó +1)
round Redondeo al entero más cercano
floor Redondeo por defecto
ceil Redondeo por exceso
fix Redondeo hacia cero
rem Resto de la división entera
sqrt Raíz cuadrada
2. Variables numéricas: Vectores
y matrices en Matlab
Variables
Variables
Variables
Creación
Creación
Creaciónde
de
devectores
vectores
vectoresyyymatrices.
matrices.
matrices.
Dimensión
Dimensión
Dimensiónde
de
deuna
una
unamatriz
matriz
matriz
Concatenar
Concatenar
Concatenarmatrices
matrices
matricesooovectores
vectores
vectores
Matriz
Matriz
Matriztraspuesta
traspuesta
traspuesta
Matriz
Matriz
Matrizinversa
inversa
inversa
Determinante
Determinante
Determinantede
de
deuna
una
unamatriz
matriz
matriz
Selección
Selección
Seleccióny/o
y/o
y/omodificación
modificación
modificaciónde
de
deelementos
elementos
elementosooopartes
partes
partesde
de
deun
un
unvector
vector
vectorooomatriz
matriz
matriz
Operaciones
Operaciones
Operacionescon
con
convectores
vectores
vectoresyyymatrices.
matrices.
matrices.
Suma
Suma
Suma
Producto
Producto
Producto
Producto
Producto
Productode
de
dematrices
matrices
matrices
Producto
Producto
Productode
de
dematriz
matriz
matrizpor
por
porvector
vector
vector
Producto
Producto
Productoescalar
escalar
escalarde
de
dedos
dos
dosvectores
vectores
vectores
Operaciones
Operaciones
Operacionesde
de
deuna
una
unamatriz
matriz
matrizcon
con
conun
un
unescalar
escalar
escalar
Operaciones
Operaciones con
Operacionescon la
conla matriz
lamatriz inversa
matrizinversa
inversa
Variables
En un lenguaje de programación una variable es
un espacio en la memoria del ordenador al que
se le ha asignado un nombre; el contenido de
dicho espacio puede cambiar a lo largo de una
sesión de trabajo o durante la ejecución de un
programa (precisamente por eso se denomina
variable).
a = 25
>> a = 30
a = 30
>> V=[1 2 3]
V =
1 2 3
>> V=[1, 2, 3]
V =
1 2 3
>> A=[1 2 3 4 5
6 7 8 9 10
11 12 13 14 15]
A =
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
A =
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
>> A=[1 2 3 4 5
6 7 8 9 10
11 12 13 14 15];
>> size(A)
ans =
3 5
>> size(A,1)
ans = 3
>> size(A,2)
ans = 5
>> numel(A)
ans = 15
ans = 3
>> length(A)
ans = 5
>> A=[1 2; 3 4]
A =
1 2
3 4
>> B= [8; 7]
B =
8
7
“Pegamos” B a la derecha de A:
>> C=[A B]
C =
1 2 8
3 4 7
>> D=[2 3 5]
D =
2 3 5
>> [A B; D]
ans =
1 2 8
3 4 7
-2 3 -5
>> [V V]
ans =
1 2 3 1 2 3
>> [V; V]
ans =
1 2 3
1 2 3
Matriz traspuesta
La traspuesta de una matriz (o vector) se obtiene
simplemente añadiendo un apóstrofe (’) al
nombre de la matriz o vector:
>> A'
ans =
1 4 7
2 5 8
3 6 9
>> V=[1 2 3];
>> V'
ans =
1
2
3
Matriz inversa
La inversa de una matriz se obtiene mediante la
función inv():
>> inv(A)
ans =
2 -1
-1 1
>> inv(B)
Inf Inf
Inf Inf
>> det(A)
ans = 11
>> A=[4 6 8 7 9; 1 -2 -7 8 4; 2 3 5 5 7]
A =
4 6 8 7 9
1 -2 -7 8 4
2 3 5 5 7
>> A(2,4)
ans = 8
⊕
>> A(2:3,3:4)
ans =
-7 8
5 5
ans =
6 9
3 7
ans =
4 6 8 7 9
1 -2 -7 8 4
>> A(:,4)
ans =
7
8
5
Podemos utilizar las selecciones anteriores para
modificar los valores correspondientes en la
matriz; por ejemplo, si queremos cambiar todos
los términos de la cuarta columna por unos:
>> A(:,4)=1
A =
4 6 8 1 9
1 -2 -7 1 4
2 3 5 1 7
>> A(2,:)=[5 4 3 2 1]
A =
4 6 8 1 9
5 4 3 2 1
2 3 5 1 7
>> A(:,3)=[]
A =
4 6 1 9
5 4 2 1
2 3 1 7
A =
5 4 2 1
d =
-1 0 -1 0 -1 0 -1
>> H(3,4)=5
H =
0 0 0 0
0 0 0 0
0 0 0 5
>> U+V
ans =
0 5 7
>> A=[1 2 3; 4 5 6; 7 8 9]
A =
1 2 3
4 5 6
7 8 9
0 1 -2
3 2 -4
1 1 1
>> A+B
ans =
1 3 1
7 7 2
8 9 10
Producto
Producto de matrices
⊕
>> A*B
ans =
9 8 -7
21 20 -22
33 32 -37
ans =
14
32
50
>> U*V'
ans = 17
>> 2.*A
ans =
2 4 6
8 10 12
14 16 18
>> 2.+A
ans =
3 4 5
6 7 8
9 10 11
>> 3.*V
ans =
3 6 9
Operaciones con la matriz inversa
Supongamos ahora que tenemos las siguientes
matrices:
>> A*inv(B)
ans =
3 -12 67
1 -7 42
1 -2 10
como:
>> A/B
ans =
3 -12 67
1 -7 42
1 -2 10
>> inv(B)*A
ans =
0 1 2
-7 21 56
2 -5 -15
ans =
0 1 2
-7 21 56
2 -5 -15
3. Secuencias, matrices de
números aleatorios y matrices
especiales
Secuencias
Secuencias
Secuencias
Vectores
Vectores
Vectoresyyymatrices
matrices
matricesde
de
denúmeros
números
númerosaleatorios:
aleatorios:
aleatorios:
Matrices
Matrices especiales:
Matricesespeciales: Identidad,
especiales:Identidad, Diagonal,
Identidad,Diagonal, Unos,
Diagonal,Unos, Ceros
Unos,Ceros
Ceros
Matriz
Matriz
MatrizIdentidad
Identidad
Identidad
Matriz
Matriz
Matrizdiagonal
diagonal
diagonal
Matriz
Matriz
Matrizde
de
deunos
unos
unos
Matriz
Matriz
Matrizde
de
deceros
ceros
ceros
Secuencias
La sintaxis a:b:c genera la secuencia de valores
que van de a a c en incrementos de magnitud b.
Si se omite el valor de b se genera una secuencia
de valores de a a c de uno en uno. En general
una secuencia de valores es considerada por
Matlab como un vector.
>> U=0:10
U =
0 1 2 3 4 5 6 7 8 9 10
>> V=0:2:10
V =
0 2 4 6 8 10
>> W=0:0.1:0.5
W =
>> X=12:-3:-12
X =
12 9 6 3 0 -3 -6 -9 -12
>> rand(1)
ans = 0.38783
>> rand(2)
ans =
0.13337 0.95887
0.93870 0.22270
>> rand(1,4)
ans =
>> rand(2,3)
ans =
Ejemplos:
>> randi(7)
ans = 7
>> randi(7,2,2)
ans =
4 4
7 3
>> randi([3,9],1,10)
ans =
6 9 9 5 8 5 6 3 3 5
>> eye(3)
ans =
Diagonal Matrix
1 0 0
0 1 0
0 0 1
Matriz diagonal
En Matlab una matriz diagonal se construye
fácilmente como:
ans =
Diagonal Matrix
1 0 0
0 2 0
0 0 3
ans =
0 0 0 0 0 1 0 0
0 0 0 0 0 0 2 0
0 0 0 0 0 0 0 3
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
Matriz de unos
Podemos construir una matriz de unos de
dimensión m × n como ones(m,n):
>> ones(3,2)
ans =
1 1
1 1
1 1
>> ones(3)
ans =
1 1 1
1 1 1
1 1 1
Matriz de ceros
Asimismo una matriz de ceros de dimensión
m × n se define como zeros(m,n):
>> zeros(2,3)
ans =
0 0 0
0 0 0
ans =
0 0 0
0 0 0
0 0 0
4. Variables de texto (strings y
chars)
Variables
Variables
Variablesde
de
detexto
texto
textode
de
declase
clase
clase“cadena”
“cadena” strings
“cadena”(((strings
(strings
strings))
strings)))
Variables
Variables
Variablesde
de
detexto
texto
textode
de
declase
clase
clase“carácter”
“carácter” char
“carácter”(((char
(char
char))
char)))
Funciones
Funciones
Funcionesmás
más
máshabituales
habituales
habitualespara
para
paraoperar
operar
operarcon
con
convariables
variables
variablesde
de
detexto:
texto:
texto:
txt =
>> class(txt)
ans= string
⊕
>> palabras = ["esto", "es", "un", "vector","de","texto"]
palabras =
>> palabras(1)
ans=
"esto"
>> palabras(4)
ans=
"vector"
>> palabras(2:4)
ans =
MP =
"Esto" "es"
"una" "matriz"
"de" "palabras"
>> MP(2,:)
ans =
"una" "matriz"
>> MP(3,2)
ans =
"palabras"
ans =
"programar es fácil"
>> class(t)
ans =
'char'
>> t(7:13)
ans =
'usando '
>> size(t)
ans =
1 31
t2 =
ans =
>> size(t2)
ans =
1 29
TT =
ans =
'l prog'
'enguaj'
ans =
37
>> int2str(123456)
ans =
'123456'
>> num2str(2.13456,2)
ans = 2.1
>> num2str(2.13456,4)
ans = 2.135
>> num2str(21345.36,2)
ans = 2.1e+04
>> a=num2str(21345.36);
>> a(4:7)
ans = 45.3
a = 1 2 3
>> size(a)
ans =
1 7
>> a(1)
ans = 1
>> a(2)
ans =
>> a(3)
ans =
>> a(4)
ans = 2
ans = [
>> a="Hola";
>> b="hola";
>> strcmp(a,b)
ans = 0
>> strcmpi(a,b)
ans = 1
>> a==b
ans =
0 1 1 1
5. Variables lógicas e instrucciones
condicionales.
Variables
Variables
Variableslógicas
lógicas
lógicas
Operadores
Operadores
Operadoreslógicos
lógicos
lógicos
all
all
all
any
any
any
and
and
and
or
or
or
find
find
find
Sentencias
Sentencias
Sentenciascondicionales:
condicionales:
condicionales:if
if…
if
if ……elseif
elseif
elseif
elseif
Sentencias
Sentencias
Sentenciascondicionales:
condicionales:
condicionales:switch
switch
switch
switch
Variables lógicas
En matlab las variables lógicas son aquellas que
toman dos valores: true (que se codifica como 1) y
false (que se codifica como 0).
A =
1 1 1
>> a=7;
b=5;
c=7;
>> a==b
ans = 0
>> a==c
ans = 1
>> a~=b
ans = 1
ans =
0 1 0 1
Operadores lógicos
Matlab cuenta con varios operadores que actúan
sobre variables lógicas:
all
all: comprueba si todos los valores de una
operación lógica son verdad.
>> all(u==1)
ans = 0
>> all(v==2)
ans = 1
>> all(u==v)
ans = 0
any
any: comprueba si alguno o algunos de los valores
de una operación lógica son verdad.
>> any(u==1)
ans = 1
>> any(u==5)
ans = 0
>> any(u==v)
ans = 1
and
and: comprueba si dos valores lógicos son ambos
verdaderos; se puede para ello usar el operador &:
ans = 1
ans = 0
ans = 1
ans = 0
or
or: comprueba si dos valores lógicos son ambos
verdaderos; se puede usar para ello el operador |:
ans = 1
ans = 1
ans = 1
ans = 1
find
find encuentra índices y valores de elementos
verdaderos; por ejemplo, en el siguiente vector
podemos encontrar qué posiciones ocupan los
valores mayores que 5:
>> A = [2 8 5 9 12 3 2];
find(A>5)
ans =
2 4 5
>> A=[1 2 3; 4 5 6]
B=[2 7 3; 8 5 9]
[fila,columna]=find(A==B);
[fila,columna]
A =
1 2 3
4 5 6
B =
2 7 3
8 5 9
ans =
2 2
1 3
Ver
Ver
Vermás
más
másinformación
información
informaciónsobre
sobre
sobrevariables
variables
variablesyyyoperaciones
operaciones
operaciones
lógicas
lógicas
lógicasen
en
enelel
elsitio
sitio
sitioweb
web
webde
de
deMathworks
Mathworks
Mathworks
if (condición)
< hacer cosas >
end
Ejemplo:
a=8
if (rem(a,2)==0)
disp('a es par')
end
El resultado es:
a = 8
a es par
La sentencia if puede acompañarse de elseif y de
else:
a=9
if (rem(a,2)==0)
disp('a es par')
elseif (rem(a,3)==0)
disp('a es impar y divisible por 3')
else
disp('a es impar no divisible por 3')
end
a = 9
a es impar y divisible por 3
switch (X)
case 1
Hacer algo;
case 2
Hacer algo distinto;
otherwise
Hacer otra cosa;
end
X=2
switch (X)
case 1
disp("X vale 1");
case 2
disp("X vale 2");
otherwise
disp("X no es ni 1 ni 2");
end
X='c'
switch (X)
case 'a'
disp("X es la letra a");
case 'b'
disp("X es la letra b");
otherwise
disp("X no es ni a ni b");
end
X = c
X no es ni a ni b
6. Funciones
Definición
Definición
Definiciónde
de
defunciones
funciones
funcionesen
en
enMatlab
Matlab
Matlab
Guardar
Guardar
Guardaruna
una
unafunción
función
función
Ejemplo:
Ejemplo:
Ejemplo:la
la
laecuación
ecuación
ecuaciónde
de
desegundo
segundo
segundogrado
grado
grado
Buenas
Buenas
Buenasprácticas
prácticas
prácticasde
de
deprogramación
programación
programaciónde
de
defunciones
funciones
funciones
Identificadores
Identificadores de
Identificadoresde funciones
funciones(((function
defunciones function
(function handles
handles)))
functionhandles
handles))
Usar
Usar
Usaruna
una
unafunción
función
funcióncomo
como
comoargumento
argumento
argumentode de
deotra
otra
otrafunción
función
función
Funciones
Funciones
Funcionesanónimas
anónimas
anónimas
function y = rango(x)
% Esta función calcula los valores mínimo y máximo de un vector o matriz x
y = [min(x) max(x)];
end
>> v=rand(1,6)
v =
>> rango(v)
ans =
0.031225 0.991870
>> minmax(v)
ans = 0.031225
minV = 0.031225
maxV = 0.99187
>> minV
minV = 0.031225
>> maxV
maxV = 0.99187
>> minmax2(v)
>> minV
minV = [](0x0)
>> maxV
maxV = 0.99187
function x = resuelveEc2G(a,b,c)
discrim=b^2-4*a*c;
x1=(-b-sqrt(discrim))/(2*a);
x2=(-b+sqrt(discrim))/(2*a);
x=[x1;x2];
end
ans =
-2
3
>> resuelveEc2G(1,2,5)
ans =
-1 - 2i
-1 + 2i
function [a,b,c,error]=pideCoeficientesEc2G()
% Esta función solicita los coeficientes de una
% ecuación de segundo grado
clc; % Limpia la pantalla
disp('=============================================');
disp('programa para resolver ecuaciones de 2º grado');
disp('=============================================');
disp(' ');
% Introducción de los coeficientes desde teclado:
disp('Introduzca los coeficientes de la ecuación');
disp(' ');
a = input('Valor del coeficiente a: ');
b = input('Valor del coeficiente b: ');
c = input('Valor del coeficiente c: ');
if a==0
error=true;
disp('ERROR: El valor del coeficiente "a" no puede ser 0')
else
error=false;
end
end
Asimismo, la siguiente función se encargaría de
representar la parábola con los puntos de corte:
function dibujaParabola(coefs,raices)
% Esta función dibuja una parábola y muestra
% sus puntos de corte con el eje X
% Se asignan las raíces a las variables x1 y x2:
x1=min(raices);
x2=max(raices);
% Se fijan los límites de la gráfica de forma
% que contengan las raices y quede margen a
% los lados. Si hay una raíz única se fija
% un margen de 2 unidades
if x1==x2
margen=2;
else
margen=(x2-x1)/4;
limInf=x1-margen;
limSup=x2+margen;
% Se calculan los valores de la parábola entre
% los dos límites elegidos
x=linspace(limInf, limSup, 200);
y=coefs(1)*x.^2+coefs(2)*x+coefs(3);
% Se dibuja la parábola
plot(x,y);
% Se centran los ejes en el origen de coordenadas
ax = gca;
ax.XAxisLocation = 'origin';
ax.YAxisLocation = 'origin';
box off
end
function ec2G()
[a,b,c,error]=pideCoeficientesEc2G();
if ~error
raices=resuelveEc2G(a,b,c);
disp('Las raices de la ecuación son:');
disp(raices);
if imag(raices(1))==0
% Solo se dibuja la parábola si
% las raices son reales
dibujaParabola([a,b,c],raices);
end
end
end
>> ec2G()
Cuando ejecutamos la función, nos pide los valores
de los coeficientes y a continuación nos muestra la
solución (o un mensaje de error) y la gráfica en su
caso:
=============================================
programa para resolver ecuaciones de 2º grado
=============================================
ans =
-2.0000
-0.5000
function x2 = cuadrado(x)
x2=x.^2;
end
b = 4
3
2
x dx
∫
1
>> integral(cuadrado,1,3)
>> integral(f,1,3)
>> ans =
8.6667
>> integral(@cuadrado,1,3)
>> ans =
8.6667
Funciones anónimas
Una función anónima es una función cuyo código
consiste en una única expresión matlab escrita en
una sola linea. Normalmente son funciones simples
que no requieren ser guardadas en un archivo .m. Su
sintaxis es de la forma:
2 −x
g(x) = 2x e
>> g(1)
ans = 0.73576
>> g(2)
ans = 1.0827
ans =
7. Bucles
Bucle
Bucle
BucleFor:
For:
For:
Bucle
Bucle
BucleWhile:
While:
While:
Bucle For:
El comando for permite repetir el bucle el número de
veces que se especifique mediante los términos de
un vector. Su sintaxis es de la forma:
for variable=vector
< Hacer cosas >
end
cuadrados=[];
for i=1:10
cuadrados=[cuadrados,i^2];
end
cuadrados
cuadrados =
1 4 9 16 25 36 49 64 81 100
>> [1:10].^2
ans =
1 4 9 16 25 36 49 64 81 100
2 4 5 7
x x x x
f (x) = x + + + +
2 4 5 7
function y=f(x)
y=0;
for k=[1 2 4 5 7]
y=y+(x^k)/k;
end %for
end %function
>> f(3)
ans = 388.78
function y=g(x)
k=[1 2 4 5 7];
y=sum((x.^k)./k);
end %function
>> g(3)
ans = 388.78
function [F]=Fibonacci(n)
% Esta función calcula los n primeros términos de la sucesión de Fibonacci
if n!=floor(n)
F=[];
disp('Aviso: n debe ser un valor entero')
elseif n<=0
F=[];
disp("Aviso: n debe ser mayor o igual que cero");
elseif n==1
F=[0];
elseif n==2
F=[0 1];
else
F=[0 1];
for k=3:n
F(k)=F(k-1)+F(k-2);
end %for
end %if
end %function
Bucle While:
El comando while hace que se repita un bucle
mientras se cumpla una condición; el bucle se
detiene cuando dicha condición deja de cumplirse.
Su sintaxis es de la forma:
while condicion
< Hacer cosas >
end
2 2 2 2 2 2
0 + 1 + 2 + 3 + 4 + ⋯ + n ≤ xmax
function [n]=cuadradosNmax(xmax);
% Esta función determina el mayor entero n tal que la suma de los
% cuadrados de los valores enteros de 0 a n es menor o igual que xmax
if xmax<0
disp("Aviso: ha especificado una suma máxima negativa");
n=[];
else
n=0;
suma=0;
while (suma<xmax)
n=n+1;
suma=suma+n^2;
if (suma>xmax) n=n-1;
end %while
end %if
end %function
>> cuadradosNmax(100)
ans = 6
function [F]=FibonacciMenorQue(x)
% Esta función calcula los términos de la sucesión de Fibonacci
% menores que x
if x<=0
F=[];
disp("Aviso: x debe ser mayor que cero");
elseif x<=1
F=[0];
else
F=[0 1];
k=2;
while F(k)<x
k=k+1;
F(k)=F(k-1)+F(k-2);
end %while
F=F(1:(k-1));
end %if
end %function
>> FibonacciMenorQue(100)
ans =
0 1 1 2 3 5 8 13 21 34 55 89
function [F]=FibonacciMenorQueB(x)
% Esta función calcula los términos de la sucesión de Fibonacci
% menores que x utilizando un bucle while
if x<=0
F=[];
disp("Aviso: x debe ser mayor que cero");
else
F=[0];
k=1;
siguiente=1;
while siguiente<x
k=k+1;
F(k)=siguiente;
siguiente=F(k)+F(k-1);
end %while
end %if
end %function
>> FibonacciMenorQueB(100)
ans =
0 1 1 2 3 5 8 13 21 34 55 89
8. Gráficos
Gráficos
Gráficos
Gráficossimples:
simples:
simples:la
la
lafunción
función
funciónplot
plot
plot
plot
Como
Como
Comomodificar
modificar
modificarel
el
elestilo
estilo
estilode
de
deun
un
ungráfico.
gráfico.
gráfico.
La
La
Lafunción
función
funciónfplot()
fplot()
fplot()
fplot()
Superposición
Superposición
Superposiciónde
de
devarias
varias
variasfunciones
funciones
funcionesen
en
enun
un
unmismo
mismo
mismográfico.
gráfico.
gráfico.
Borrado
Borrado
Borradode
de
deun
un
ungráfico
gráfico
gráfico
Guardar
Guardar
Guardargráficos
gráficos
gráficos
Gráficos
Gráficos
Gráficos3D
3D
3D
function y=f(x)
y=4*x.^3+10*x.^2+6;
end
>> x=linspace(-3,1,50);
>> plot(x,f(x))
Ejemplo:
La función fplot()
Esta función permite dibujar funciones definidas por
el usuario (o ya existentes) de manera muy simple,
indicando el recorrido de la función y el número de
puntos que se quieren emplear para hacer la gráfica.
Por ejemplo, para dibujar la función coseno (cos)
entre −2π y pi, utilizando 50 puntos, podemos
utilizar la sintaxis:
x=[-pi:0.1:2*pi];
plot(x,sin(x),"+-b",x,f2(x),"o--r",x,f3(x),"*-.c");
set(gca, "xlim",[-pi,2*pi]);
legend ({"f_1", "f_2", "f_3"}, "location", "northeast");
Nótese que a continuación de cada par x, f(x) se
incluyen las propiedades de esa función; en este
caso hemos usado la versión abreviada del estilo de
linea, pero podríamos usar la versión completa e ir
especificando propiedades (markerSize,
markerEdgeColor, lineWidth, …) distintas para cada
gráfica.
plot(x,sin(x),"+-b")
hold on
plot(x,f2(x),"o--r")
plot(x,f3(x),"*-.c")
hold off
set(gca, "xlim",[-pi,2*pi])
legend ({"f_1", "f_2", "f_3"}, "location", "northeast");
Pueden combinarse también varias gráficas en la
misma figura utilizando fplot() en lugar de plot().
Borrado de un gráfico
La función clf borra el gráfico actual, dejando la
ventana de gráficos en blanco.
Guardar gráficos
Una vez que hemos generado un gráfico, podemos
guardarlo en un archivo png, jpg, pdf o eps
(postscript) entre otros formatos, mediante la
sintaxis:
Gráficos 3D
Matlab/Octave ofrecen también la posibilidad de
dibujar superficies 3D. Supongamos que queremos
dibujar la función:
2 2
f (x, y) = x − y , x ∈ [−2, 2], y ∈ [−2, 2]
>> x = [-2:0.1:2];
y = x;
>> [X Y] = meshgrid(x,y);
esta malla:
>> surf(X, Y, Z)
>> contourf(X, Y, Z)
Se puede consultar la ayuda de Matlab (o cualquiera
de los numerosos tutoriales que hay en linea) para
ver las opciones existentes para modificar los
gráficos 3D: modificaciones en los ejes, colores,
orientación, punto de vista, …
9. Manejo de datos en Matlab:
Estructuras, Matrices de celdas y
Tablas
Estructuras
Estructuras
Estructuras(((Struct
Struct))
Struct
Struct )
Vectores
Vectores
Vectoresyyymatrices
matrices
matricesde
de
deceldas
celdas
celdas(((cells
cells
cells arrays))
cells arrays
arrays
arrays )
Creación
Creación
Creaciónde
de
deuna
una
unamatriz
matriz
matrizde
de
deceldas
celdas
celdas
Añadir
Añadir
Añadirnuevos
nuevos
nuevostérminos
términos
términosaaauna
una
unamatriz
matriz
matrizde
de
deceldas
celdas
celdas
Conversión
Conversión
Conversiónde
de
dematrices
matrices
matricesde
de
deceldas
celdas
celdasen
en
enmatrices
matrices
matricesooovectores
vectores
vectoresnuméricos
numéricos
numéricosooo
de
de
detexto.
texto.
texto.
Construcción
Construcción
Construcciónde
de
deuna
una
unamatriz
matriz
matrizde
de
deceldas
celdas
celdasvacía
vacía
vacía
Tablas
Tablas
Tablas
Estructuras (Struct)
Una estructura en matlab es una variable que agrupa
varios contenedores de datos llamados campos.
Cada campo puede contener cualquier tipo de datos
(números, cadenas de texto, vectores, matrices …), y
puede tener cualquier dimensión. Por ejemplo, si la
información que se recoge para cada alumno de la
universidad está formada por su nombre, apellidos,
dni, año de nacimiento y cursos en que está
matriculado, dicha información podría almacenarse
en una estructura que llamaremos alumno definida
del siguiente modo:
>> alumno.nombre="María";
alumno.apellido="Rodríguez";
alumno.DNI=12345678;
alumno.anioNac=2000;
alumno.cursosMatriculado=[1 2 3];
alumno
alumno =
nombre = María
apellido = Rodríguez
DNI = 12345678
anioNac = 2000
cursosMatriculado =
1 2 3
alumno =
nombre = María
apellido = Rodríguez
DNI = 12345678
anionac = 2000
cursosMatriculado =
1 2 3
Nótese que para utilizar esta sintaxis los nombres de
los campos deben ir entrecomillados; a continuación
de cada campo se introduce su valor, que sólo se
entrecomilla si es de tipo carácter.
>> alumno(2)=struct("nombre","Pedro","apellido","González","DNI",87654321,"anionac",1999,
alumno
alumno =
nombre
apellido
DNI
anionac
cursosMatriculado
>> alumno.nombre
ans = María
ans = Pedro
>> alumno.apellido
ans = Rodríguez
ans = González
>> [alumno.nombre]
ans =
"María" "Pedro"
ans = Rodríguez
>> alumno(2).DNI
ans = 87654321
nombre altura
Las cuatro montañas más altas del planeta
Everest 8848
K2 8611
Kanchenjunga 8586
Llhotse 8516
Columns 1 through 4
>> mountains'
ans =
{["Everest" ]} {[8848]}
{["K2" ]} {[8611]}
{["Kanchenjunga"]} {[8586]}
{["Llhotse" ]} {[8516]}
>> mountains{1,2}
ans = K2
>> mountains(1,2)
ans =
{["K2"]}
>> mountains(1,:)
ans =
Columns 1 through 4
>> mountains{1,:}
ans =
"Everest"
ans =
"K2"
ans =
"Kanchenjunga"
ans =
"Llhotse"
mountains =
ans =
ans =
>> A=cell(3)
A =
A =
Tablas
En matlab una tabla es una matriz especial,
caracterizada porque sus columnas tienen nombre, y
cada columna puede ser de un tipo distinto (string o
numérico). Los datos de alturas de montañas que
vimos en la sección anterior también podrían
codificarse en matlab como una tabla. En esta
sección utilizaremos como ejemplo los siguientes
datos, referidos al año 2016 en Canarias:
canarias =
7×5 table
>> canarias.isla
ans =
Columns 1 through 5
Columns 6 through 7
10. Lectura de datos desde archivos
.csv
Archivos
Archivos
Archivoscsv
csv
csv
Lectura
Lectura
Lecturade
de
dearchivos
archivos
archivoscsv
csv
csvcon
con
concsvread
csvread
csvread
csvread
Tratamiento
Tratamiento
Tratamientode
de
delos
los
losvalores
valores
valoresperdidos
perdidos
perdidos
Lectura
Lectura
Lecturade
de
dearchivos
archivos
archivoscsv
csv
csvcon
con
conreadtable
readtable
readtable
readtable
Archivos csv
Con frecuencia deberemos “cargar” datos
almacenados en archivos externos para utilizarlos en
cálculos o programas realizados en Matlab/Octave.
En la sección “Descargas” de la web de la asignatura
se encuentran accesibles una colección de archivos
en formato .csv con datos de diversas variables
medidas durante una campaña oceanográfica. El
formato .csv (“comma separated values”) es un
formato de texto estándar para el intercambio de
datos. Cada fila de un archivo .csv corresponde a
los valores de distintas variables; dichos valores se
encuentran separados por comas; el símbolo del
separador decimal es el punto; y las variables tipo
texto se recogen entre comillas (dobles o simples).
>> T=csvread("datos/temperatura.csv");
S=csvread("datos/salinidad.csv");
lon=csvread("datos/longitud.csv");
lat=csvread("datos/latitud.csv");
z=csvread("datos/depth.csv");
>> size(T)
ans =
100 109
>> lon(15)
ans = -38.484
y en la latitud:
>> lat(15)
ans = 25.154
>> zt=[z(:,15),T(:,15)]
zt =
2.9000 23.2790
3.9000 23.2770
5.9000 23.2750
7.9000 23.2770
9.9000 23.2780
11.9000 23.2780
13.9000 23.2780
15.9000 23.2760
17.9000 23.2710
19.9000 23.2560
21.9000 23.2230
23.9000 23.2060
25.9000 23.2070
28.0000 23.2070
29.9000 23.2060
31.9000 23.2050
33.9000 23.2030
35.9000 23.2010
37.9000 23.1990
39.9000 23.1960
41.9000 23.1910
43.9000 23.1890
45.9000 23.1890
47.9000 23.1800
49.9000 23.1750
51.9000 23.1720
53.9000 23.1700
55.9000 23.1610
57.9000 23.1540
59.9000 23.1420
61.9000 23.1290
63.9000 23.1080
65.9000 23.0910
67.9000 23.0880
69.9000 23.0800
71.9000 23.0550
73.9000 23.0460
75.9000 23.0430
77.9000 23.0410
79.9000 23.0250
81.9000 23.0000
83.9000 22.9760
85.9000 22.9530
87.9000 22.9260
89.9000 22.9220
91.9000 22.9210
93.9000 22.9110
95.9000 22.9080
97.9000 22.9070
99.9000 22.9040
101.9000 22.8890
103.9000 22.8670
105.9000 22.7850
107.9000 22.7120
109.9000 22.6510
111.9000 22.5950
113.9000 22.5590
115.9000 22.5540
117.9000 22.5530
119.9000 22.5510
121.9000 22.5430
123.9000 22.5420
125.9000 22.5290
127.9000 22.4780
129.9000 22.3700
131.9000 22.3190
133.9000 22.2660
135.9000 22.1650
137.9000 22.0760
139.9000 22.0260
141.9000 21.9720
143.9000 21.8850
146.0000 21.8320
148.0000 21.7270
149.9000 21.4130
151.9000 21.1790
153.9000 20.9950
155.9000 20.9170
157.9000 20.7930
159.9000 20.7730
161.9000 20.7440
163.9000 20.6220
165.9000 20.4420
167.9000 20.2770
169.9000 20.4070
172.0000 20.2500
NaN NaN
NaN NaN
NaN NaN
NaN NaN
NaN NaN
NaN NaN
NaN NaN
NaN NaN
NaN NaN
NaN NaN
NaN NaN
NaN NaN
NaN NaN
NaN NaN
>> plot(T(:,15),-z(:,15))
xlabel("Temperatura")
ylabel("Profundidad")
En esta gráfica podemos apreciar claramente que a
medida que aumenta la profundidad disminuye la
temperatura.
>> geolimits([25,28],[-40,-10])
Observamos, pues, que los puntos de muestreo se
encuentran al este y ligeramente al sur de las islas
Canarias.
>> mean(T(:,15))
ans = NaN
>> sum(T(:,15))
ans = NaN
>> nanmean(T(:,15))
ans =
22.5908
>> nansum(T(:,15))
ans =
1.9428e+03
>> isnan(v)
ans =
0 0 0 1 0 0 1
>> sum(isnan(v))
ans = 2
>> sum(~isnan(v))
ans = 5
>> v(~isnan(v))
ans =
1 2 3 4 5
>> sum(isnan(T(:,15)))
ans = 14
>> sum(~isnan(T(:,15)))
ans = 86
media = 22.591
>> file=fopen("datos/time.csv")
time=csvread(file);
>> fh=readtable("datos/time.csv");
>> FechaHora(1:10)
ans =
2013-02-18 12:28:44
2013-02-18 14:34:01
2013-02-18 16:59:21
2013-02-18 19:25:21
2013-02-18 21:54:55
2013-02-19 00:18:42
2013-02-19 02:23:02
2013-02-19 04:27:01
2013-02-19 06:36:58
2013-02-19 08:43:33
>> FechaHora(15)
ans =
2013-02-19 19:34:56