Subido por sebastian duran

ST OCE matlab 03 2012

Anuncio
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
eje2
eje3
f1
newton
ra_ejemplo
rm_newton
ls: El comando ls muestra todo los archivos, carpetas, datos en el directorio de trabajo
Ejemplo 1.4
ls
ESTACIONES.txt
Programa01_1997.m
eje2.m
eje3.m
perfiles.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
a =
1
% Crea un vector correlativo del 1 al 10.
2
3
4
5
4
7
10
13
6
7
8
9
10
a = 1:3:15
a =
1
•
Un matriz se puede definir de las siguiente forma:
A = [1 2 3 4; 5 4 6 7; 1 4 8 5]
A=
1
5
1
2
4
4
3
6
8
4
7
5
Página 5
A = [1 2 3 4
5 4 6 7
1 4 8 5]
A=
1
5
1
2
4
4
3
6
8
4
7
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
c =
59
86
% Multiplicación de dos matrices
131
192
d = a.*b
d =
15
44
% Multiplicación elemento a elemento
36
156
e = d'
% Transpuesta de una matriz.
e =
15
36
44
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
3
31
8
30
4
1
32
9
28
5
36
6
7
2
33
34
29
26
21
22
17
12
13
19
23
27
10
14
18
24
25
20
15
16
11
% Extrae las primeras tres filas de la matriz.
% -------------------------------------------ej_31 = mat(1:3,:)
ej_31 =
35
3
31
1
32
9
6
7
2
26
21
22
19
23
27
24
25
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
9
5
26
22
12
24
20
16
% Extrae las columnas 5 y 6.
% -------------------------ej_33 = mat(:,5:6)
ej_33 =
19
23
27
10
14
18
24
25
20
15
16
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
8
30
4
9
28
5
36
2
33
34
29
22
17
12
13
27
10
14
18
20
15
16
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)
[m, n] = size(x)
[y, i] = sort(x)
y = sum(x)
y = mean(x)
y = std(x)
y = detrend(x)
[y, i] = min(x)
[y, i] = max(x)
y = inv(x)
y = cov(x)
y = corrcoef(x)
[vec, L] = eig(x)
y = det(x)
[U,S,V] = svd(x)
Determina la longitud del vector.
Determina la dimensión de un vector o matriz.
Ordena los elementos de un vector en orden ascendente.
Calcula la suma de un vector o matriz.
Calcula la media de una vector o matriz.
Calcula la desviación estándar de un vector o matriz.
Remueve la tendencia lineal de un vector
Encuentra el mínimo valor de una vector.
Encuentra el máximo valor de una vector.
Calcula la inversa de una matriz.
Calcula la matriz de varianza y covarianza.
Calcula la matriz de correlación.
Calcula los valores y vectores propios.
Calcula el determinante de una matriz.
Descomposición de valor singular.
Ejemplo 4.1.
M = [0.9501
0.2311
0.6068
0.4860
0.8913
0.7621
0.4565
0.0185
0.8214
0.4447
0.6154
0.7919
0.9218
0.7382
0.1763
0.4057
0.9355
0.9169
[m n] = size(M)
m =
6
n =
6
0.4103
0.8936
0.0579
0.3529
0.8132
0.0099
0.1389
0.2028
0.1987
0.6038
0.2722
0.1988
0.0153
0.7468
0.4451
0.9318
0.4660
0.4186];
% m = filas, n = columnas.
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
0.6824
0.3201
0.4230
0.3695
0.2692
0.1693
0.5039
0.3140
3.6516
-1.4688
-2.1061
-0.6078
-4.7071
2.9938
0.1515
-0.5742
-0.0858
-0.3682
2.5297
-0.1942
-6.2199
5.3420
1.5353
3.1260
6.1310
-5.1305
-2.4158
1.5641
1.8567
-0.5998
0.9062
-0.6549
0.0000
0
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
-0.0000
-0.0000
0.0000
0
0.0000
-0.0000
1.0000
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
ej_43 = [mean(M); std(M)]
ej_43 =
0.6546
0.2702
0.5247
0.2949
ej_44 = det(M)
ej_44 =
-0.0194
ej_45 = inv(M)
ej_45 =
5.7462
-4.4193
-1.3927
-1.6904
-3.6448
2.7205
2.7522
-2.5276
-0.6079
-0.7580
-4.6099
3.3097
Identidad = M * ej_45
Identidad =
1.0000
0
0.0000
0.0000
0.0000
0.0000
0.0000
1.0000
0.0000
0.0000
0.0000
0.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
Tabla 4.2 Matrices predefinidas
MATRICES PREDEFINIDAS
x
x
x
x
x
x
=
=
=
=
=
=
magic(n)
zeros(n,m)
ones(n,m)
eye(n,m)
rand(n,m)
randn(n,m)
Crea
Crea
Crea
Crea
Crea
Crea
un cuadrado mágico de n x n.
una matriz de ceros de dimensión n x m.
una matriz de unos de dimensión n x m.
una matriz identidad de dimensión n x m.
una matriz con números aleatorios de dimensión n x m.
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
ej_48 = ones(5)
ej_48 =
1
1
1
1
1
1
1
1
1
1
0
0
0
% es lo mismo que ones(5,5)
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
Y
Y
Y
Y
Y
Y
Y
Y
Y
=
=
=
=
=
=
=
=
=
=
sin(x)
cos(x)
tan(x)
asin(x)
acos(x)
atan(x)
atan2(x)
sinh(x)
cosh(x)
tanh(x)
Calcula
Calcula
Calcula
Calcula
Calcula
Calcula
Calcula
Calcula
Calcula
Calcula
el
el
la
el
el
el
el
el
el
la
seno de x
coseno de x
tangente de x
arco seno de x
arco coseno de x
arco tangente de x, entre –pi/2 y pi/2
arco tangente de x, entre –pi y pi.
seno hiperbólico de x
coseno hiperbólico de x
tangente hiperbólica de x
FUNCIONES MATEMATICAS ELEMENTALES
Y
Y
Y
Y
Y
Y
Y
Y
Y
=
=
=
=
=
=
=
=
=
abs(x)
angle(x)
sqrt(x)
exp(x)
log10(x)
log2(x)
log(x)
conj(x)
rem(x,y)
Calcula el valor absoluto de x
Calcula el angulo de fase de un vector complejo de x
Calcula la raiz cuadrada de x
Exponencial de x
Calcula el logaritmo en base 10.
Calcula el logaritomo en base 2
Calcula el logaritmo en base e.
Calcula el conjugado de un vector complejo.
Entrega el residuo después de una división.
FUNCIONES PARA REDONDEAR VALORES
Y
Y
Y
Y
=
=
=
=
round(x)
ceil(x)
fix(x)
floor(x)
Redondea
Redondea
Redondea
Redondea
hacia
hacia
hacia
hacia
el
el
el
el
entero más cercano
infinito (+)
cero.
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
10
2
10
6
NaN
6
NaN
58
89
58
89
9
9
9
9
NaN
NaN
NaN
NaN
NaN
5
NaN
5
5
8
5
8
8
9
NaN
9
9
4
9
4
4
NaN
4
NaN
NaN
25
NaN
25
25
NaN
25
NaN
36
88
25
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
0
1
0
1
0
0
0
0
0
0
0
0
1
1
1
1
1
0
1
0
0
0
0
0
0
0
1
0
0
0
0
0
0
1
0
1
1
0
1
0
0
1
0
1
0
0
0
0
[I, J] = find( isnan(A) );
posiciones = [I J]
posiciones =
2
4
1
2
3
4
1
3
3
2
4
1
3
2
4
2
2
5
5
5
5
6
6
8
10
10
11
11
12
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
1
2
3
4
5
6
Suma Acumulativa
1
3
7
15
24
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 +
vec_2std = [vec_2std;
end
if y(i) > 3*desviacion
n_desv_3 = n_desv_3 +
vec_3std = [vec_3std;
end
1;
i y(i)] ;
1;
i y(i)] ;
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('
fprintf('
fprintf('
fprintf('
fprintf('
------------------------------------ \n')
Valores
Desviacion estandar
\n')
------------------------------------ \n')
%2d
%d-std, valor = %8.5f \n', [valores'
------------------------------------ \n')
ind' desv']')
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('
fprintf('
fprintf('
fprintf('
fprintf('
------------------------------------ \n')
Valores
Desviacion estandar
\n')
------------------------------------ \n')
%2d
%d-std, valor = %8.5f \n', [valores'
------------------------------------ \n')
ind' desv']')
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
case 2
matriz
case 3
matriz
otherwise
disp('
= [min(y) max(y) mean(x) std(x)];
= [min(y) max(y) mean(x) std(x)] .^2 ;
= [cumsum(x)];
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
la
la
la
la
la
la
la
la
la
la
la
la
suma
suma
suma
suma
suma
suma
suma
suma
suma
suma
suma
suma
suma
y
y
y
y
y
y
y
y
y
y
y
y
y
la
la
la
la
la
la
la
la
la
la
la
la
la
media
media
media
media
media
media
media
media
media
media
media
media
media
acumulativa
acumulativa
acumulativa
acumulativa
acumulativa
acumulativa
acumulativa
acumulativa
acumulativa
acumulativa
acumulativa
acumulativa
acumulativa
a
a
a
a
a
a
a
a
a
a
a
a
a
i
i
i
i
i
i
i
i
i
i
i
i
i
=
=
=
=
=
=
=
=
=
=
=
=
=
1
2
3
4
5
6
7
8
9
10
11
12
13
es
es
es
es
es
es
es
es
es
es
es
es
es
=
=
=
=
=
=
=
=
=
=
=
=
=
[ 1.4524
[ 3.9037
[ 8.3465
[16.7212
[26.0629
[32.4825
[34.9338
[36.3862
[38.8375
[42.2860
[43.7383
[49.1718
[53.6146
1.4524]
1.9518]
2.7822]
4.1803]
5.2126]
5.4138]
4.9905]
4.5483]
4.3153]
4.2286]
3.9762]
4.0977]
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('
disp('
disp('
disp('
disp(M)
Salida en pantalla de la matriz M')
--------------------------------------------------------')
Col1
Col2
Col3
Col4
Col5
Col6')
--------------------------------------------------------')
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('
fprintf('
fprintf('
fprintf('
fprintf('
fprintf('
Salida en pantalla de la matriz M\n')
-----------------------------------------------\n')
Col1
Col2
Col3
Col4
Col5
Col6 \n')
-----------------------------------------------\n')
%6.4f %6.4f %6.4f %6.4f %6.4f %6.4f\n',M')
-----------------------------------------------\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
%(n)s
%(m.n)f
%(m.n)e
=
=
=
=
salida
salida
salida
salida
de números enteros
de cadena de caracteres (string)
con punto flotante.
exponencial.
Ejemplo 7.3:
fprintf('
fprintf('
fprintf('
fprintf('
El valor de pi es = %9.7f \n',pi)
El valor de pi es = %9.7e \n',pi)
La parte entera de pi es = %d \n',fix(pi))
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.2311
0.6068
0.4860
0.8913
0.7621
0.4565
0.0185
0.8214
0.4447
0.6154
0.7919
0.9218
0.7382
0.1763
0.4057
0.9355
0.9169
0.4103
0.8936
0.0579
0.3529
0.8132
0.0099
0.1389
0.2028
0.1987
0.6038
0.2722
0.1988
0.0153
0.7468
0.4451
0.9318
0.4660
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
Pres
Pres
Pres
Pres
= 1 (db), Temp
= 5 (db), Temp
= 10 (db), Temp
= 15 (db), Temp
= 30 (db), Temp
=
=
=
=
=
17.230
16.180
15.030
12.850
11.560
(ºC),
(ºC),
(ºC),
(ºC),
(ºC),
Salt
Salt
Salt
Salt
Salt
=
=
=
=
=
34.4540
34.4410
34.3530
34.2300
34.2220
(psu)
(psu)
(psu)
(psu)
(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
5
10
15
30
17.230
16.180
15.030
12.850
11.560
34.4540
34.4410
34.3530
34.2300
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
var_1
var_2
5x5
10x1
Bytes
200
80
Class
double array
double array
Grand total is 35 elements using 280 bytes
dat_1 = var_1
dat_2 = var_2
% Cambia el nombre de la variable.
% 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.3749
0.8678
0.3722
0.0737
0.1998
0.0495
0.5667
0.1219
0.5221
0.1171
0.7699
0.3751
0.8234
0.0466
0.5979
0.9492
0.2888
0.8888
0.1016
0.0653
0.2343
0.9331
0.0631
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
bar
hist
feather
loglog
semilogx
semilogy
polar
contour
stem
quiver
quiver3
Grafico
Grafico
Grafica
Grafica
Grafica
Grafica
Grafica
Grafica
Grafica
Grafica
Muestra
Muestra
en dos dimensiones
de barras
histogramas
diagrama de vectores
con escalas logarítmicas en ambos ejes
en escala logarítmica en el eje x
en escala logarítmica en el eje y
en coordenadas polares.
contornos o isolineas.
datos discretos
vectores 2D especificados por las componentes (u,v)
vectores 3D especificados por las componentes (u,v,w)
Uso del PLOT: la función
es la siguiente estructura:
plot
sirve para graficar figuras en escala lineal en ambos ejes. Su
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
=
Guiones y puntos =
-:
*
x
-.
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);
h = ylabel('texto','fontsize', n);
h = title('texto','fontsize', n);
% agrega texto en el eje x.
% agrega texto en el eje y,
% 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' ,
'ylim' ,
'xtick',
'ytick',
[lim_inferior lim_superior], ...
[lim_inferior lim_superior], ...
[vector de valores],...
[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);
db = find(isnan(vec) == 0);
yb = vec(db);
y1 = interp1(db,yb,dm,'linear');
vec(dm) = y1
%
%
%
%
posiciones de los datos malos
posiciones de los datos buenos
corresponden a los datos buenos
corresponden a los datos interpolados
% 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];
%
n
f
p
Interpolación por Minimos cuadrados
= 5; %Aproximación orden 5
= linspace(0, 1, 100);
% Formamos una serie de puntos para graficar.
= 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
function
function
[valores de retorno] = nombre_funcion ( valores de entrada )
nombre_funcion ( valores de entrada )
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
Análisis estadístico
Análisis de señales
Análisis de wavelet
Funciones especiales
Funciones matriciales
Gráficos
:
:
:
:
:
:
:
Interpolación y polinomios
Interpolación spline
Integrales y ecuaciones diferenciales
Información general
Manejo de string
Manejo de archivos
Mapas
Modelos
:
:
:
:
:
:
:
:
datafun
stats
signal
wavelet
specfun
matfun, elmat , sparfun
graph2d , graph3d,
specgraph, graphics
polyfun
splines
funfun
general
strfun
iofun
map, mapproj
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
signrank
signtest
ztest
ttest
ttest2
-
Wilcoxon rank sum test (independent samples)
Wilcoxon sign rank test (paired samples)
Sign test (paired samples)
Z test
One sample t test
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
Descargar