Los m-files son archivos de texto donde guardamos una secuencia de comandos. Dichos archivos son guardados con extensión .m y pueden ser dos tipos:
los Scripts son útiles para autorizar un bloque de comandos. Los Scrips operan sobre datos existentes y crean nuevos datos a partir de las operaciones contenidas (y guardados en el espacio de trabajo)
Las Funciones son también m-files, pero que tienen el nombre de la función y ejecutan tareas específicas. Si están en el directorio de trabajo, se pueden utilizar como comando de Matlab (built-in-functions).
Los m-files pueden llevar comentarios, esto es bloques de texto que son ignorados por el compilador. Toda línea que comienza con signo de porcentaje (%) es considerada comentarios.
Matlab tiene su propio editor de textos el mismo que cuenta con highlighting y opciones de debbuging.
File/New/Script Crea un nuevo m-file en el editor de Matlab.
File/Save as … (elegir directorio de trabajo) Guarda el m-file en el directorio de trabajo.
alt-cmd-R (F5) Guarda y ejecuta el m-file que esté activo. MAC (WIN).
alt-cmd-R (F5) Guarda y ejecuta el m-file que esté activo. MAC (WIN).
Ctrl-C Detiene la ejecución del m-file. MAC (WIN).
Comentarios
Una vez que se crea un m-file se abre el editor de Matlab.
El directorio de trabajo es donde se guardan las funciones que se utilizaran en el programa que estén trabajando.
Al ejecutar el m-file por primera vez Matlab preguntara si se desea cambiar la carpeta donde está trabajando Matlab a la carpeta donde se encuentra el m-file.
Los Loops son bucles que sirven para realizar operaciones de manera repetida. Existen dos tipos de Loops:
For Loop: Realiza la misma acción un número determinado de veces. Su sintaxis es como sigue:
for variable = expresión
Comando 1
Comando 2
Comando 3
…
End
Ejercicio 10.3.1.1. Realizar una suma de matrices empleando el ciclo for y crear una matriz random con el comando rand y una matriz de ceros con el comando zeros de (n,1) (código en la ilustración 159 y resultado de la suma en la ilustración 160).
While Loop: Realiza la misma acción hasta que una condición se cumpla.
while Condición
Comando 1
Comando 2
Comando3
…
End
Ejercicio 10.3.1.2. Crear un bucle que divida el valor de nuestra variable mientas ese valor sea mayor a 0.05 (código en la ilustración 161 y resultado en la ilustración 162).
Ejercicio 10.3.1.3. Anidar varios loops como se muestra en la ilustración 163.
En la ilustración 164 se puede apreciar como el resultado de anidar los loops se muestra en la ventana de comandos.
Es posible utilizar un while loop como un for loop, sólo se necesita definir un contador.
Ejercicio 10.3.1.4. En la ilustración 165 se aprecia el código que se emplea para utilizar el while loop como for loop y en la ilustración 166 el resultado del comando.
Sirven para ejecutar un comando si se cumple cierta condición. La sintaxis para condicionales es:
if condicion 1
comando
elseif condicion 2
comando
elseif condicion 3
comando
else
comando
end
Las condiciones son verificadas de manera secuencial. En cuando se cumple una condición, el comando if ya no continúa con las demás condiciones.
Operadores lógicos
< menor a.
> mayor a.
<= menor o igual a.
>= mayor o igual a.
== igual a.
~= no es igual a.
| o: verdadero si al menos una es verdadera (genera escalar o matriz).
|| o: verdadero si al menos una es verdadera (genera escalar).
& y: verdadero si todas son verdaderas (genera escalar o matriz).
&& y: verdadero si todas son verdaderas (genera escalar).
~ negativo.
any verdadero si algún elemento es no nulo.
all verdadero si todos los elementos no nulos.
find encuentra índices de valor no nulos en una matriz.
isnan detecta valores NaN en una matriz.
isempty detecta si es una matriz vacía.
Ejercicio 10.3.2.1. Condicionales en un if para darle valores a la variable “n” (código mostrado en la ilustración 167 y resultado en la ilustración 168).
Otro ejemplo es utilizar el valor de la variable para utilizar ese dato como parte de las condiciones del if y elseif (ilustración 169).
Al ejecutar el comando como lo indica la ilustración 170 en la ventana de comandos se aprecia el resultado.
En un condicional es mejor utilizar && y || para asegurarnos que la respuesta es un escalar. Si utilizamos & y | y la respuesta es una matriz, solamente si la condición se cumple para todos los elementos se ejecuta el comando indicado.
Matrices lógicas: dummy = (condición) genera una matriz de dummies si se cumple la condición.
Referenciación: A(condición) genera una matriz con los elementos de A que cumplen la condición.
Los condicionales if pueden estar anidados entre sí y anidados dentro Loops.
Ejercicio 10.3.2.2. Utilizar matrices lógicas ( código en la ilustración 171 y resultado mostrado en la ilustración 172).
switch (switch_expression), case (case_expression), end evalúa una expresión y elige ejecutar uno de varios grupos de instrucciones. Cada elección es un caso.
El bloque switch prueba cada caso hasta que una de las expresiones de caso sea verdadera. Un caso es verdadero cuando:
Para los números, case_expression == switch_expression.
Para los vectores de caracteres, strcmp(case_expression,switch_expression) == 1.
Para los objetos compatibles con la función eq, case_expression == switch_expression. La salida de la función eq sobrecargada debe ser un valor lógico o convertible a un valor lógico.
Para un arreglo de celdas case_expression, al menos uno de los elementos del arreglo de celdas coincide con switch_expression, como se definió anteriormente para números, vectores de caracteres y objetos.
Cuando una expresión de caso es verdadera, Matlab ejecuta las instrucciones correspondientes y sale del bloque switch.
Una switch_expression evaluada debe ser un escalar o un vector de caracteres.
Una case_expression evaluada debe ser un escalar, un vector de caracteres o un arreglo de celdas de escalares o vectores de caracteres.
El bloque otherwise es opcional. Matlab ejecuta las instrucciones solo cuando ningún caso es verdadero.
Ejercicio 10.3.3.1. Mostar un texto diferente de forma condicional, en función de un valor introducido en la línea de comandos es posible, como se aprecia en la ilustración 173.
Cada que un caso sea ejecutado se despliega en la ventana de comandos como lo muestran las ilustraciones 174, 175, 176 y 177 que representan al caso 1, 0, -1 y otro respectivamente.
Ejercicio 10.3.3.2. Determine qué tipo de gráfica se debe crear en función del valor de plottype. Si plottype es ‘pie’ o ‘pie3’, cree una gráfica circular en 3D. Utilice un arreglo de celdas para contener ambos valores, el código se muestra en la ilustración 178 y el resultado de la gráfica en la ilustración 179.
Una case_expression no puede incluir operadores relacionales como < o > para la comparación con switch_expression. Para comprobar la desigualdad, utilice las instrucciones if, elseif, else.
La instrucción switch de Matlab no se pierde como una instrucción switch en lenguaje C. Si la primera instrucción case es true, Matlab no ejecuta las demás instrucciones case. Por ejemplo:
Se crea una variable de tipo numérica con valor de 48 como se muestra en la ilustración 180.
Matlab evalúa caso por caso dentro de un switch de manera descendente, es por eso que en el momento que un caso resulte ser verdadero desprecia los demás casos y muestra en la ventana de comandos el resultado del caso al que se le dio veracidad en primera instancia como es de apreciar en la ilustración 181.