You are on page 1of 6

Universidad Autnoma de Madrid Facultad de Ciencias Grado en Ingeniera Qumica

Contenidos del tema


1.

Declaracin y definicin de una funcin


Informtica Aplicada

Parte II: Programacin en MATLAB

Prototipo de una funcin Argumentos de entrada Variables locales Retorno(s) de salida Clculo del valor medio Clculo de la varianza y desviacin tpica Invocaciones a funcin simples Invocaciones a funcin anidadas Definicin de funcin recursiva Ejemplos de funciones recursivas

Tema 9

2.

Ejemplos de funciones

Funciones en MATLAB
3. 4.

Invocacin a una funcin


Funciones recursivas

Ivn Cantador
Departamento de Ingeniera Informtica Escuela Politcnica Superior Universidad Autnoma de Madrid 9 Funciones en MATLAB
Informtica Aplicada Grado en Ingeniera Qumica Universidad Autnoma de Madrid

Contenidos del tema


1.

Prototipo de una funcin (I)

Declaracin y definicin de una funcin


Prototipo de una funcin Argumentos de entrada Variables locales Retorno(s) de salida Clculo del valor medio Clculo de la varianza y desviacin tpica Invocaciones a funcin simples Invocaciones a funcin anidadas

Los ficheros con extensin .m son ficheros de texto sin formato (ASCII) que constituyen el centro de programacin en MATLAB

2.

Ejemplos de funciones

Se pueden crear y modificar con cualquier editor de textos Se pueden crear y modificar en el Editor del MATLAB IDE, que es tambin su Depurador

Atendiendo a su contenido, un fichero .m puede ser de dos tipos:

3.

Invocacin a una funcin


Fichero de comandos: si contiene un conjunto de comandos que se ejecutan sucesivamente cuando se escribe el nombre del fichero en la lnea de comandos del Interprete de MATLAB
- Las variables que se crean en el fichero se mantienen en el workspace cuando se termina la ejecucin del fichero

4.

Funciones recursivas

Definicin de funcin recursiva Ejemplos de funciones recursivas

Fichero de funciones: si contiene un conjunto de instrucciones encapsuladas dentro de una funcin, declarada mediante la palabra reservada function
- Las variables que se crean en la funcin son locales a ella, y NO se mantienen en el workspace cuando se termina la ejecucin de la funcin

Funciones en MATLAB

Informtica Aplicada Grado en Ingeniera Qumica Universidad Autnoma de Madrid

9 Funciones en MATLAB 9.1 Declaracin y definicin de una funcin

Informtica Aplicada Grado en Ingeniera Qumica Universidad Autnoma de Madrid

Prototipo de una funcin (II)

Prototipo de una funcin (III)

Una funcin posee los siguientes elementos:

Ejemplo: funcin que determina el mximo de dos nmeros dados


function [m] = maximo(a, b) if ( a >= b ), m = a; else m = b; end;

Un nombre, con el que se invoca/ejecuta la funcin - Debe coincidir con el nombre del fichero .m donde est escrita la funcin Unos argumentos de entrada, sobre los cuales se aplica el algoritmo o funcionalidad implementada por la funcin - Puede ocurrir que la funcin no necesite argumentos de salida Unas sentencias, que constituyen el algoritmo o funcionalidad implementada por la funcin Unos retornos de salida, que corresponden al resultado de la ejecucin de la funcin - Puede ocurrir que la funcin no devuelva un valor de retorno

El prototipo de una funcin es el siguiente:


function [ret1,...,retN] = nombreFuncion(arg1,...,argM)

9 Funciones en MATLAB 9.1 Declaracin y definicin de una funcin

Informtica Aplicada Grado en Ingeniera Qumica Universidad Autnoma de Madrid

9 Funciones en MATLAB 9.1 Declaracin y definicin de una funcin

Informtica Aplicada Grado en Ingeniera Qumica Universidad Autnoma de Madrid

Argumentos de entrada

Variables locales

Una funcin puede recibir 0, 1 ms argumentos de entrada

Los argumentos de entrada se declaran en el prototipo de la funcin entre parntesis y separados por comas, despus del nombre de la funcin Una funcin puede tener un nmero indeterminado de argumentos de entrada
- Se declara un nico argumento de entrada de nombre varargin (en realidad es una variable predefinida en el workspace) - Dicha variable almacena los argumentos de entrada, accesibles mediante llaves { } - El nmero de argumentos se almacena en la variable nargin
function [m] = maximo(varargin) m = -inf; for i = 1 : nargin, if ( varargin{i} > m ), m = varargin{i}; end; end;

El mbito o alcance de las variables declaradas en una funcin (que no sean sus retornos de salida) es la propia funcin

Dichas variables son locales a la funcin, y no son accesibles desde fuera de ella Los valores de las variables locales de una funcin se pierden cuando se acaba la ejecucin de la funcin
function funcionInutil() x = 2; ... >> funcionInutil(); >> x >> % x no existe en el workspace; es local a la funcin error: x undefined

9 Funciones en MATLAB 9.1 Declaracin y definicin de una funcin

Informtica Aplicada Grado en Ingeniera Qumica Universidad Autnoma de Madrid

9 Funciones en MATLAB 9.1 Declaracin y definicin de una funcin

Informtica Aplicada Grado en Ingeniera Qumica Universidad Autnoma de Madrid

Retorno(s) de salida

Contenidos del tema


1.

Una funcin puede devolver 0, 1 ms retornos de salida

Declaracin y definicin de una funcin


En el prototipo de la funcin vienen declarados entre corchetes y separados por comas, despus de la palabra reservada function, y antes del smbolo igual = y el nombre de la funcin Si una funcin no devuelve un retorno, los corchetes y el smbolo se pueden omitir

Prototipo de una funcin Argumentos de entrada Variables locales Retorno(s) de salida Clculo del valor medio Clculo de la varianza y desviacin tpica Invocaciones a funcin simples Invocaciones a funcin anidadas Definicin de funcin recursiva Ejemplos de funciones recursivas

2.

Ejemplos de funciones

La sentencia return permite finalizar de forma inmediata la ejecucin de una funcin


function [encontrado] = buscar(numero, lista) encontrado = 0; for i = 1 : length(lista), if ( lista(i) == numero ), encontrado = 1; % en este punto se acaba la ejecucin return; end; end;

3.

Invocacin a una funcin


4.

Funciones recursivas

9 Funciones en MATLAB 9.1 Declaracin y definicin de una funcin

Informtica Aplicada Grado en Ingeniera Qumica Universidad Autnoma de Madrid

Funciones en MATLAB

Informtica Aplicada Grado en Ingeniera Qumica Universidad Autnoma de Madrid

Clculo del valor medio

10

Clculo de la varianza y desviacin tpica (I)

11

Funcin que calcula la media muestral de una lista de nmeros x1,, xN


function [media] = calcularMedia(lista) media = 0; for n = 1 : length(lista), media = media + lista(n); end; media = media / lentgh(lista);

Funcin que calcula la varianza y desviacin muestrales de una lista de nmeros x1,, xN
function [varianza, desviacion] = calcularVarianzaDesviacion(lista) media = 0; for n = 1 : length(lista), media = media + lista(n); end; media = media / lentgh(lista); varianza = 0; for n = 1 : lenght(lista), varianza = varianza + (lista(n)-media).^2; end; varianza = varianza / lenght(lista); desviacion = sqrt(varianza);

9 Funciones en MATLAB 9.2 Ejemplos de funciones

Informtica Aplicada Grado en Ingeniera Qumica Universidad Autnoma de Madrid

9 Funciones en MATLAB 9.2 Ejemplos de funciones

Informtica Aplicada Grado en Ingeniera Qumica Universidad Autnoma de Madrid

Clculo de la varianza y desviacin tpica (II)

12

Clculo de la varianza y desviacin tpica (III)

13

Funcin que calcula la varianza y desviacin muestrales de una lista de nmeros x1,, xN
function [varianza, desviacion] = calcularVarianzaDesviacion(lista) media = calcularMedia(lista); varianza = 0; for n = 1 : lenght(lista), varianza = varianza + (lista(n)-media).^2; end; varianza = varianza / lenght(lista); desviacion = sqrt(varianza);

Funcin que calcula la varianza y desviacin muestrales de una lista de nmeros x1,, xN
function [varianza, desviacion] = calcularVarianzaDesviacion(lista) media = calcularMedia(lista); N = lenght(lista); varianza = 0; for n = 1 : N, varianza = varianza + (lista(n)-media).^2; end; varianza = varianza / N; desviacion = sqrt(varianza);

9 Funciones en MATLAB 9.2 Ejemplos de funciones

Informtica Aplicada Grado en Ingeniera Qumica Universidad Autnoma de Madrid

9 Funciones en MATLAB 9.2 Ejemplos de funciones

Informtica Aplicada Grado en Ingeniera Qumica Universidad Autnoma de Madrid

Contenidos del tema


1.

14

Invocaciones a funcin simples

15

Declaracin y definicin de una funcin


Prototipo de una funcin Argumentos de entrada Variables locales Retorno(s) de salida Clculo del valor medio Clculo de la varianza y desviacin tpica Invocaciones a funcin simples Invocaciones a funcin anidadas Definicin de funcin recursiva Ejemplos de funciones recursivas

En MATLAB, la invocacin (llamada, ejecucin) de una funcin se realiza desde el Interprete de comandos escribiendo el nombre de la funcin

2.

Ejemplos de funciones

El nombre de las variables de entrada no tiene que coincidir necesariamente con el nombre de los argumentos de entrada del prototipo de la funcin El nombre de las variables salidas no tiene que coincidir necesariamente con el nombre de los retornos del prototipo de la funcin
% Prototipo: function [media] = calcularMedia(lista) >> x = (1 2 3 4 5 6); >> m = calcularMedia(x); >> m m = 3.5 >>

3.

Invocacin a una funcin


4.

Funciones recursivas

Funciones en MATLAB

Informtica Aplicada Grado en Ingeniera Qumica Universidad Autnoma de Madrid

9 Funciones en MATLAB 9.3 Invocacin a una funcin

Informtica Aplicada Grado en Ingeniera Qumica Universidad Autnoma de Madrid

Invocaciones a funcin anidadas

16

Contenidos del tema


1.

17

Un argumento de entrada de una funcin puede ser el resultado de una llamada a esa u otra funcin, o el resultado de una operacin aritmtica o lgica
>> x = (1 2 3 4 5 6); >> y = maximo(2 * calcularMedia(x), maximo(x)); >> y y = 7 >>

Declaracin y definicin de una funcin


Prototipo de una funcin Argumentos de entrada Variables locales Retorno(s) de salida Clculo del valor medio Clculo de la varianza y desviacin tpica Invocaciones a funcin simples Invocaciones a funcin anidadas Definicin de funcin recursiva Ejemplos de funciones recursivas

2. 7

Ejemplos de funciones

maximo(2 * calcularMedia(x), maximo(x))


3. 7 6

Invocacin a una funcin


2 * calcularMedia(x)
3.5

maximo(x)
4.

Funciones recursivas

calcularMedia(x)

9 Funciones en MATLAB 9.3 Invocacin a una funcin

Informtica Aplicada Grado en Ingeniera Qumica Universidad Autnoma de Madrid

Funciones en MATLAB

Informtica Aplicada Grado en Ingeniera Qumica Universidad Autnoma de Madrid

Definicin de funcin recursiva

18

Ejemplos de funciones recursivas (I)

19

Se denominan funciones recursivas a aquellas que se llaman a s mismas

Factorial de un nmero

Ejemplo: factorial de un nmero, n! = n (n1)! 4! = 4 3! = 4 3 2! = 4 3 2 1! = 4 3 2 1

Frmula recursiva: n! = n (n1)! Caso(s) base: 1! = 1

En MATLAB:
function [fact] = factorial(x) if ( x == 1 ), fact = 1; elseif fact = x * factorial(x-1); end;

Toda funcin recursiva consta de dos elementos:

Una frmula recursiva que simplifica el problema en uno o varios subproblemas, atendiendo al paradigma Divide y Vencers - Ejemplo: factorial de un nmero, fact(n) = n * fact(n1) Uno o varios casos base, que se pueden resolver directamente, sin necesidad de recursin - Ejemplo: factorial de un nmero, fact(1) = 1

9 Funciones en MATLAB 9.4 Funciones recursivas

Informtica Aplicada Grado en Ingeniera Qumica Universidad Autnoma de Madrid

9 Funciones en MATLAB 9.4 Funciones recursivas

Informtica Aplicada Grado en Ingeniera Qumica Universidad Autnoma de Madrid

Ejemplos de funciones recursivas (II)

20

Ejemplos de funciones recursivas (III)

21

Sucesin de Fibonacci

Nmeros combinatorios

Frmula recursiva: Fn = Fn1 + Fn2 Caso(s) base: F0 = 1, F1 = 1

Frmula recursiva: C(n, m) = C(n1, m1) + C(n1, m) Caso(s) base: C(0, m) = 1, C(n, n) = 1

En MATLAB:
function [fib] = fibonacci(x) if ( x == 0 | x == 1 ), fib = 1; elseif fib = fibonacci(x-1) + fibonacci(x-2); end;

En MATLAB:
function [comb] = combinatorio(n, m) if ( n == 0 | n == m ), comb = 1; elseif comb = combinatorio(n-1, m-1) + combinatorio(n-1, m); end;

9 Funciones en MATLAB 9.4 Funciones recursivas

Informtica Aplicada Grado en Ingeniera Qumica Universidad Autnoma de Madrid

9 Funciones en MATLAB 9.4 Funciones recursivas

Informtica Aplicada Grado en Ingeniera Qumica Universidad Autnoma de Madrid

You might also like