Algunos consejos para funcionar con matlab

Definiendo funciones

En matlab, la definición de funciones se realiza mediante la instrucción function, que termina con la palabra end.

function mifuncion()
    %Esta es la documentación (docstring) de la función
    a = 2+2;
    %Este es un comentario, y la siguiente línea es un comando
    % que se ejecutará cuando llamemos a la función
    % como no termina en punto y coma, se verá el resultado por pantalla
    "Hola Mundo"
end

La función debe estar en un archivo de igual nombre que el de la función (mifuncion.m).

Una función no es ejecutada hasta que la llamamos. Para llamar a una función, simplemente escribimos su nombre seguido de paréntesis englobando los argumentos, o únicamente paréntesis () si la función no necesita argumentos:

mifuncion()
In [6]:
function mifuncion()
%Esta es la documentación (docstring) de la función
    a = 2+2;
    %Este es un comentario, y la siguiente línea es un comando
    % que se ejecutará cuando llamemos a la función
    % como no termina en punto y coma, se verá el resultado por pantalla
    "Hola Mundo"
end
In [7]:
mi_funcion()
ans = Hola Mundo

Cuando una función devuelve algún objeto éste puede ser asignados a una variable:

function a = mi_numero()
%Esta es la documentación (docstring) de la función
    a = 2+2;
end

y en la terminal de comandos, o dentro de un script o función, podemos llamar

x = mi_numero();
In [5]:
#Pruébalo
In [ ]:

In [ ]:

Ejercicio

Escribe una función que devuelva siempre 1. Llama a la función, almacena el resultado en una variable, y súmalo a otra variable.

In [ ]:

In [ ]:

4.1.1. Sobre los parámetros

Un parámetro es un valor que la función espera recibir cuando sea llamada (invocada), a fin de ejecutar acciones en base al mismo. Una función puede esperar uno o más parámetros (que irán separados por una coma) o ninguno.

function saludador(nombre, apellido)
%Función que al llamarla escribe el nombre completo por pantalla.

    % algoritmo
end

Los parámetros, se indican entre los paréntesis, a modo de variables, a fin de poder utilizarlos como tales, dentro de la misma función.

Los parámetros que una función espera, serán utilizados por ésta, dentro de su algoritmo, a modo de variables de ámbito local, a las que solo la función podrá acceder:

function saludador(nombre, apellido)
%Función que al llamarla escribe el nombre completo por pantalla.

    % algoritmo
    nombre_completo = [nombre, apellido]
end

Si quisiéramos acceder a esas variables locales, fuera de la función, obtendríamos un error:

function saludador(nombre, apellido)
%Función que al llamarla escribe el nombre completo por pantalla.

    % algoritmo
    nombre_completo = [nombre, apellido]
end

saludador('Jaimito', 'Pérez');
nombre_completo

Obtenemos el error (aprox):

error: 'nombre_completo' undefined near line 1 column 1
In [ ]:
%Pruébalo
In [ ]:

In [ ]:

Ejercicios

1- Escribe una función que recibe como argumento un número positivo N y devuelve $N^2$.

2- Escribe una función que recibe como argumento un número positivo N y devuelve la suma de $n^2$ desde n=1 hasta N.

3- Escribe una función que recibe como argumento un número positivo N y devuelve un array con todos los $n^2$, desde n=1 hasta N.

In [ ]:

In [ ]:

Una función, puede tener cualquier tipo de algoritmo y cualquier cantidad de ellos y, utilizar cualquiera de las características vistas hasta ahora. No obstante, una buena práctica es que una función realice una única acción, pero que sea tan genérica como sea posible (una sóla función que suma números es mejor que dos funciones, una para sumar números positivos y otra para sumar números negativos). Esto hace que la función sea reutilizable al máximo.

Funciones inline

También se pueden definir funciones en una línea usando el símbolo @:

% Una funcion con un solo argumento
f = @(x)(1 + 2*sin(x))

% Una funcion con dos argumentos
f = @(x, y)(1 + sin(x + y))

Ejercicio

  1. Escribe las dos funciones de ejemplo anteriores sin usar @, sino definiendo las funciones del modo habitual usando function.

  2. Escribe la función siguiente en una sóla línea:

function s = sumacuadrados(x,y)
    %Recibe dos números como argumentos y devuelve la suma de sus cuadrados

    s = x**2 + y**2;
end

Atención: no todas las funciones se pueden definir en una sóla línea con @, pero todas las funciones se pueden definir usando function.

In [ ]:

In [ ]:

In [ ]:

Usar funciones de librerías

En matlab tienes montones de librerías que te ofrecen funciones que puedes usar. Pero para usarlas, tienes que:

  1. Saber que existen
  2. Saber cómo usarlas

Si no has conseguido encontrar la función que necesitas, prueba alguna de las siguientes opciones:

  • Busca en los cuadernos de ejemplo de esta asignatura.
  • Pregunta en el foro de moodle de la asignatura.
  • Envía un email al profesor
  • Busca en internet combinando el objeto que buscas (en inglés) con matlab, por ejemplo matlab bisection. Ten en cuenta los siguientes consejos para elegir un resultado de búsqueda:
    1. Prioriza funciones oficiales de matlab, frente a código que tienes que cortar y pegar.
    2. La documentación oficial de matlab es la mejor opción.
    3. Sitios como stackoverflow donde hay más de una respuesta, y se votan las mejores respuestas, te permiten contrastar las soluciones alternativas.
    4. Un link a una parte concreta de un curso completo, o un tutorial dentro de una lista de tutoriales, es mejor que una entrada de un blog, a menos que tengas buenas referencias.

Una vez encontrada la función, puedes leer su documentación escribiendo en la terminal de comandos help seguido del nombre de la función

In [ ]:
help exp

Ejercicios

Busca funciones ya existentes que realicen las tareas siguientes:

  • Tienes un vector de números (un array 1D). Quieres encontrar el mínimo de esos números y el índice para el cuál se alcanza ese mínimo.
  • Tienes dos vectores de números de las mismas dimensiones. Quieres construir un tercer vector de las mismas dimensiones que contenga en cada posición el mínimo entre los dos arrays dados como argumentos.
  • Tienes una matriz M (array 2D). Quieres otra matriz cuya diagonal y cuyos elementos debajo de la diagonal coincidan con los elementos de M, pero que tenga ceros por encima de la diagonal.
  • (opcional) Escribe tú esas funciones, y compara que el resultado de tus funciones coincida con las que encontraste antes.
In [ ]:

In [ ]:

Scripts

Además de para crear funciones, puedes usar archivos fichero.m para guardar juntos una serie de comandos que ejecutan una tarea.

El uso que le daremos durante este curso es el siguiente: crea un script para cada ejercicio que resuelvas.

  • Este script puede llamar a funciones de matlab y a funciones que tú hayas definido en otros ficheros .m.
  • El script comienza definiendo todas las constantes, para hacer fácil volver a ejecutar el ejercicio cambiando los datos. En ningún caso uses la función input, que obliga a teclear los datos del problema, y puede que el script no funcione si el usuario no escribe los datos de la forma que esperas (por ejemplo, si tu programa espera una función y el usuario introduce texto que define la función).
  • El script debe generar la respuesta completa al ejercicio, escribiendo texto o generando gráficas con la respuesta a cada apartado. Ningún apartado debe quedar sin responder. Si no necesitas hacer cálculos ni generar gráficas, simplemente escribe una cadena con tu respuesta.
In [ ]: