====== MATLAB ====== ===== Pequeñas pinceladas ===== * El lenguaje que utiliza se denomina M. * Podemos introducir varios comandos en una línea, estos podrían estar separados (y finalizados) por ';' , en ese caso no mostrará los cálculos realizados por pantalla. Podemos separarlos por ',', entonces sí que los mostrará. * **clear** borrará todas la memoria y cálculos realizados hasta ese momento. **clear a** borrará el valor de la variable ''a''. * **home** pondrá el cursor al inicio de la línea de comandos y **clc** la limpiará. * Cuando se realiza una operación el resultado se guarda (sobreescribe) una variable llamada ''ans''. * **pause(x)** hace que matlab se detenga por x segundos. * Pedir entrada al usuario por teclado, con la función **input(' ')**. ==== Funciones básicas ==== * **help funcion**: Muestra la ayuda para dicha fucnción: ''help solve''. * **solve**: Soluciona una ecuación: ''solve ('x + 3 = 55', 'x')'', retornará 52. * **random**: Recoge un valor aleatorio según una distribución indicada, por ejemplo un valor repartido uniformemenete entre 0 y 1000: ''random ('unif',0,1000)''. ==== Entorno ==== ==== Control de flujo ==== === Bucle for === for t = 0:10 end === Condicionales === if t > 1.0 Vapp = 1; end ===== Operaciones con... ===== ==== Arrays\Vectores ==== * Generar un vector automáticamente: x = 0:10 % de 0 a 10 de 1 en 1 x = 0.0:0.01:1.0 % de 0 a 1.0 de 0.01 en 0.01 ==== Matrices ==== === Definir... === * Una matriz de 3x3: a = [ 1 4 7 ; 2 5 8 ; 3 6 9 ] a = 1 4 7 2 5 8 3 6 9 === Operaciones === * Si en ''A'' tenemos una matriz podemos hacer su traspuesta haciendo: ''A'''. === Acceso a... === matriz(4, 2) % Fila 4, columna 2 matriz(2,:) % Fila 2 matriz(:,3) % Columna 3 matrix(2,1:2) % Fila 2, columnas 1 a 2 matrix(:,1:3) % Las tres primeras columnas ==== Cálculos con símbolos ==== Matlab permite realizar cálculos con símbolos\incógnitas, esto es, lanzar comandos y que el resultado sea una expresión en función de estas variables. \\ Con el comando ''sym'' podemos declarar una variable simbólica (con ''syms'' podemos declarar varias): alpha = sym('alpha') Con ''subs'' indicamos, en una variable que tenga una expresión en función de símbolos, los valores que han de tomar. Su sintaxis es: ''subs(variable, {simbolos a sustituir}, {valores})''. \\ >> syms a b >> Mat_A = [2 3 a; 5 43 1; 2 b 3] Mat_A = [ 2, 3, a] [ 5, 43, 1] [ 2, b, 3] >> Mat_B = [sin(a); 4; 5] Mat_B = sin(a) 4 5 >> Mat_C = Mat_A * Mat_B Mat_C = 5*a + 2*sin(a) + 12 5*sin(a) + 177 4*b + 2*sin(a) + 15 >> subs(Mat_C, {a, b}, {3, 4}) ans = 27.2822 177.7056 31.2822 ===== Dibujar ===== ==== Funciones básicas de dibujo ==== * ''clf'': borra el dibujo actual. * ''hold on'': hace que todo lo que se dibuje a partir de ahora sea sobre el mismo dibujo. ==== Como... ==== * **Dibujar un círculo** [x,y,z] = cylinder(Radius,200); plot(x(1,:),y(1,:)) axis equal ===== GUIS & GUIDE ===== ==== Funciones ==== * ''uiputfile'': Muestra un diálogo para guardar ficheros. * ''uigetdir'': Muestra un diálogo para recoger un path. ==== Como... ==== * Dibujar sobre varios ''axe''. Pongamos que tenemos uno con tag ''axe1'' y otro con tag ''axe2'' pues antes de dibujar, por ejemplo sobre ''axe1'', haremos ''axes(handles.axe1);''. * Si vamos a utilizar variables globales las tendremos que declarar al principio de la función como ''global''. * Encontrar la distancia euclídea entre dos puntos: a = [2 3] b = [4 8] d = pdist([a;b], 'euclidean') ===== Librerías ===== ==== Image Processing ==== === Funciones === **Funciones sobre archivos:** * ''imread(path)'': lee una imágen. * ''imfinfo(path)'': muestra información de un archivo de imágen. * ''imwrite (I, path)'': guarda I en la ruta path. \\ **Muestra información:** * ''imshow(I)'': muestra la imágen I. Podemos mostrar varias imágenes a la vez: ''imshow([image1,K, L]);'' Un '';'' la mostraría en la siguiente línea. * ''imhist(I)'': muestra el histograma de I. * ''size(I)'': recoge el tamaño de I. [w h] = size(K); \\ **Edición:** * ''rgb2gray(I)'': pasa una imágen I a 8 bits. * ''im2bw(I, num)'': aplica un threshold (num de 0 a 1) a la imágen I. * ''histeq(I)'': Ecualiza el histograma de la imágen. * ''imcrop(I, [x y width height])'': Hace un crop de la imágen. * ''strel'' crea un elemento morfológico, acepta una cadena que define el elemento y los parámetros para este. El elemento puede ''square'' (acepta un valor), ''line'' (acepta 2 valores: la longitud y el ángulo), ''disk'' (acepta un valor, el radio) y ''ball'' (acepta el radio y la altura). * ''imdilate'' dilata un borde según un elemento morfológico. se = strel('disk',5); image1 = imdilate(image1, se); * ''imfill'': rellena una imágen hueca. image1 = imfill(image1,'hole'); \\ **Algoritmos** * ''edge (I, algoritmo)'': Detección de bordes por un algoritmo concreto, acepta: canny, sobel, prewitt, log, roberts, zerocross. A canny puedes indicarle el threshold para el corte en forma de vector de dos posiciones (donde la primera es el valor mínimo, y la segunda el máximo) o un escalar (el valor máximo). I1 = edge(I0, 'sobel'); image1 = edge(image0, 'canny', .2); \\ **Notas:** * ''figure, imshow(I)'': abrirá una nueva ventana para mostrar imágenes y en ella mostrará la imágen I. * ''imtool'' es una herramienta que te permite realizar acciones básicas sobre imágenes como por ejemplo crop o ver los bytes RGB (al hacer mucho zoom). ===== Notas ===== * {{math_langs:matlabr.pdf|Comparación de MATLAB y R}}, sacada de [[http://www.math.umaine.edu/~hiebeler/comp/matlabR.html]].