Вы находитесь на странице: 1из 29

Universidad de Concepcin

Facultad de Ciencias Fsicas y Matemticas


Departamento de Geofsica
Avda. Esteban Iturra s/n - Casilla 160-C Telfono 204136 FAX 220104

Introduccin al trabajo con Matlab


Matlab (Matrix Laboratory) es un lenguaje de programacin de alto nivel orientado al trabajo con
vectores y matrices. Matlab integra la computacin, visualizacin y programacin en un ambiente
fcil de usar, donde los problemas y soluciones son expresados en una notacin matemtica
familiar.
El uso tpico de Matlab incluye aplicaciones en:
1. Computacin y matemticas
2. Desarrollo de algoritmos
3. Modelacin y simulacin
4. Exploracin, visualizacin y anlisis de datos
5. Aplicaciones graficas
Consideraciones:
1. no se declaran las variables, como en Fortran, c, c++
2. Trabaja con doble precisin
3. Distingue maysculas y minsculas

1.- Aspectos bsicos


help: El comando help acompaado con el nombre de la funcin o programa, entrega
informacin de lo que hace la funcin o el programa. Este es muy til cuando no se sabe usar una
funcin 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 lnea entrega otras funciones relacionadas con la funcin que se esta interrogando.

Anlisis de datos Geofsicos (513421)

Universidad de Concepcin
Facultad de Ciencias Fsicas y Matemticas
Departamento de Geofsica
Avda. Esteban Iturra s/n - Casilla 160-C Telfono 204136 FAX 220104

pwd: El comando pwd permite desplegar el directorio (carpeta) en que se esta trabajando.
Ejemplo 1.2
pwd
ans =
C:\matlabR12\work

whos: El comando whos entrega una lista de las variables que se estn utilizando. En la lista se
indica el nombre, la longitud (dimensin del arreglo) y el tamao (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 aadir 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');

Anlisis de datos Geofsicos (513421)

Universidad de Concepcin
Facultad de Ciencias Fsicas y Matemticas
Departamento de Geofsica
Avda. Esteban Iturra s/n - Casilla 160-C Telfono 204136 FAX 220104

2.- Vectores y matrices: definicin y operaciones


Un vector fila o columna se puede definir de la siguiente forma:
a = [1 2 3 4]
a =
1
2

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

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

10

13

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

Anlisis de datos Geofsicos (513421)

10

Universidad de Concepcin
Facultad de Ciencias Fsicas y Matemticas
Departamento de Geofsica
Avda. Esteban Iturra s/n - Casilla 160-C Telfono 204136 FAX 220104

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 lnea, la variable no se despliega en pantalla.

Tabla 2.1. Operadores de vectores y matrices


Operador

Nombre

*
/
+
./
.*
^
.^
'

Multiplicacin
Divisin
Resta
Suma
Divisin elemento a elemento
Multiplicacin 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

% Multiplicacin de dos matrices


131
192

d = a.*b
d =
15
44

% Multiplicacin elemento a elemento


36
156

e = d'

% Transpuesta de una matriz.

e =
15
36

44
156

Nota: El smbolo porcentual (%), se utiliza para introducir comentarios.

Anlisis de datos Geofsicos (513421)

Universidad de Concepcin
Facultad de Ciencias Fsicas y Matemticas
Departamento de Geofsica
Avda. Esteban Iturra s/n - Casilla 160-C Telfono 204136 FAX 220104

3.- Extraccin 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 anlisis y en estos casos es
preferible extraer solamente las columnas o filas de esa matriz.

Ejemplo 3.1.
mat = magic(6)
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.


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

Anlisis de datos Geofsicos (513421)

Universidad de Concepcin
Facultad de Ciencias Fsicas y Matemticas
Departamento de Geofsica
Avda. Esteban Iturra s/n - Casilla 160-C Telfono 204136 FAX 220104

ej_34 = mat(end,:)
ej_34 =
4

36

29

13

18

11

% Elimina las dos primeras filas.


% ------------------------------mat(1:2,:) = []
mat =
8
30
4

28
5
36

33
34
29

17
12
13

10
14
18

15
16
11

4.- Algunas funciones tiles


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

Tabla 4.1. Funciones


Funcin
n = Length(x)
[m, n] = size(x)
[y, i] = sort(x)
y = sum(x)
y = mean(x)
y = std(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 dimensin 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 desviacin estndar de un vector o matriz.
Encuentra el mnimo valor de una vector.
Encuentra el mximo valor de una vector.
Calcula la inversa de una matriz.
Calcula la matriz de varianza y covarianza.
Calcula la matriz de correlacin.
Calcula los valores y vectores propios.
Calcula el determinante de una matriz.
Descomposicin 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

[m n] = size(M)
m =
6

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];

% m = filas, n = columnas.

Anlisis de datos Geofsicos (513421)

Universidad de Concepcin
Facultad de Ciencias Fsicas y Matemticas
Departamento de Geofsica
Avda. Esteban Iturra s/n - Casilla 160-C Telfono 204136 FAX 220104

n =
6
ej_42 = sum(M)
ej_42 =
3.9274

3.1484

4.0944

2.5378

1.6152

3.0236

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 = max(M)
ej_43 =
0.9501

0.8214

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


ej_44 =
0.6546
0.2702

0.5247
0.2949

ej_45 = det(M)
ej_45 =
-0.0194

ej_46 = inv(M)
ej_46 =
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_46
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

Anlisis de datos Geofsicos (513421)

Universidad de Concepcin
Facultad de Ciencias Fsicas y Matemticas
Departamento de Geofsica
Avda. Esteban Iturra s/n - Casilla 160-C Telfono 204136 FAX 220104

Tabla 4.2 Matrices predefinidas


MATRICES PREDEFINIDAS
x
x
x
x
x

=
=
=
=
=

zeros(n,m)
ones(n,m)
eye(n,m)
rand(n,m)
randn(n,m)

Crea
Crea
Crea
Crea
Crea

una
una
una
una
una

matriz
matriz
matriz
matriz
matriz

de ceros de dimensin n x m.
de unos de dimensin n x m.
identidad de dimensin n x m.
con nmeros aleatorios de dimensin n x m.
aleatoria normalmente distribuida.

ej_47 = zeros(3,6)
ej_47 =
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

Anlisis de datos Geofsicos (513421)

Universidad de Concepcin
Facultad de Ciencias Fsicas y Matemticas
Departamento de Geofsica
Avda. Esteban Iturra s/n - Casilla 160-C Telfono 204136 FAX 220104

Tabla 4.3 Funciones trigonomtricas


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 hiperblico de x
coseno hiperblico de x
tangente hiperblica 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 despus de una divisin.

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 ms cercano
infinito (+)
cero.
infinito (-)

5.- Matrices y vectores que contengan NaN


NAN significa Not-a-Number y es una representacin aritmtica que se utiliza para simbolizar
resultados no definidos.
ej_51 = 0/0
Warning: Divide by zero.
ej_51 =
NaN

Ejemplo
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

Anlisis de datos Geofsicos (513421)

NaN
25
NaN
25

25
NaN
25
NaN

36
88
25
30];

Universidad de Concepcin
Facultad de Ciencias Fsicas y Matemticas
Departamento de Geofsica
Avda. Esteban Iturra s/n - Casilla 160-C Telfono 204136 FAX 220104

Una forma de verificar si una matriz o vector contiene datos nan, es a travs de la funcin isnan:
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

isnan(A), entrega valores de ceros y unos. Los ceros indican que en esa posicin
existe un numero. Los unos indican que en esas posiciones existen datos nan.
[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

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


nan en la matriz. Por ejemplo, en la posicin (2,2) se encuentra un dato nan.
Una forma de extraer los nan, siempre y cuando sea un vector es de la siguiente
forma: vector = vector(find(~isnan(vec)))

Ejemplo: Eliminacin 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)))

Anlisis de datos Geofsicos (513421)

Universidad de Concepcin
Facultad de Ciencias Fsicas y Matemticas
Departamento de Geofsica
Avda. Esteban Iturra s/n - Casilla 160-C Telfono 204136 FAX 220104

Ejemplo: Interpolacin 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

Esto debe ir en otra seccin


%
%
%
%

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

6.- Despliegue de datos con formatos


Se pueden desplegar en pantalla mensajes o nmeros con un determinado formato utilizando las
funciones disp, fprintf.
disp: imprime texto y datos sin formato.
Uso: disp(texto, vector o matriz). La impresin de texto se coloca entre
apstrofes.

Ejemplo 6.1: Usando la matriz M del ejemplo de la seccin 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


-------------------------------------------------------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. Adems almacena datos en un archivo.
Uso: fprintf(formato, texto, vector o matriz)

Ejemplo 6.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')

Anlisis de datos Geofsicos (513421)

Universidad de Concepcin
Facultad de Ciencias Fsicas y Matemticas
Departamento de Geofsica
Avda. Esteban Iturra s/n - Casilla 160-C Telfono 204136 FAX 220104

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 lnea tras otra, si se omite este operador se imprimir el resultado en una sola lnea.
Existe 4 formatos principales:
%(n)d
%(n)s
%(m.n)f
%(m.n)e

=
=
=
=

salida
salida
salida
salida

de nmeros enteros
de cadena de caracteres (string)
con punto flotante.
exponencial.

Ejemplo 6.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 6.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))
valor 1, valor 2, valor 3 es = 7.246, 1256, 5.36e-005

nota: si se antepone fprintf('\n') imprimir una lnea en blanco.


Ejemplo 6.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

Anlisis de datos Geofsicos (513421)

Universidad de Concepcin
Facultad de Ciencias Fsicas y Matemticas
Departamento de Geofsica
Avda. Esteban Iturra s/n - Casilla 160-C Telfono 204136 FAX 220104

Ejemplo 6.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)

7.- Leer y guardar datos


La funcin load y save permiten leer y guardar datos, respectivamente. Para leer los datos su
estructura es:
load nombre.extensin
nombre_variable = load(nombre.extension);
donde nombre = nombre del archivo ,
extensin = la extencin que tenga el archivo (.dat, .txt, etc.)

La segunda opcin el nombre se coloca entre apstrofes, y los datos los asigna a la variable
nombre_variable.
Nota 1: El archivo de datos a leer, no debe contener comentarios sin el signo %, adems la
matriz debe ser consistente, es decir, no puede faltar ningn dato en una fila o columna.
Ejemplo 7.1:
load estacion25.dat
dat = load('estacion25.dat')

El ejemplo anterior se ocupa cuando los datos estn en el directorio de trabajo. Si los datos estn
en otro directorio, entonces su estructura es:
load c:\carpeta1\carpeta2\........\nombre.extension.
load d:\carpeta1\carpeta2\........\nombre.extension.
dat = load('c:\carpeta1\carpeta2\........\nombre.extension')
dat = load('d:\carpeta1\carpeta2\........\nombre.extension')

Ejemplo 7.2:
load d:\ocefisica\datos\est_valparaso.dat
dat = load('d:\ocefisica\datos\est_valparaso.dat')

Anlisis de datos Geofsicos (513421)

Universidad de Concepcin
Facultad de Ciencias Fsicas y Matemticas
Departamento de Geofsica
Avda. Esteban Iturra s/n - Casilla 160-C Telfono 204136 FAX 220104

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 opcin, los datos se guardan en formato binario.


La segunda opcin, los datos se guardan en formato ASCII con 8 dgitos.
La tercera opcin, los datos se guardan en formato ASCII con 16 dgitos.
Nota: No es aconsejable almacenar ms de una variable en formato ASCII.
Tambin se pueden almacenar datos usando la funcin 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 opcin 'w' significa 'write'
formato (ver seccin 6)
fclose(fid), cierra el fichero.

Ejemplo 7.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 7.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);
save(nombre,'var_1','var_2')
save(nombre,'var_2','-ascii')

Anlisis de datos Geofsicos (513421)

Universidad de Concepcin
Facultad de Ciencias Fsicas y Matemticas
Departamento de Geofsica
Avda. Esteban Iturra s/n - Casilla 160-C Telfono 204136 FAX 220104

Ejemplo 7.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 7.6: Para leer los datos en archivo binario, se puede hacer de dos formas:
load ejemplo_save.mat
whos
Name
var_1
var_2

Size
5x5
10x1

Bytes

Class

200
80

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
Anlisis de datos Geofsicos (513421)

Universidad de Concepcin
Facultad de Ciencias Fsicas y Matemticas
Departamento de Geofsica
Avda. Esteban Iturra s/n - Casilla 160-C Telfono 204136 FAX 220104

% Ejemplo 7.7 Lectura de datos ASCII con formato


fid = fopen(nm_file,'rt'); % Apertura del archivo
str = fgetl(fid); %Lee una lnea completa
aa(1,1) =[sscanf(str(45:45+4),'%g',1)]; % extrae la informacin
aa(1,2)=[sscanf(str(50:50+4),'%g',1)]; % extrae la informacin
str = fgetl(fid); %lee la lnea completa
n = length(str);
a = [sscanf(str(17:n),'%g',12)]'; % extrae la informacin
fclose(fid); cierra el archivo

% Ejemplo 7.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=0;
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);

Anlisis de datos Geofsicos (513421)

Universidad de Concepcin
Facultad de Ciencias Fsicas y Matemticas
Departamento de Geofsica
Avda. Esteban Iturra s/n - Casilla 160-C Telfono 204136 FAX 220104

8. Programacin estructurada
Tabla 8.1.
Operador

Nombre

<
>
<=
>=
~=
&
|
~
= =

Menor que
Mayor que
Menor o igual que
Mayor o igual que
Distinto que
Y
O
Negacin lgica
Igual que

Sentencia if:
La sentencia if : se usa para que se ejecute una determinada condicin.
if

condicin
bloque

end

si existe ms de una bifurcacin o bucle, entonces:


if condicin1
bloque 1
elseif condicin 2
bloque 2
elseif condicin 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

Anlisis de datos Geofsicos (513421)

Universidad de Concepcin
Facultad de Ciencias Fsicas y Matemticas
Departamento de Geofsica
Avda. Esteban Iturra s/n - Casilla 160-C Telfono 204136 FAX 220104

Sentencia while: repite un conjunto de veces una determinada condicin.


while expression
statements
end

Sentencia switch: Ejecuta diferentes bloques dependiendo de la condicin.


Switch case
case valor 1
bloque 1
case valor 2
bloque 2
............
case valor N
bloque N-1
otherwise
bloque N
end

Ejemplo 8.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 8.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);
Anlisis de datos Geofsicos (513421)

Universidad de Concepcin
Facultad de Ciencias Fsicas y Matemticas
Departamento de Geofsica
Avda. Esteban Iturra s/n - Casilla 160-C Telfono 204136 FAX 220104

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
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('
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 8.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

Anlisis de datos Geofsicos (513421)

Universidad de Concepcin
Facultad de Ciencias Fsicas y Matemticas
Departamento de Geofsica
Avda. Esteban Iturra s/n - Casilla 160-C Telfono 204136 FAX 220104

case 1
matriz
case 2
matriz
case 3
matriz
otherwise
disp('
return
end

= [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')

resultado:
matriz =
0.2048

41.2121

51.2815

156.4770

Ejemplo 8.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]

9.- Funciones de usuario.


Estructura:
function
function
function

[valores de retorno] = nombre_funcion ( valores de entrada )


nombre_funcion ( valores de entrada )
nombre_funcion

Anlisis de datos Geofsicos (513421)

Universidad de Concepcin
Facultad de Ciencias Fsicas y Matemticas
Departamento de Geofsica
Avda. Esteban Iturra s/n - Casilla 160-C Telfono 204136 FAX 220104

Los valores tanto de entrada como de retorno deben estar separados por comas. La funcin se
almacena con extensin (.m).
Estructura de una funcin
function

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

% comentarios
nargin

% opcional

Sentencias
Return
Uso del nargin: El nargin es til cuando se trabaja con valores opcionales.

Ejemplo 9.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

Anlisis de datos Geofsicos (513421)

Universidad de Concepcin
Facultad de Ciencias Fsicas y Matemticas
Departamento de Geofsica
Avda. Esteban Iturra s/n - Casilla 160-C Telfono 204136 FAX 220104

Uso de la funcion:
clear all, clc
numero_mes = 6;
% Mes de Junio
opt = 'completo';
valor_mes = caracteres(numero_mes,opcion)

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

---------------------------------------------------------calcula la media, desviacin 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);
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(u, v)
media =
7.1611

6.2334

desv =
156.4770

53.7056

r =
0.9450

Anlisis de datos Geofsicos (513421)

Universidad de Concepcin
Facultad de Ciencias Fsicas y Matemticas
Departamento de Geofsica
Avda. Esteban Iturra s/n - Casilla 160-C Telfono 204136 FAX 220104

Ejemplo 9.3:
function grafica(y)
% ----------------------------------------------% Grafica el vector y, utilizando una linea azul
% ----------------------------------------------plot(y,'b')

10.- Grficos
Funcin

Descripcin

plot
bar
hist
feather
loglog
semilogx
semilogy
polar
contour
stem

Grafico
Grafico
Grafica
Grafica
Grafica
Grafica
Grafica
Grafica
Grafica
grafica

en dos dimensiones
de barras
histogramas
diagrama de vectores
con escalas logartmicas en ambos ejes
en escala logartmica en el eje x
en escala logartmica en el eje y
en coordenadas polares.
contornos o isolineas.
datos discretos

Uso del PLOT: la funcin


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 lnea, tipo de
marca, tamao de la linea, marca o su color, etc.

Las lneas 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
Anlisis de datos Geofsicos (513421)

Universidad de Concepcin
Facultad de Ciencias Fsicas y Matemticas
Departamento de Geofsica
Avda. Esteban Iturra s/n - Casilla 160-C Telfono 204136 FAX 220104

m = magenta
y = amarillo
c = turquesa,
w = blanco
propiedad = 'linewidth',n
propiedad = 'markersize',n
linewidth,

es la ancho de la lnea y n es su valor. A mayor valor de n, mayor es el ancho de la

lnea.
es el tamao de la marca. A mayor valor de n, mayor es el tamao de la marca.
Nota. Para ms informacin del estilo de las marcas use el help plot
Markersize

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)
h = sunplo(m_n_index)
subplot m_n_index
donde m = filas
n = columans
index = numero correlativo del grfico.
Total de figuras es m x n

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

Ejemplo 10.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)

Anlisis de datos Geofsicos (513421)

Universidad de Concepcin
Facultad de Ciencias Fsicas y Matemticas
Departamento de Geofsica
Avda. Esteban Iturra s/n - Casilla 160-C Telfono 204136 FAX 220104

Al grfico trazado se puede agregar rtulos 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

el handle (h) es opcional si no se va a modificar el rotulo.


donde fontsize regula el tamao del texto indicado por el nmero n.

Adems en el grfico 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 grfico.

axis([ x_lim_inf x_lim_sup y_lim_inf y_lim_sup ])


axis square
axis equal

Anlisis de datos Geofsicos (513421)

Universidad de Concepcin
Facultad de Ciencias Fsicas y Matemticas
Departamento de Geofsica
Avda. Esteban Iturra s/n - Casilla 160-C Telfono 204136 FAX 220104

Ejemplo 10.3 usando los datos del ejemplo 10.2


subplot 221
plot(t,xt,'k')
ylabel('eje-y','fontsize',13)
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)

Anlisis de datos Geofsicos (513421)

Universidad de Concepcin
Facultad de Ciencias Fsicas y Matemticas
Departamento de Geofsica
Avda. Esteban Iturra s/n - Casilla 160-C Telfono 204136 FAX 220104

set

: Permite cambiar las propiedades a los objetos (del grfico).

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


set(handle, 'propiedad1 ', valor1, ........, 'propiedad(n) ', valor(n))
los ms utilizados son:
set(gca, 'xlim' , [lim_inferior lim_superior], ...
'ylim' , [lim_inferior lim_superior], ...
'xtick', [vector de valores],...
'ytick', [vector de valores],...
'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 10.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')

Anlisis de datos Geofsicos (513421)

Universidad de Concepcin
Facultad de Ciencias Fsicas y Matemticas
Departamento de Geofsica
Avda. Esteban Iturra s/n - Casilla 160-C Telfono 204136 FAX 220104

Anlisis de datos Geofsicos (513421)

Universidad de Concepcin
Facultad de Ciencias Fsicas y Matemticas
Departamento de Geofsica
Avda. Esteban Iturra s/n - Casilla 160-C Telfono 204136 FAX 220104

ANEXO: Toolbox tiles


Anlisis de datos y transformada de Fourier
Anlisis estadstico
Anlisis de seales
Anlisis de wavelet
Funciones especiales
Funciones matriciales
Grficos

:
:
:
:
:
:
:

Interpolacin y polinomios
Interpolacin spline
Integrales y ecuaciones diferenciales
Informacin 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

Anlisis de datos Geofsicos (513421)

Вам также может понравиться