Muestra las diferencias entre dos versiones de la página.
| Ambos lados, revisión anterior Revisión previa Próxima revisión | Revisión previa | ||
|
math_langs:matlab [2011/03/30 18:34] alfred |
math_langs:matlab [2020/05/09 09:25] (actual) |
||
|---|---|---|---|
| Línea 1: | Línea 1: | ||
| ====== MATLAB ====== | ====== MATLAB ====== | ||
| + | |||
| + | |||
| Línea 12: | Línea 14: | ||
| * **home** pondrá el cursor al inicio de la línea de comandos y **clc** la limpiará. | * **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''. | * 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(' ')**. | ||
| Línea 19: | Línea 22: | ||
| * **help funcion**: Muestra la ayuda para dicha fucnción: ''help solve''. | * **help funcion**: Muestra la ayuda para dicha fucnción: ''help solve''. | ||
| * **solve**: Soluciona una ecuación: ''solve ('x + 3 = 55', 'x')'', retornará 52. | * **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 ==== | ==== Entorno ==== | ||
| Línea 45: | Línea 49: | ||
| x = 0.0:0.01:1.0 % de 0 a 1.0 de 0.01 en 0.01 | x = 0.0:0.01:1.0 % de 0 a 1.0 de 0.01 en 0.01 | ||
| </code> | </code> | ||
| + | |||
| Línea 71: | Línea 76: | ||
| matrix(2,1:2) % Fila 2, columnas 1 a 2 | matrix(2,1:2) % Fila 2, columnas 1 a 2 | ||
| matrix(:,1:3) % Las tres primeras columnas | matrix(:,1:3) % Las tres primeras columnas | ||
| + | </code> | ||
| + | |||
| + | ==== 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): | ||
| + | <code matlab> | ||
| + | alpha = sym('alpha') | ||
| + | </code> | ||
| + | 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})''. \\ | ||
| + | <code matlab> | ||
| + | >> 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 | ||
| </code> | </code> | ||
| ===== Dibujar ===== | ===== Dibujar ===== | ||
| + | |||
| + | |||
| ==== Funciones básicas de dibujo ==== | ==== Funciones básicas de dibujo ==== | ||
| * ''clf'': borra el dibujo actual. | * ''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** | ||
| + | <code matlab> | ||
| + | [x,y,z] = cylinder(Radius,200); | ||
| + | plot(x(1,:),y(1,:)) | ||
| + | axis equal | ||
| + | </code> | ||
| ===== GUIS & GUIDE ===== | ===== GUIS & GUIDE ===== | ||
| + | |||
| ==== Funciones ==== | ==== Funciones ==== | ||
| * ''uiputfile'': Muestra un diálogo para guardar ficheros. | * ''uiputfile'': Muestra un diálogo para guardar ficheros. | ||
| + | * ''uigetdir'': Muestra un diálogo para recoger un path. | ||
| + | |||
| ==== Como... ==== | ==== 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);''. | * 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''. | * 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: | ||
| + | <code matlab> | ||
| + | a = [2 3] | ||
| + | b = [4 8] | ||
| + | d = pdist([a;b], 'euclidean') | ||
| + | </code> | ||
| + | |||
| + | |||
| - | ===== Simulink ===== | ||
| ===== Librerías ===== | ===== Librerías ===== | ||
| + | |||
| + | |||
| + | |||
| Línea 122: | Línea 181: | ||
| * ''im2bw(I, num)'': aplica un threshold (num de 0 a 1) a la imágen I. | * ''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. | * ''histeq(I)'': Ecualiza el histograma de la imágen. | ||
| - | * ''imcrop(I, [x1 y1 x2 y2])'': Hace un crop 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. | ||
| + | <code matlab> | ||
| + | se = strel('disk',5); | ||
| + | image1 = imdilate(image1, se); | ||
| + | </code> | ||
| + | * ''imfill'': rellena una imágen hueca. | ||
| + | <code matlab> | ||
| + | image1 = imfill(image1,'hole'); | ||
| + | </code> | ||
| \\ **Algoritmos** | \\ **Algoritmos** | ||
| - | * ''edge (I, algoritmo)'': Detección de bordes por un algoritmo concreto, acepta: canny, sobel, prewitt, log, roberts, zerocross. | + | * ''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). |
| <code matlab> | <code matlab> | ||
| - | I1 = edge(I0, 'sobel') | + | I1 = edge(I0, 'sobel'); |
| + | image1 = edge(image0, 'canny', .2); | ||
| </code> | </code> | ||
| \\ **Notas:** | \\ **Notas:** | ||
| * ''figure, imshow(I)'': abrirá una nueva ventana para mostrar imágenes y en ella mostrará la imágen I. | * ''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 ===== | ===== Notas ===== | ||
| * {{math_langs:matlabr.pdf|Comparación de MATLAB y R}}, sacada de [[http://www.math.umaine.edu/~hiebeler/comp/matlabR.html]]. | * {{math_langs:matlabr.pdf|Comparación de MATLAB y R}}, sacada de [[http://www.math.umaine.edu/~hiebeler/comp/matlabR.html]]. | ||