0% encontró este documento útil (0 votos)
92 vistas32 páginas

ST OCE Matlab 03 2012

Este documento presenta una introducción al uso del lenguaje de programación Matlab. Explica conceptos básicos como vectores, matrices, operaciones matemáticas, extracción de datos, funciones útiles y gráficos. El objetivo es entregar herramientas para el análisis de series de tiempo en oceanografía usando Matlab.

Cargado por

tropantumanque
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)
92 vistas32 páginas

ST OCE Matlab 03 2012

Este documento presenta una introducción al uso del lenguaje de programación Matlab. Explica conceptos básicos como vectores, matrices, operaciones matemáticas, extracción de datos, funciones útiles y gráficos. El objetivo es entregar herramientas para el análisis de series de tiempo en oceanografía usando Matlab.

Cargado por

tropantumanque
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

Pontifica Universidad Católica de Valparaíso

Facultad de Recursos Naturales


Escuela de Ciencias del Mar
Av. .Altamirano 1480 - Casilla 1020 – Teléfono 56-32-2274257

Introducción al trabajo con Matlab

Apuntes para el curso


Series de Tiempo en Oceanografía
Dr. Samuel Hormazábal Fritz
Escuela de Ciencias del Mar
Pontificia Universidad Católica de Valaparaíso
Chile
Índice

Introducción
1.- Aspectos básicos
2.- Vectores y matrices: definición y operaciones
3.- Extracción de filas y columnas de una matriz
4.- Algunas funciones útiles
5.- Matrices y vectores que contengan “NaN”
6.- Programación estructurada
7.- Despliegue de datos con formatos
8.- Leer y guardar datos
9.- Gráficos
10.- Interpolación
11.- Funciones de usuario
ANEXO: Toolbox

Página 2
Introducción
Matlab (Matrix Laboratory) es un lenguaje de programación de alto nivel orientado al trabajo con
vectores y matrices. Matlab integra la computación, visualización y programación en un ambiente
fácil de usar, donde los problemas y soluciones son expresados en una notación matemática
familiar.

El uso típico de Matlab incluye aplicaciones en:

1. Computación y matemáticas

2. Desarrollo de algoritmos

3. Modelación y simulación

4. Exploración, visualización y análisis de datos

5. Aplicaciones graficas

Consideraciones:

1. no se declaran las variables, como en Fortran, c, c++


2. Trabaja con doble precisión
3. Distingue mayúsculas y minúsculas

1.- Aspectos básicos

help: El comando “help” acompañado con el nombre de la función o programa, entrega


información de lo que hace la función o el programa. Este es muy útil cuando no se sabe usar una
función en particular.

Ejemplo 1.1

help inv

INV Matrix inverse.


INV(X) is the inverse of the square matrix X.
A warning message is printed if X is badly scaled or
nearly singular.

See also SLASH, PINV, COND, CONDEST, LSQNONNEG, LSCOV.

En la última línea entrega otras funciones relacionadas con la función que se esta interrogando.
Para obtener operadores y caracteres especiales podemos tipiar ‘help ?’

pwd: El comando pwd permite desplegar el directorio (carpeta) en que se esta trabajando.

Ejemplo 1.2

Página 3
pwd
ans =

C:\matlabR12\work

whos: El comando whos entrega una lista de las variables que se están utilizando. En la lista se
indica el nombre, la longitud (dimensión del arreglo) y el tamaño (numero de bytes) de cada
variable.

what: El comando what entrega un listado de los programas que se encuentran en el directorio en
que se esta trabajando.

Ejemplo 1.3

what

M-files in the current directory C:\matlabR12\work

eje1 eje3 newton rm_newton


eje2 f1 ra_ejemplo

ls: El comando ls muestra todo los archivos, carpetas, datos en el directorio de trabajo

Ejemplo 1.4

ls

ESTACIONES.txt eje2.m perfiles.m


Programa01_1997.m eje3.m respaldo1.m

cd: El comando cd (change directory) permite cambiar el directorio de trabajo.

Ejemplo 1.5

cd d:\ocefisica\programas
cd('d:\ocefisica\programas')

addpath: Permite añadir un directorio al entorno del matlab. La carpeta se instalará mientras se
este trabajando.

Ejemplo 1.6

addpath d:\dataproc\rutinas - begin


addpath('d:\dataproc\rutinas ')
path(path,'c:\sam\matlab\plan_crucero');

Página 4
2.- Vectores y matrices: definición y operaciones

• Un vector fila o columna se puede definir de la siguiente forma:

a = [1 2 3 4]
a =
1 2 3 4

a = [1, 2, 3, 4]
a =
1 2 3 4

a = [1 2 3 4]'
a =

1
2
3
4

a = [1; 2; 3; 4]
a =

1
2
3
4

a = 1:10 % Crea un vector correlativo del 1 al 10.


a =

1 2 3 4 5 6 7 8 9 10

a = 1:3:15

a =

1 4 7 10 13

• Un matriz se puede definir de las siguiente forma:

A = [1 2 3 4; 5 4 6 7; 1 4 8 5]

A=

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

Página 5
A = [1 2 3 4
5 4 6 7
1 4 8 5]

A=
1 2 3 4
5 4 6 7
1 4 8 5

Nota: si se coloca (;) al final de la línea, la variable no se despliega en pantalla.

Tabla 2.1. Operadores de vectores y matrices

Operador Nombre

* Multiplicación
/ División
- Resta
+ Suma
./ División elemento a elemento
.* Multiplicación elemento a elemento
^ Exponente
.^ Elevar a exponente elemento a elemento
' Transpuesta.

Ejemplo 2.1
a = [3 4; 4 6];
b = [5 9; 11 26];

c = a*b % Multiplicación de dos matrices


c =

59 131
86 192

d = a.*b % Multiplicación elemento a elemento


d =

15 36
44 156

e = d' % Transpuesta de una matriz.

e =

15 44
36 156

Nota: El símbolo porcentual (%), se utiliza para introducir comentarios.

Página 6
3.- Extracción de filas y columnas de una matriz
Cuando se trabaja con una matriz de datos, por ejemplo un archivo conteniendo varias series de
tiempo, generalmente no toda la matriz de datos se utiliza para el análisis y en estos casos es
preferible extraer solamente las columnas o filas de esa matriz.

Ejemplo 3.1.
mat = magic(6) % El comando magic crea un cuadrado mágico de n x n.

mat =

35 1 6 26 19 24
3 32 7 21 23 25
31 9 2 22 27 20
8 28 33 17 10 15
30 5 34 12 14 16
4 36 29 13 18 11

% Extrae las primeras tres filas de la matriz.


% --------------------------------------------

ej_31 = mat(1:3,:)

ej_31 =

35 1 6 26 19 24
3 32 7 21 23 25
31 9 2 22 27 20

% Extrae las filas 1,3,5 y las columnas 2,4 y 6.


% ----------------------------------------------

ej_32 = mat([1 3 5],[2 4 6])

ej_32 =

1 26 24
9 22 20
5 12 16

% Extrae las columnas 5 y 6.


% --------------------------

ej_33 = mat(:,5:6)

ej_33 =

19 24
23 25
27 20
10 15
14 16
18 11

% Extrae la ultima fila de la matriz.


% -----------------------------------

ej_34 = mat(end,:)

ej_34 =

4 36 29 13 18 11

Página 7
% Elimina las dos primeras filas.
% -------------------------------

mat(1:2,:) = []

mat =

31 9 2 22 27 20
8 28 33 17 10 15
30 5 34 12 14 16
4 36 29 13 18 11

4.- Algunas funciones útiles


Todas las funciones listadas en la tabla 4.1 operan sobre las columnas.

Tabla 4.1. Funciones

Función

n = Length(x) Determina la longitud del vector.


[m, n] = size(x) Determina la dimensión de un vector o matriz.
[y, i] = sort(x) Ordena los elementos de un vector en orden ascendente.
y = sum(x) Calcula la suma de un vector o matriz.
y = mean(x) Calcula la media de una vector o matriz.
y = std(x) Calcula la desviación estándar de un vector o matriz.
y = detrend(x) Remueve la tendencia lineal de un vector
[y, i] = min(x) Encuentra el mínimo valor de una vector.
[y, i] = max(x) Encuentra el máximo valor de una vector.
y = inv(x) Calcula la inversa de una matriz.
y = cov(x) Calcula la matriz de varianza y covarianza.
y = corrcoef(x) Calcula la matriz de correlación.
[vec, L] = eig(x) Calcula los valores y vectores propios.
y = det(x) Calcula el determinante de una matriz.
[U,S,V] = svd(x) Descomposición de valor singular.

Ejemplo 4.1.

M = [0.9501 0.4565 0.9218 0.4103 0.1389 0.0153


0.2311 0.0185 0.7382 0.8936 0.2028 0.7468
0.6068 0.8214 0.1763 0.0579 0.1987 0.4451
0.4860 0.4447 0.4057 0.3529 0.6038 0.9318
0.8913 0.6154 0.9355 0.8132 0.2722 0.4660
0.7621 0.7919 0.9169 0.0099 0.1988 0.4186];

[m n] = size(M) % m = filas, n = columnas.


m =
6
n =
6

ej_41 = sum(M)
ej_41 =

3.9274 3.1484 4.0944 2.5378 1.6152 3.0236

Página 8
ej_42 = max(M)
ej_42 =

0.9501 0.8214 0.9355 0.8936 0.6038 0.9318

ej_43 = [mean(M); std(M)]


ej_43 =

0.6546 0.5247 0.6824 0.4230 0.2692 0.5039


0.2702 0.2949 0.3201 0.3695 0.1693 0.3140

ej_44 = det(M)
ej_44 =

-0.0194

ej_45 = inv(M)
ej_45 =

5.7462 2.7522 3.6516 0.1515 -6.2199 -2.4158


-4.4193 -2.5276 -1.4688 -0.5742 5.3420 1.5641
-1.3927 -0.6079 -2.1061 -0.0858 1.5353 1.8567
-1.6904 -0.7580 -0.6078 -0.3682 3.1260 -0.5998
-3.6448 -4.6099 -4.7071 2.5297 6.1310 0.9062
2.7205 3.3097 2.9938 -0.1942 -5.1305 -0.6549

Identidad = M * ej_45
Identidad =

1.0000 0.0000 0.0000 0.0000 -0.0000 -0.0000


0 1.0000 0 0.0000 -0.0000 0.0000
0.0000 0.0000 1.0000 0.0000 -0.0000 0
0.0000 0.0000 0.0000 1.0000 -0.0000 0.0000
0.0000 0.0000 0.0000 0.0000 1.0000 -0.0000
0.0000 0.0000 0.0000 -0.0000 -0.0000 1.0000

ej_46 = corrcoef(M)
ej_46 =

1.0000 0.6117 0.4697 -0.2521 -0.3074 -0.7891


0.6117 1.0000 -0.1843 -0.7617 -0.0950 -0.3618
0.4697 -0.1843 1.0000 0.3877 -0.3970 -0.4411
-0.2521 -0.7617 0.3877 1.0000 0.0094 0.2283
-0.3074 -0.0950 -0.3970 0.0094 1.0000 0.7553
-0.7891 -0.3618 -0.4411 0.2283 0.7553 1.0000

Tabla 4.2 Matrices predefinidas

MATRICES PREDEFINIDAS

x = magic(n) Crea un cuadrado mágico de n x n.


x = zeros(n,m) Crea una matriz de ceros de dimensión n x m.
x = ones(n,m) Crea una matriz de unos de dimensión n x m.
x = eye(n,m) Crea una matriz identidad de dimensión n x m.
x = rand(n,m) Crea una matriz con números aleatorios de dimensión n x m.
x = randn(n,m) Crea una matriz aleatoria normalmente distribuida.

ej_47 = zeros(3,6)
ej_47 =

Página 9
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0

ej_48 = ones(5) % es lo mismo que ones(5,5)


ej_48 =

1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1

ej_49 = rand(3,8)
ej_49 =

0.8462 0.6721 0.6813 0.5028 0.3046 0.6822 0.1509 0.8600


0.5252 0.8381 0.3795 0.7095 0.1897 0.3028 0.6979 0.8537
0.2026 0.0196 0.8318 0.4289 0.1934 0.5417 0.3784 0.5936

Página 10
Tabla 4.3 Funciones trigonométricas

FUNCIONES TRIGONOMETRICAS

Y = sin(x) Calcula el seno de x


Y = cos(x) Calcula el coseno de x
Y = tan(x) Calcula la tangente de x
Y = asin(x) Calcula el arco seno de x
Y = acos(x) Calcula el arco coseno de x
Y = atan(x) Calcula el arco tangente de x, entre –pi/2 y pi/2
Y = atan2(x) Calcula el arco tangente de x, entre –pi y pi.
Y = sinh(x) Calcula el seno hiperbólico de x
Y = cosh(x) Calcula el coseno hiperbólico de x
Y = tanh(x) Calcula la tangente hiperbólica de x

FUNCIONES MATEMATICAS ELEMENTALES

Y = abs(x) Calcula el valor absoluto de x


Y = angle(x) Calcula el angulo de fase de un vector complejo de x
Y = sqrt(x) Calcula la raiz cuadrada de x
Y = exp(x) Exponencial de x
Y = log10(x) Calcula el logaritmo en base 10.
Y = log2(x) Calcula el logaritomo en base 2
Y = log(x) Calcula el logaritmo en base e.
Y = conj(x) Calcula el conjugado de un vector complejo.
Y = rem(x,y) Entrega el residuo después de una división.

FUNCIONES PARA REDONDEAR VALORES

Y = round(x) Redondea hacia el entero más cercano


Y = ceil(x) Redondea hacia el infinito (+)
Y = fix(x) Redondea hacia el cero.
Y = floor(x) Redondea hacia el infinito (-)

5.- Matrices y vectores que contengan “NaN”


NAN significa “Not-a-Number” y es una representación aritmética que se utiliza para simbolizar
resultados no definidos.

ej_51 = 0/0
Warning: Divide by zero.
ej_51 =

NaN

Ejemplo 5.1
A = [ 2 6 58 9 NaN NaN 5 8 9 4 NaN 25 36
10 NaN 89 9 NaN 5 8 9 4 NaN 25 NaN 88
2 6 58 9 NaN NaN 5 NaN 9 4 NaN 25 25
10 NaN 89 9 NaN 5 8 9 4 NaN 25 NaN 30];

Una forma de verificar si una matriz o vector contiene datos NaN, es a través de la función isnan y
find.
isnan(A): entrega valores de ceros y unos. Los ceros indican que en esa posición
existe un número. Los unos indican que en esas posiciones existen datos NaN.

[I,J] = find(isnan(A)), entrega las posiciones ( fila y columna ) de los datos


nan en la matriz.

Página 11
val_nan = isnan(A)
val_nan =

0 0 0 0 1 1 0 0 0 0 1 0 0
0 1 0 0 1 0 0 0 0 1 0 1 0
0 0 0 0 1 1 0 1 0 0 1 0 0
0 1 0 0 1 0 0 0 0 1 0 1 0

[I, J] = find( isnan(A) );


posiciones = [I J]

posiciones =

2 2
4 2
1 5
2 5
3 5
4 5
1 6
3 6
3 8
2 10
4 10
1 11
3 11
2 12
4 12

Ejemplo 5.2: Eliminación de los NAN


vec = [ 2 5 7 nan nan 2 5 4 nan 25 48 nan 3 4 10];

% Forma 1 de eliminar datos nan.


% ------------------------------

I = find(isnan(vec)==0);
vec = vec(I);

% Forma 2 de eliminar datos nan.


% ------------------------------

vec = vec(find(~isnan(vec)))

Página 12
6.- Programación estructurada
Tabla 6.1.

Operador Nombre
< Menor que
> Mayor que
<= Menor o igual que
>= Mayor o igual que
~= Distinto que
& Y
| O
~ Negación lógica
= = Igual que

Sentencia if:

La sentencia if : se usa para que se ejecute una determinada condición.

if condición
bloque
end

si existe más de una bifurcación o bucle, entonces:


if condición1
bloque 1
elseif condición 2
bloque 2
elseif condición 3
bloque 3
else
bloque 4
end
Sentencia for: repite un conjunto de veces un determinado bloque.
for i=1:n
Bloque
end

for k = 1: n
for j = 1: m
bloque
end
end

for i=1:n
if condicion 1
bloque 1
elseif condicion 2
bloque 2
else
bloque 3
end
end

Sentencia while: repite un conjunto de veces una determinada condición.


while expression
statements
end

Página 13
Sentencia switch: Ejecuta diferentes bloques dependiendo de la condición.

Switch case

case valor 1
bloque 1
case valor 2
bloque 2

............

case valor N
bloque N-1
otherwise
bloque N
end

Ejemplo 6.1:

x = [1 2 4 8 9 6 2];

n = length(x);
suma = 0;
fprintf(' Indice Suma Acumulativa \n')
for i=1:n
suma = suma + x(i);
fprintf(' %2d %2d \n', i, suma)
end

resultado:

Indice Suma Acumulativa


1 1
2 3
3 7
4 15
5 24
6 30

% El mismo programa escrito de otra forma.


% ----------------------------------------
suma_acumulativa = cumsum(x);
indice = [1:n]';
fprintf(' Indice Suma Acumulativa \n')
fprintf(' %2d %2d \n', [indice suma_acumulativa']')

Ejemplo 6.2.
x = [1 2 4 8 9 6 2 1 2 3 1 5 4 4 8 2 5 61 2 0 32 6 0.95 0.3 0.1 14 10] ;
n = length(x);
y = x.*cos(pi*x/180) + 0.45253;
desviacion = std(y);

n_desv_1 = 0; n_desv_2 = 0; n_desv_3 = 0;


vec_1std = []; vec_2std = []; vec_3std = [];
for i = 1:n
if y(i) > desviacion
n_desv_1 = n_desv_1 + 1;
vec_1std = [vec_1std; i y(i)] ;
end
if y(i) > 2*desviacion

Página 14
n_desv_2 = n_desv_2 + 1;
vec_2std = [vec_2std; i y(i)] ;
end
if y(i) > 3*desviacion
n_desv_3 = n_desv_3 + 1;
vec_3std = [vec_3std; i y(i)] ;
end
end
y(vec_1std(:,1)) = nan;
desv = [desviacion, 2*desviacion , 3*desviacion];
valores = [n_desv_1, n_desv_2 , n_desv_3];
ind = [1:3];

fprintf(' ------------------------------------ \n')


fprintf(' Valores Desviacion estandar \n')
fprintf(' ------------------------------------ \n')
fprintf(' %2d %d-std, valor = %8.5f \n', [valores' ind' desv']')
fprintf(' ------------------------------------ \n')

resultado:

--------------------------------------
Valores Desviacion estandar
--------------------------------------
7 1-std, valor = 7.32841
2 2-std, valor = 14.65682
2 3-std, valor = 21.98523
--------------------------------------

El mismo programa escrito de otra forma:

I1std = find( y > desviacion);


I2std = find( y > 2*desviacion);
I3std = find( y > 3*desviacion);

desv = [desviacion, 2*desviacion , 3*desviacion];


valores = [length(I1std), length(I2std) , length(I3std)];
ind = [1:3];
y(I1std) = nan;

fprintf(' ------------------------------------ \n')


fprintf(' Valores Desviacion estandar \n')
fprintf(' ------------------------------------ \n')
fprintf(' %2d %d-std, valor = %8.5f \n', [valores' ind' desv']')
fprintf(' ------------------------------------ \n')

Ejemplo 6.3:
x = [1 2 4 8 9 6 2 1 2 3 1 5 4 4 8 2 5 61 2 0 32 6 0.95 0.3 0.1 14 10] ;
valor = 2;

switch valor

case 1
matriz = [min(y) max(y) mean(x) std(x)];
case 2
matriz = [min(y) max(y) mean(x) std(x)] .^2 ;
case 3
matriz = [cumsum(x)];
otherwise
disp(' El valor no es 1 ,2 o 3')

Página 15
return
end

resultado:

matriz =

0.2048 41.2121 51.2815 156.4770

Ejemplo 6.4:

x = [1 2 4 8 9 6 2 1 2 3 1 5 4 4 8 2 5 61 2 0 32 6 0.95 0.3 0.1 14 10];


y = x.*cos(pi*x/180) + 0.45253;
n = length(x);

i = 0; s = 0; m = 0; a = 0;
str = 'la suma y la media acumulativa a';
while i < fix(n/2)
i = i + 1;
s = s + y(i);
m = s / i;
a = a + i;
fprintf([ str ' i = %2d es = [%7.4f %7.4f] \n'],[i s m])
end

resultado:

la suma y la media acumulativa a i = 1 es = [ 1.4524 1.4524]


la suma y la media acumulativa a i = 2 es = [ 3.9037 1.9518]
la suma y la media acumulativa a i = 3 es = [ 8.3465 2.7822]
la suma y la media acumulativa a i = 4 es = [16.7212 4.1803]
la suma y la media acumulativa a i = 5 es = [26.0629 5.2126]
la suma y la media acumulativa a i = 6 es = [32.4825 5.4138]
la suma y la media acumulativa a i = 7 es = [34.9338 4.9905]
la suma y la media acumulativa a i = 8 es = [36.3862 4.5483]
la suma y la media acumulativa a i = 9 es = [38.8375 4.3153]
la suma y la media acumulativa a i = 10 es = [42.2860 4.2286]
la suma y la media acumulativa a i = 11 es = [43.7383 3.9762]
la suma y la media acumulativa a i = 12 es = [49.1718 4.0977]
la suma y la media acumulativa a i = 13 es = [53.6146 4.1242]

7.- Despliegue de datos con formatos


Se pueden desplegar en pantalla mensajes o números con un determinado formato utilizando las
funciones disp, fprintf.

disp: Imprime texto y datos sin formato.


Uso: disp (texto, vector o matriz). La impresión de texto se coloca entre
apóstrofes.

Ejemplo 7.1: Usando la matriz M del ejemplo de la sección 4


disp(' Salida en pantalla de la matriz M')
disp(' --------------------------------------------------------')
disp(' Col1 Col2 Col3 Col4 Col5 Col6')
disp(' --------------------------------------------------------')
disp(M)

Salida en pantalla de la matriz M


--------------------------------------------------------

Página 16
Col1 Col2 Col3 Col4 Col5 Col6
--------------------------------------------------------
0.9501 0.4565 0.9218 0.4103 0.1389 0.0153
0.2311 0.0185 0.7382 0.8936 0.2028 0.7468
0.6068 0.8214 0.1763 0.0579 0.1987 0.4451
0.4860 0.4447 0.4057 0.3529 0.6038 0.9318
0.8913 0.6154 0.9355 0.8132 0.2722 0.4660
0.7621 0.7919 0.9169 0.0099 0.1988 0.4186

fprintf : Imprime texto, datos con formato. Además almacena datos en un archivo.

Uso: fprintf(formato, texto, vector o matriz)

Ejemplo 7.2:
fprintf(' Salida en pantalla de la matriz M\n')
fprintf(' -----------------------------------------------\n')
fprintf(' Col1 Col2 Col3 Col4 Col5 Col6 \n')
fprintf(' -----------------------------------------------\n')
fprintf(' %6.4f %6.4f %6.4f %6.4f %6.4f %6.4f\n',M')
fprintf(' -----------------------------------------------\n')

Salida en pantalla de la matriz M


-----------------------------------------------
Col1 Col2 Col3 Col4 Col5 Col6
-----------------------------------------------
0.9501 0.4565 0.9218 0.4103 0.1389 0.0153
0.2311 0.0185 0.7382 0.8936 0.2028 0.7468
0.6068 0.8214 0.1763 0.0579 0.1987 0.4451
0.4860 0.4447 0.4057 0.3529 0.6038 0.9318
0.8913 0.6154 0.9355 0.8132 0.2722 0.4660
0.7621 0.7919 0.9169 0.0099 0.1988 0.4186
-----------------------------------------------

Nota: El formato %6.4f, significa que de los 6 espacios que esta ocupando la variable, cuatro
son para los decimales y uno para la parte entera. El operador \n significa que se imprimirá
una línea tras otra, si se omite este operador se imprimirá el resultado en una sola línea.
Existe 4 formatos principales:
%(n)d = salida de números enteros
%(n)s = salida de cadena de caracteres (string)
%(m.n)f = salida con punto flotante.
%(m.n)e = salida exponencial.

Ejemplo 7.3:
fprintf(' El valor de pi es = %9.7f \n',pi)
fprintf(' El valor de pi es = %9.7e \n',pi)
fprintf(' La parte entera de pi es = %d \n',fix(pi))
fprintf(' Salida en pantalla de caracteres = %s \n','caracteres')

El valor de pi es = 3.1415927
El valor de pi es = 3.1415927e+000
La parte entera de pi es = 3
Salida en pantalla de caracteres = caracteres

Ejemplo 7.4:
string = ' valor 1, valor 2, valor 3 es =';
formato = ' %5.3f, %4d, %3.2e ';
operador = '\n';
vector = [7.24556 1256 5.36e-5];
fprintf([string formato operador ],vector(1),vector(2),vector(3))

Página 17
valor 1, valor 2, valor 3 es = 7.246, 1256, 5.36e-005

Nota: si se antepone fprintf('\n') imprimirá una línea en blanco.

Ejemplo 7.5:
fprintf(' %6.4f %6.4f %6.4f %6.4f %6.4f %6.4f\n', ...
M(1,:),M(2,:),M(3,:),M(4,:),M(5,:),M(6,:))

0.9501 0.4565 0.9218 0.4103 0.1389 0.0153


0.2311 0.0185 0.7382 0.8936 0.2028 0.7468
0.6068 0.8214 0.1763 0.0579 0.1987 0.4451
0.4860 0.4447 0.4057 0.3529 0.6038 0.9318
0.8913 0.6154 0.9355 0.8132 0.2722 0.4660
0.7621 0.7919 0.9169 0.0099 0.1988 0.4186

Ejemplo 7.6:

P = [1 5 10 15 30]';
T = [17.23 16.18 15.03 12.85 11.56]';
S = [34.454 34.441 34.353 34.230 34.222]';

ctd = [P T S];

fprintf(' Pres = %2d (db), Temp = %5.3f (ºC), Salt = %6.4f (psu)\n',ctd')

Pres = 1 (db), Temp = 17.230 (ºC), Salt = 34.4540 (psu)


Pres = 5 (db), Temp = 16.180 (ºC), Salt = 34.4410 (psu)
Pres = 10 (db), Temp = 15.030 (ºC), Salt = 34.3530 (psu)
Pres = 15 (db), Temp = 12.850 (ºC), Salt = 34.2300 (psu)
Pres = 30 (db), Temp = 11.560 (ºC), Salt = 34.2220 (psu)

8.- Leer y guardar datos


La función load y save permiten leer y guardar datos, respectivamente. Para leer los datos su
estructura es:

load nombre.extensión
nombre_variable = load(nombre.extension);

donde nombre = nombre del archivo,


extensión = la extensión que tenga el archivo (.dat, .txt, etc.)

La segunda opción el nombre se coloca entre apóstrofes, y los datos los asigna a la variable
nombre_variable.

Nota: El archivo de datos a leer, no debe contener comentarios sin el signo “ %”, además la
matriz debe ser consistente, es decir, no puede faltar ningún dato en una fila o columna.

Ejemplo 8.1:

load estacion25.dat
dat = load('estacion25.dat')

El ejemplo anterior se ocupa cuando los datos están en el directorio de trabajo. Si los datos están
en otro directorio, entonces su estructura es:

load c:\carpeta1\carpeta2\........\nombre.extension.

Página 18
load d:\carpeta1\carpeta2\........\nombre.extension.

dat = load('c:\carpeta1\carpeta2\........\nombre.extension')
dat = load('d:\carpeta1\carpeta2\........\nombre.extension')

Ejemplo 8.2:

load d:\ocefisica\datos\est_valparaíso.dat
dat = load('d:\ocefisica\datos\est_valparaíso.dat')

Por otro lado, para guardar datos su estructura es:

save nombre variable1 variable2 … variable(n)


save nombre.extension variables -ascii
save nombre.extension variables -ascii -double

save('nombre','variable 1','variable 2')


save('nombre.extension','variable 1','variable 2','-ASCII')

La primera opción, los datos se guardan en formato binario.


La segunda opción, los datos se guardan en formato ASCII con 8 dígitos.
La tercera opción, los datos se guardan en formato ASCII con 16 dígitos.

Nota: No es aconsejable almacenar más de una variable en formato ASCII.

También se pueden almacenar datos usando la función fprintf.


fid = fopen(nombre_archivo.extension, 'w');
fprintf( fid, ' Formato \n', matriz, vector o texto);
fclose(fid);
donde fid es un identificador del fichero
la opción 'w' significa 'write'
formato (ver sección 6)
fclose(fid), cierra el fichero.

Ejemplo 8.3:

P = [1 5 10 15 30]';
T = [17.23 16.18 15.03 12.85 11.56]';
S = [34.454 34.441 34.353 34.230 34.222]';

ctd = [P T S];

fid = fopen('datos_ctd.txt','w');
fprintf(fid,' %2d %5.3f %6.4f\n',ctd');
fclose(fid);

genera el archivo de datos con el nombre datos_ctd.txt

1 17.230 34.4540
5 16.180 34.4410
10 15.030 34.3530
15 12.850 34.2300
30 11.560 34.2220

Ejemplo 8.4:
index = [1:10]';
nombre = 'ejemplo_save.mat';
var_1 = rand(5);
var_2 = sin(2*pi/425 * index) + 3*sin(2*pi/425 * index);

Página 19
save(nombre,'var_1','var_2')
save(nombre,'var_2','-ascii')

Ejemplo 8.5:

index = [1:10]';
nombre = 'ejemplo_save.mat';
var_1 = rand(5);
var_2 = sin(2*pi/425 * index) + 3*sin(2*pi/425 * index);
save ejemplo_save.mat var_1 var_2
save ejemplo_save.dat var_2 -ascii

Ejemplo 8.6: Para leer los datos en archivo binario, se puede hacer de dos formas:

load ejemplo_save.mat
whos

Name Size Bytes Class

var_1 5x5 200 double array


var_2 10x1 80 double array

Grand total is 35 elements using 280 bytes

dat_1 = var_1 % Cambia el nombre de la variable.


dat_2 = var_2

% lee los datos y los almacena en una estructura.


% -------------------------------------------------

var = load('ejemplo_save.mat');
var

var =

var_1: [5x5 double]


var_2: [10x1 double]
para recuperar las variables almacenadas:

dat_1 = var.var_1
dat_2 = var.var_2

dat_1 =

0.3193 0.1998 0.1171 0.5979 0.0653


0.3749 0.0495 0.7699 0.9492 0.2343
0.8678 0.5667 0.3751 0.2888 0.9331
0.3722 0.1219 0.8234 0.8888 0.0631
0.0737 0.5221 0.0466 0.1016 0.2642

dat_2 =

0.0591
0.1183
0.1773
0.2364
0.2954
0.3544
0.4132
0.4720
0.5307
0.5892

Ejemplo 8.7 Lectura de datos ASCII con formato


Página 20
fid = fopen(nm_file,'rt'); % Apertura del archivo

str = fgetl(fid); %Lee una línea completa

aa(1,1) =[sscanf(str(45:45+4),'%g',1)]; % extrae la información


aa(1,2)=[sscanf(str(50:50+4),'%g',1)]; % extrae la información

str = fgetl(fid); %lee la línea completa


n = length(str);
a = [sscanf(str(17:n),'%g',12)]'; % extrae la información

fclose(fid); cierra el archivo

Ejemplo 8.8 Lectura de datos ascii con formato en lenguaje estructurado

file = 'g:\sam\TXT\cursos\ADG_513421\clase_01\ctd_test_01.cnv';

fid = fopen(file,'rt'); % Apertura del archivo

% Lee los datos hasta el fin del archivo

i1=1;
while fid
str = fgetl(fid); %lee la linea completa
if ~isstr(str), break, end %termina cuando llega al fin de archivo
i1 = i1+1;
P(i1,:) =[str2num(str)];
end
fclose(fid);

Ejemplo 8.9 Lectura de archivos excel

%[NUMERIC,TXT,RAW]=XLSREAD(FILE,SHEET,RANGE)

[dat,tex,raw]=xlsread('datos_exel_01.xls');

[dat,tex,raw]=xlsread('datos_exel_01.xls','a12:x42');

s = xlsread('datos_exel_01.xls','a12:x42');

s = xlsread('datos_exel_02.xls','a12:x42');

Página 21
Página 22
9.- Gráficos

Función Descripción
plot Grafico en dos dimensiones
bar Grafico de barras
hist Grafica histogramas
feather Grafica diagrama de vectores
loglog Grafica con escalas logarítmicas en ambos ejes
semilogx Grafica en escala logarítmica en el eje x
semilogy Grafica en escala logarítmica en el eje y
polar Grafica en coordenadas polares.
contour Grafica contornos o isolineas.
stem Grafica datos discretos
quiver Muestra vectores 2D especificados por las componentes (u,v)
quiver3 Muestra vectores 3D especificados por las componentes (u,v,w)

Uso del PLOT: la función plot sirve para graficar figuras en escala lineal en ambos ejes. Su
es la siguiente estructura:
h = plot(x,y)
h = plot(x1,y1,..,xn,ym)
h = plot(x,y,'propiedad1',valor1,...,'propiedad(n)','valor(n)')

donde x e y son las variables en los ejes X e Y. La propiedad puede ser, tipo de línea, tipo de
marca, tamaño de la línea, marca o su color, etc.

Las líneas y marcas pueden ser:

Continua = -
Guiones = --
Punteada = :
Estrellas = *
Cruz = x
Guiones y puntos = -.

Los colores pueden ser :

b = azul
r = rojo
k = negro
g = verde
m = magenta
y = amarillo
c = turquesa
w = blanco

propiedad = 'linewidth',n
propiedad = 'markersize',n

linewidth: es la ancho de la línea y n es su valor. A mayor valor de n, mayor es


el ancho de la línea.

Página 23
Markersize: es el tamaño de la marca. A mayor valor de n, mayor es el tamaño de
la marca.

Nota. Para más información del estilo de las marcas use el help plot

figure: Abre una ventana donde graficaran las figuras.

H = figure(valor)
H = figure('propiedad',valor, ..., 'propiedad(n),valor(n))
figure numero_figura

subplot: Permite graficar varias figuras en una ventana.

h = subplot(m,n,index)
subplot m n index

donde m = filas
n = columans
index = numero correlativo del gráfico.

Total de figuras es m x n

Ejemplo 9.1:

subplot 331, significa 9 figuras agrupadas en 3 filas y 3 columnas

Ejemplo 9.2 – Figura 1.


t = 1:200;
xt = sin(pi/20*t)+ 2*cos(2*pi/5*t) + 2*rand(1,t(end));

subplot 221
plot(t,xt,'k')

subplot 222
plot(t,xt,'-r','linewidth',3)

subplot 223
plot(t,xt,'x')

subplot 224
plot(t,xt,'.','markersize',15)

Página 24
Al gráfico trazado se puede agregar rótulos en el eje x como en el eje y, y titulo. Esto se hace de la
siguiente forma:

h = xlabel('texto','fontsize', n); % agrega texto en el eje x.


h = ylabel('texto','fontsize', n); % agrega texto en el eje y,
h = title('texto','fontsize', n); % agrega un titulo

donde fontsize regula el tamaño del texto indicado por el número n.

Además en el gráfico se pueden colocar tanto texto como una leyenda. Esto se hace:
h = text(x,y,'texto');
h = text(x,y,'texto','fontsize',n,'Color','indicar color');
h = legend('texto 1','texto' , 'texto',....., 'texto n');

donde x e y son las posiciones en el eje-x y en el eje-y donde se colocará el texto.

axis : Mofica los limites del gráfico.

axis([ x_lim_inf x_lim_sup y_lim_inf y_lim_sup ])


axis square
axis equal

Ejemplo 9.3 – usando los datos del ejemplo 9.2


subplot 221
plot(t,xt,'k')
ylabel('eje-y','fontsize',13)

Página 25
title('Figura del subplot 221','fontsize',13)
text(10,5, ' a )', 'fontsize',13)

subplot 222
plot(t,xt,'-r','linewidth',3)
title('Figura del subplot 222','fontsize',13)
text(10,5, ' b )', 'fontsize',13)

subplot 223
plot(t,xt,'x')
xlabel('eje-x','fontsize',13)
ylabel('eje-y','fontsize',13)
title('Figura del subplot 223','fontsize',13)
text(10,5, ' c )', 'fontsize',13)

subplot 224
plot(t,xt,'.','markersize',15)
xlabel('eje-x','fontsize',13)
title('Figura del subplot 224','fontsize',13)
text(10,5, ' d )', 'fontsize',13)

set: Permite cambiar las propiedades a los objetos (del gráfico).

set(gca, 'propiedad1 ', valor1,........, 'propiedad(n) ', valor(n))


set(handle, 'propiedad1 ', valor1, ........, 'propiedad(n) ', valor(n))

los más utilizados son:

set(gca, 'xlim' , [lim_inferior lim_superior], ...


'ylim' , [lim_inferior lim_superior], ...
'xtick', [vector de valores],...
'ytick', [vector de valores],...

Página 26
'xticklabel', [vector de caracteres en columna],...
'yticklabel', [vector de caracteres],...
'xgrid', ['on' ó 'off'],...
'ygrid', ['on' ó 'off'],...
'fontsize', [ ejemplo 9],...
'tickdir', ['in' ó 'out'],...
'ticklength', [valor1 valor2],...
'xcolor', ['k', 'w', 'b', etc],...
'ycolor', ['k', 'w', 'b', etc],...
'position', [borde, base, ancho, altura],....
'xAxisLocation', ['top' ó 'bottom'],...
'yAxisLocation', ['left' ó 'right'],...
'xminortick', ['on' ó 'off'],...
'yminortick', ['on' ó 'off'],...
'box', ['on' ó 'off')

'on' : activa la propiedad.


'off' : desactiva la propiedad.

get: Obtiene los valores asociado a cada propiedad.


valor = get(handle, 'propiedad')

Ejemplo 9.4 – Modificando las propiedades del grafico.


figure('color','w')
subplot 311
plot(t,xt)
set(gca,'xlim',[1 240], ...
'xtick',[1 30:30:240],...
'ylim',[-3 5],...
'ytick',[-3:1:5],...
'tickdir','out',...
'ticklength',[0.009 0.025],...
'fontsize',8,....
'ygrid','on',...
'xcolor','b',...
'ycolor','r')

subplot 313
plot(t,xt)
set(gca,'xlim',[1 240], 'xtick',[1 30:30:240],...
'ylim',[-3 5], 'ytick',[-3:1:5],...
'fontsize',8, 'xgrid','on',...
'xAxisLocation','top', 'yAxisLocation','right',...
'tickdir','out','box','off')

Página 27
Ejemplo 9.5 – Grafico de vectores
%Produce el campo de direcciones asociados al campo vectorial u=-y, v=x
[x,y]=meshgrid(-2:0.1:2);
u=-y;v=x;
subplot 221; quiver(x,y,u,v)

%Para obtener el campo de direcciones


[x,y]=meshgrid(-2:0.5:2);
u=-y;v=x;
subplot 222; quiver(x,y,u,v,0)

%para obtener el campo de direcciones reescalado


[x,y]=meshgrid(-2:0.5:2);
u=-y;v=x;
subplot 223; quiver(x,y,u,v)

[x,y] = meshgrid(-2:.2:2,-1:.15:1);
z = x.*exp(-x.^2 - y.^2);
[px,py] = gradient(z,.2,.15);
subplot 224; contour(x,y,z), hold on
quiver(x,y,px,py),hold off, axis image

Página 28
10.- Interpolación
La interpolación consiste en hallar un dato dentro de un intervalo en el que conocemos los valores en los
extremos. Existen varios comandos para esto.

Ejemplo 10.1 Interpolación de los NAN

dm = find(isnan(vec) == 1); % posiciones de los datos malos


db = find(isnan(vec) == 0); % posiciones de los datos buenos
yb = vec(db); % corresponden a los datos buenos
y1 = interp1(db,yb,dm,'linear'); % corresponden a los datos interpolados
vec(dm) = y1 % datos interpolados ingresados a la vector
original

Ejemplo 10.2 Mínimos cuadrados, interpolación lineal y cúbica


% Serie de datos
x = [ 0 .1 .2 .3 .4 .5 .6 .7 .8 .9 1 ];
y = [ 0.09 .12 .24 .27 .4 .45 .61 .67 .71 .63 .59];

% Interpolación por Minimos cuadrados


n = 5; %Aproximación orden 5
f = linspace(0, 1, 100); % Formamos una serie de puntos para graficar.
p = polyfit(x,y,n) % Crea los elementos del polinomio que hará la interpolación.
% El polinomio es del tipo ax5 + bx4 + cx3 + dx2 + ex + f = 0
z1 = polyval(p,f); % Evaluación polinomial.
plot(x,y,'*',f,z,':') % Hacemos la gráfica de la interpolación

% Interpolación lineal
z2=interp1(x,y,f);
plot(x,y,'*',f,z2);

% Interpolación cúbica
z3=spline(x,y,f);
plot(x,y,'*',f,z3);

11.- Funciones de usuario.

Estructura:
function [valores de retorno] = nombre_funcion ( valores de entrada )
function nombre_funcion ( valores de entrada )
function nombre_funcion

Los valores tanto de entrada como de retorno deben estar separados por comas. La función se
almacena con extensión (.m).

Estructura de una función

function [v1,..,vn] = nombre_funcion (x1,…,xn)

% comentarios

nargin % opcional

Sentencias

Return

Página 29
Uso del nargin: El nargin es útil cuando se trabaja con valores opcionales.

Ejemplo 11.1
function str = caracteres(mes,opt)

% Toma la opcion por defecto


% ---------------------------

if nargin == 1
opt = 'reducido'
end

if opt == 'reducido'

meses = ['E';'F';'M';'A';'M';'J';'J';'A';'S';'O';'N';'D'];
str = meses(mes);

elseif opt == 'completo'

meses = ['Ene';'Fre';'Mar';'Abr';'May';'Jun';'Jul';
'Ago';'Sep';'Oct';'Nov';'Dic'];
str = meses(mes,:);

end

Uso de la funcion:

clear all, clc

numero_mes = 6; % Mes de Junio


opt = 'completo';
valor_mes = caracteres(numero_mes,opt)

Ejemplo 11.2:
function [media, desv, r] = estadistica_basica(u, v)

% ----------------------------------------------------------
% calcula la media, desviación estandar y el coeficiente de
% correlacion para los vectores u y v. Se asume que los
% vectores no tienen datos NAN.
%
% media = [media_u media_v];
% desv = [desv_std_u desv_std_u];
% r = coeficiente de correlacion lineal.
% ----------------------------------------------------------

u = u(:);
v = v(:);

mat = [u v];

media = mean(mat);
covar = cov(mat);

stdu = covar(1);
stdv = covar(4);
covm = covar(3);

desv = [stdu stdv];

r = covm/sqrt(stdu*stdv);

Página 30
return

Uso de la function:

clear all, clc

x = [1 2 4 8 9 6 2 1 2 3 1 5 4 4 8 2 5 61 2 0 32 6 0.95 0.3 0.1 14 10];


y = x.*cos(pi*x/180) + 0.45253;

[media, desv, r] = estadistica_basica(x, y)

media =
7.1611 6.2334

desv =
156.4770 53.7056

r =
0.9450

Ejemplo 11.3:
function grafica(y)
% -----------------------------------------------
% Grafica el vector y, utilizando una linea roja
% -----------------------------------------------
plot(y,'r')

Uso de la function:

clear all, clc

t = 0:0.1:10;
y = 2*sin(t);
grafica(y)

Página 31
ANEXO: Toolbox útiles
Análisis de datos y transformada de Fourier : datafun
Análisis estadístico : stats
Análisis de señales : signal
Análisis de wavelet : wavelet
Funciones especiales : specfun
Funciones matriciales : matfun, elmat , sparfun
Gráficos : graph2d , graph3d,
specgraph, graphics
Interpolación y polinomios : polyfun
Interpolación spline : splines
Integrales y ecuaciones diferenciales : funfun
Información general : general
Manejo de string : strfun
Manejo de archivos : iofun
Mapas : map, mapproj
Modelos : simulink

help stats

Statistics Toolbox

Distributions
Parameter estimation
betafit - Beta parameter estimation
binofit - Binomial parameter estimation
expfit - Exponential parameter estimation
gamfit - Gamma parameter estimation
mle - Maximum likelihood estimation (MLE)
normfit - Normal parameter estimation
poissfit - Poisson parameter estimation
raylfit - Rayleigh parameter estimation
unifit - Uniform parameter estimation
weibfit - Weibull parameter estimation

Probability density functions (pdf)


betapdf - Beta density
binopdf - Binomial density
chi2pdf - Chi square density

Hypothesis Tests.
ranksum - Wilcoxon rank sum test (independent samples)
signrank - Wilcoxon sign rank test (paired samples)
signtest - Sign test (paired samples)
ztest - Z test
ttest - One sample t test
ttest2 - Two sample t test

Distribution Testing
jbtest - Jarque-Bera test of normality
kstest - Kolmogorov-Smirnov test for one sample
kstest2 - Kolmogorov-Smirnov test for two samples
lillietest - Lilliefors test of normality

Página 32

También podría gustarte