Clase 4: Funciones en Matlab
Hamilton Galindo
2015
Outline
1 Tipos de programas
2 Partes b´ asicas de un programa
3 Caracter´ısticas generales de las funciones en Matlab
4 Help de directorios
5 Sub-funciones
6 Referencias de funci´ on
Creaci´ on de referencia de funci´ on
Evaluaci´ on de funciones mediante referencias Utilidad de las referencias de funci´ on
Funciones inline Funciones an´ onimas Funciones anidadas
7 Funciones m´ as importantes en Matlab
8 Tipos de funciones
Funciones que operan de modo escalar
Tipos de programas
En Matlab hay dos tipos de programas: scripts y functions. Un script es el tipo de programa m´ as simple de Matlab, porque no tienen un input, que ejecuta una series de sentencias; mientras, que las funciones aceptan argumentos de entrada (inputs) y producen argumentos de salida (output).
Script
Util para automatizar una serie de ´ pasos
No acepta inputs Almacena variables en el
workspace base que es compartido con otros scripts a los cuales se puede acceder desde la linea de comando.
Escribiendo el nombre del script en la l´ınea de comando, Matlab ejecuta sus sentencias.
Funci´ on
Util para extender el lenguaje de ´ Matlab para tus aplicaciones Acepta inputs y muestra resultados
Almacena variables en el
workspace interno de la funci´ on
(separado del workspace base)
Partes b´ asicas de un programa I
A continuaci´ on se muestra las partes b´ asicas de un programa (por ejemplo una funci´ on):
Definición de la función función Texto de ayuda Linea principal
Cuerpo de la p
función
Partes b´ asicas de un programa II
Las funciones y los scripts tienen las mismas partes, excepto la “l´ınea que define a la funci´ on”, la cual aplica solo para funciones.
Parte del programa Descripci´ on Definici´ on de la funci´ on
(solo para funciones)
Define el nombre de la funci´ on, y el n´ umero y orden de los inputs y outputs
L´ınea principal Es una descripci´ on resumida del programa.
Se observa cuando escribimos help
Texto de ayuda Descripci´ on m´ as detallada del programa. Se observa cuando escribimos help
Cuerpo del programa (funci´ on o script)
C´ odigo del programa
Comentarios Texto en el cuerpo del programa que explica el trabajo interno del programa
A continuaci´ on se detalla cada parte del programa:
Partes b´ asicas de un programa III
[1] Definici´ on de la funci´ on
La “l´ınea que define la funci´ on”: [1] informa a Matlab que el archivo contiene una funci´ on y [2] especifica el orden de los argumentos de entrada/salida
Esta l´ınea empieza con la palabra clave: function
Esta l´ınea debe ser la primera del archivo (excepto que sea comentario)
La l´ınea que define la funci´ on es (ejemplo):
function [y] = cobb douglas(alpha,beta)
Primera l´ınea de c´ odigo para crear una funci´ on (t´ erminos generales):
function [out1,out2,...,outn] = function name(in1,in2...,ink)
Donde:
Partes b´ asicas de un programa IV
I
function name se refiere al nombre de la funci´ on (se recomienda guardar el archivo *.m con este nombre). En caso de guardarlo con otro nombre, al llamar a la funci´ on se debe de hacer con el nombre del
*.m file (Matlab ignora el nombre de la funci´ on). El nombre de la funci´ on debe de empezar con una letra y debe de contener a lo m´ aximo 63 caracteres alfa-num´ ericos (ver con namelengtmax).
Se recomienda escribir el nombre en min´ usculas.
I
(in1,in2...,ink) son los argumentos de la funci´ on; es decir, los valores que tendran que ser introducidos por el usuario
I
[out1,out2,...,outn] representa el resultado (output) de la funci´ on.
Si no hay un resultado se omite [out1,out2,...,outn] o se coloca []
[2] L´ınea principal
Se llama as´ı porque es la primera l´ınea del texto de ayuda y brinda una descripci´ on resumida del programa. Dado que es un comentario se inicia la l´ınea con %.
[3] Texto de ayuda
Partes b´ asicas de un programa V
Se puede crear “ayuda on-line para tus programas”, para ello se detalla el programa por medio de comentarios ( %) y se puede observar dicha descripci´ on cuando se escribe “help
nombre funci´ on”
[4] Cuerpo de la funci´ on
El cuerpo del programa (funci´ on o script) contiene todos los c´ odigos de Matlab necesarios para realizar los c´ alculos y asignar valores a los argumentos de salida (outputs).
[5] Comentarios
Una l´ınea de comentarios se inicia con %. Los comentarios brindan una
mayor informaci´ on de los c´ odigos usados en el programa. Para escribir un
bloque de comentarios se usa %{... %}
Caracter´ısticas generales de las funciones en Matlab I
1
Una funci´ on en Matlab es un programa, que contiene un conjunto de instrucciones especificadas en un archivo de texto de extensi´ on *.m
2
Para crear un programa (funci´ on o script) se usa un editor de texto con extensi´ on *.m (M-FILE)
3
Para editar un m-file se coloca: edit nombre programa; y el programa se abrir´ a. Para abrir el editor solo se escribe edit
4
Comandos ´ utiles para gestionar tus programas:
I
what, lista los nombres de los programas creados en tu carpeta
I
type nombre programa, muestra el contenido del programa
I
help nombre programa, muestra los comentarios de ayuda de tu programa
5
Elementos de una funci´ on: nombre – argumentos – retorno
6
Una funci´ on se llama utilizando su nombre
7
En Matlab las funciones pueden tener valores de retorno matriciales
m´ ultiples
Caracter´ısticas generales de las funciones en Matlab II
8
Las funciones que no tienen argumentos no llevan parentesis
9
Los nombres de las funciones no son palabras reservadas
10
En Matlab una funci´ on puede tener un n´ umero variable de
argumentos y valores de retorno
Help de directorios
Dos formas de mostrar la ayuda en el directori actual de trabajo:
1
Primera:
I
Crear un archivo contents.m donde contenga solo comentarios de las funciones y scripts contenidos en el directorio actual
I
Para visualizar esos comentarios se escribe en la l´ınea de comandos:
help nombre directorio actual
2
Segunda:
I
En caso no se ha creado el archivo contents.m
I
Al escribir en la l´ınea de comandos:
help nombre directorio actual
Se obtiene la l´ınea principal (H1) de todos los programas contenidos
en el directorio actual.
Sub-funciones
¿Que son?
Son funciones adicionales definidas en un mismo fichero *.m con nombres diferentes del nombre del fichero (y del nombre de la funci´ on principal)
Las sub-funciones solo pueden ser llamadas por las funciones contenidas en el mismo archivo *.m, resultando invisibles para otras funciones externas.
Ejemplo: ver mi fun.m
Referencias de funci´ on
function handles
¿Que es?
Es una forma para referirse al nombre de una funci´ on. Se usa para llamar a una funci´ on indirectamente.
1
Su principal uso: es pasar a una funci´ on el nombre de otra funci´ on, junto con sus argumentos, para que la pueda ejecutar.
2
Permite al programador un mayor control sobre la funci´ on que es
efectivamente llamada. Esto es importante ya que en Matlab existen
funciones sobrecargadas (overloaded functions), las cuales son
funciones diferentes que tienen el mismo nombre pero se diferencian
entre s´ı por el n´ umero y tipo de argumentos.
Creaci´ on de referencia de funci´ on
Se puede crear de dos formas:
1
Mediante el operador @
Para crear una referencia de funci´ on, se coloca el @ antes del nombre de la funci´ on:
fh = @sin
donde, al colocarle @ al incio del nombre de la funci´ on seno (sin) se convierte en una referencia de funci´ on (fh)
2
Mediante la funci´ on str2func
funci´ on str2func recibe como argumento una cadena de caracteres conteniendo el nombre de una funci´ on y devuelve como valor de retorno la referencia de funci´ on.
fh = str2func(‘sin’)
>> fh = @sin
Evaluaci´ on de funciones mediante referencias I
1
La principal aplicaci´ on de las referencias de funci´ on es pasar
informaci´ on de funciones a otras funciones para que aquellas puedan ser ejecutas por estas.
2
Para evaluar una referencia de funci´ on se usa la funci´ on feval
¿Que es feval?
[r1,r2,r3...] = feval(fh,arg1,arg2,arg3...)
Donde: fh es una referencia de funci´ on y r1,r2,r3... y arg1,arg2,arg3...
son los valores de retorno y los argumentos de la funci´ on cuya referencia es fh.
3
Una obsevaci´ on sobre feval:
I
La referencia de funci´ on fh debe de ser un escalar. Es decir, no se puede evaluar un array de referencias de funci´ on con una sola llamada a feval.
4
Ejemplo: ver los archivos pruebafh.m y PruebafhMain.m
Utilidad de las referencias de funci´ on
1
Principal utilidad: pasar informaci´ on de una funci´ on a otras funciones que la deben de poder ejecutar por medio de feval.
2
Acceder desde cualquier parte de un programa a las funciones privadas y a las sub-funciones. De esta forma se puede reducir el n´ umero de ficheros *.m necesarios, pues muchas funciones se podr´ an definir como sub-funciones en un mismo fichero.
3
Mejorar la eficiencia de las funciones que se utilizan repetidamente, pues no es necesario buscar el fichero *.m cada vez.
4
Las referencias de funci´ on son variables ordinarias de MATLAB que
pueden ser agrupadas en arrays de una o m´ as dimensiones.
Funciones inline
¿Que son?
Permite crear una funci´ on matematica con sus argumentos
1
El c´ odigo es el siguiente:
g = inline(‘x + y − 2’,‘x’,‘y’)
2
Esto crea la siguiente funci´ on:
g (x , y ) = x + y − 2
3
Para evaluar la funci´ on anterior, se coloca:
g (2, 5)
cuyo resultado es 5 (ver el archivo Func inline.m )
Funci´ on an´ onima
¿Que son?
Es una forma muy flexible de crear funciones sobre la marcha, bien en la l´ınea de comandos, bien en una l´ınea cualquiera de una funci´ on o script.
La forma general de las funciones an´ onimas es:
nombre fa = @(arg1,arg2...) expresi´ on
senoAngDoble = @(ang1,ang2) 2*(sin(ang1))*cos(ang2)
1
Para llamar a la funci´ on an´ onima se escribe lo siguiente: nombre fa (arg1,arg2,...)
2
Si la funci´ on an´ onima no tiene argumentos, hay que poner los par´ entesis vacios () tanto al definirlas como al llamarlas.
3
Ver el archivo Func anonima.m
Funciones anidadas I
nested functions
¿Que son?
Son funciones dentro de otras funciones, las llamadas funciones contenedoras.
1
Cuando se definen funciones anidadas, cada una de las funciones contenidas en el archivo *.m deben de terminar con end.
2
Un ejemplo de funciones anidadas:
function A(arg1) ...
function Aa(a1,a2) ...
function Aa1() ...
end end ....
function Ab()
Funciones anidadas II
nested functions
...
function Ab1() ...
end ...
function Ab2() ...
end ...
end ....
end
Reglas para llamar a las funciones anidadas:
1
Una funci´ on anidada se puede llamar desde cualquier otra funci´ on que
Funciones anidadas III
nested functions
2
Una funci´ on anidada se puede llamar directamente desde la funci´ on del nivel inmediatamente superior. Por ejemplo, la funci´ on A puede llamar a las funciones Aa y Ab, pero no a las funciones Ab1 y Ab2 que est´ an dos niveles m´ as abajo.
3
Una funci´ on anidada puede llamar a otras funciones anidadas en la misma funci´ on contenedora y al mismo nivel. Por ejemplo, la funci´ on Aa puede llamar a la funci´ on Ab, y la Ab1 a la Ab2.
4
Una funci´ on anidada puede llamar a todas las que est´ an por encima de ella en l´ınea directa. Por ejemplo, la funci´ on Ab2 puede llamar a las funciones A y Ab. Una funci´ on anidada no puede llamar a las que est´ an al mismo nivel en otra rama; por ejemplo, Aa1 no pueede llamar a Ab2.
5
Adem´ as, cualquier funci´ on anidada puede llamar a todas las
sub-funciones definidas en el mismo fichero.
Funciones m´ as importantes en Matlab
A continuaci´ on se listan los tipo de funciones m´ as importantes:
• Funciones matem´ aticas elementales.
• Funciones especiales.
• Funciones matriciales elementales.
• Funciones matriciales espec´ıficas.
• Funciones para la descomposici´ on y/o factorizaci´ on de matrices.
• Funciones para an´ alisis estad´ıstico de datos.
• Funciones para an´ alisis de polinomios.
• Funciones para integraci´ on de ecuaciones diferenciales ordinarias.
• Resoluci´ on de ecuaciones no-lineales y optimizaci´ on.
• Integraci´ on num´ erica.
Tipos de funciones
Existen al menos tres tipos de funciones:
1
Funciones que operan de modo escalar
2
Funciones que operan solo sobre vectores
3
Funciones que operan sobre matrices Funciones que operan sobre matrices
Las siguientes funciones exigen que el/los argumento/s sean matrices. En este grupo aparecen algunas de las funciones m´ as ´ utiles y potentes de MATLAB. Se clasifican en varios subgrupos:
I
Funciones matriciales elementales
I
Funciones matriciales especiales
I
Funciones de factorizaci´ on y descomposici´ on matricial
Funciones que operan de modo escalar
Estas funciones, que comprenden las funciones matem´ aticas y otras b´ asicas, cuando se aplican a una matriz act´ uan sobre cada elemento de la matriz. Entre estas funciones se encuentran:
sin(x), cos(x),... funciones trigonom´ etricas log(x) logaritmo natural log10(x) logaritmo decimal exp(x) funci´ on exponencial sqrt(x) ra´ız cuadrada
sign(x) funci´ on signo: devuelve -1 si < 0, 0 si = 0 y 1 si > 0
abs(x) valor absoluto
angle(x) ´ angulo de fase
Funciones que operan solo sobre vectores
Las siguientes funciones s´ olo act´ uan sobre vectores (no sobre escalares ni matrices):
[xm, im] = max (x ) m´ aximo elemento de un vector. Devuelve el valor m´ aximo xm y la posici´ on que ocupa im
min(x) m´ınimo elemento de un vector. Devuelve el valor m´ınimo y la posici´ on que ocupa
sum(x) suma de los elementos de un vector
cumsum(x) devuelve el vector suma acumulativa de los elementos de un vector (cada elemento del resultado es una suma de elementos del original)
mean(x) valor medio de los elementos de un vector std(x) desviaci´ on t´ıpica
prod(x) producto de los elementos de un vector
cumprod(x) devuelve el vector producto acumulativo de los elementos de un vector [y , i ] = sort(x ) ordenaci´ on de menor a mayor de los elementos de un vector x. Devuelve
el vector ordenado y, y un vector i con las posiciones iniciales en x de los elementos en el vector ordenado y.
En realidad estas funciones se pueden aplicar tambi´ en a matrices, pero en ese caso se aplican
por separado a cada columna de la matriz, dando como valor de retorno un vector resultado de
aplicar la funci´ on a cada columna de la matriz considerada como vector.
Funciones que operan sobre matrices
Funciones matriciales elementales
B = A
0calcula la traspuesta (conjugada) de la matriz A B = A.
0calcula la traspuesta (sin conjugar) de la matriz
A
v = poly (A) devuelve un vector v con los coeficientes del po- linomio caracter´ıstico de la matriz cuadrada A t = trace(A) devuelve la traza t (suma de los elementos de la
diagonal) de una matriz cuadrada A
[m, n] = size(A) devuelve el n´ umero de filas m y de columnas n de una matriz rectangular A
n = size(A) devuelve el tama˜ no de una matriz cuadrada A nf = size(A, 1) devuelve el n´ umero de filas de A
nc = size(A, 2) devuelve el n´ umero de columnas de A
Funciones que operan sobre matrices
Las funciones exp(), sqrt() y log() se aplican elemento a elemento a las matrices y/o vectores que se les pasan como argumentos. Existen otras funciones similares que tienen tambi´ en sentido cuando se aplican a una matriz como una ´ unica entidad. Estas funciones son las siguientes (se distinguen porque llevan una “m” adicional en el nombre):
Funciones matriciales especiales
expm(A) si A = XDX 0 , expm(A) = X ∗ diag (exp(diag (D))) ∗ X 0
sqrtm(A) devuelve una matriz que multiplicada por s´ı misma da la matriz A
logm() es la funci´ on rec´ıproca de expm(A)
Funciones que operan sobre matrices
Funciones de factorizaci´ on y descomposici´ on matricial U = chol (A) descomposici´ on de Cholesky de matriz sim´ etrica
y positivo definida. S´ olo se utiliza la diagonal y la parte triangular superior de A. El resultado es una matriz triangular superior tal que A = U
0∗U [X , D] = eig (A) valores propios (diagonal de D) y vectores pro- pios (columnas de X) de una matriz cuadrada A.
Con frecuencia el resultado es complejo (si A no es simetrica)
[X , D] = eig (A, B) valores propios (diagonal de D) y vectores pro-
pios (columnas de X) de dos matrices cuadra-
das A y B (Ax = λBx ). Los vectores pro-
pios estan normalizados de modo que X
0∗ B ∗
X = I . Cuando A es simetrica y B es simetri-
ca y definida-positiva se puede utilizar [X , D] =
eig (A, B,
0chol
0).
Variables I
Tipos de variables
Matlab tiene tres tipos b´ asicos de variables:
1
Variables locales
I
Funciones: estas tienen sus propias variables locales localizadas en su propio workspace y no pueden ser usadas por otra funci´ on o script.
I
Las variables locales de una funci´ on se crean y destruyen cada vez que se ejecuta la funci´ on.
I
Script: estas tienen sus propias variables locales localizadas en el workspace base y que est´ an al alcance de otros scripts.
2
Variables globales
I
Son visibles en todas las funciones que las declaran como tales; y en el espacio de trabajo base si tambi´ en ah´ı han sido declaradas como globales.
I
Para declarar una variable como global se hace lo siguiente:
global NOMBRE VARIABLE1 NOMBRE VARIABLE2
I
El nombre de las variables globales generalmente se escriben en
may´ usculas y son largas (m´ as de 5 letras).
Variables II
Tipos de variables
3
Variables persistentes
I
Se pueden definir en funciones y no en scripts.
I
Son variables locales de las funciones que conservan su valor entre distintas llamadas a la funci´ on.
I
Matlab no las limpia desde memoria cuando la funci´ on concluye, as´ı que sus valores son retnidos de una llamada de funci´ on a otra.
I
Solo la funci´ on en la cual est´ an declaradas esta permitida acceder a ellas.
I
Para declarar una variable como persistente se hace lo siguiente:
persistent A B
I
Es habitual usar letras mayusculas.
Variables I
Nombre de variables
Los nombres de las variables deben de empezar con una letra y luego pueden contener: letras, d´ıgitos y subrayados.
Matlab distingue entre may´ usculas y min´ usculas; por tanto, “a” y
“A” no son la misma variable.
El n´ umero m´ aximo de caracteres que puede tener el nombre de una variable es de 63. Esto se puede observar escribiendo
namelengthmax en la l´ınea de comando.
Para verificar que el nombre de una variable es v´ alido, antes de ser usado, se utiliza la funci´ on isvarname, la cual retorna 1 si el nombre es v´ alido y 0 en otro caso.
Tener cuidado en asignar a una palabra reservada en Matlab como
nombre de una variable. Para ver las palabras reservadas en Matlab se
escribe: iskeyword
Variables II
Nombre de variables
Vida de las variables: las variables creadas en el prompt de Matlab o
por medio de un script existen hasta que se termina la sesi´ on de
Matlab. Las variables de una funci´ on existen hasta que la funci´ on
complete su ejecuci´ on a menos que se hayan declarado como globales
o persistentes.
Variables I
Lectura y escritura interactiva de variables
A continuaci´ on se ver´ a una forma sensilla de leer variables desde el teclado y escribir mensajes en la pantalla del PC.
1
Funci´ on input: permite imprimir un mensaje en la l´ınea de comandos de Matlab y recuperar como valor de retorno: valor num´ erico (escalar, vectores o matrices) o una expresi´ on (cadena de letras).
2
Comando que admite solo valor num´ erico:
n = input(‘escriba el n´ umero de ecuaciones’)
I
Este comando mostrar´ a en pantalla lo siguiente:
escriba el n´ umero de ecuaciones Esperando que el usuario introdusca un valor num´ erico
I
Al introducir el valor n´ umerico (por ejemplo 5), este valor se le asigna a la variable “n”. Por tanto se crea la variable “n” con valor 5 en el workspace
3
Comando que admite solo cadena de caracteres:
Variables II
Lectura y escritura interactiva de variables
nombre = input(’ ¿Como te llamas?’, ’s’)
I
Este comando mostrar´ a en pantalla lo siguiente:
¿Como te llamas?
Esperando que el usuario introdusca una cadena de caracteres.
I
El argumento ‘s´ındica que a la variable nombre se le asigna una cadena de caracteres.
I
Notar que si introducimos un n´ umero, este ser´ a considerado como una cadena de caracteres (texto).
4
Funci´ on disp: permite imprimir en pantalla un mensaje de texto o el valor de una matriz, pero sin imprimir su nombre.
I
Para mostras un texto:
disp(‘el programa ha terminado’)
Este comando imprime en pantalla: el programa ha terminado
I