Funciones en Matlab

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 34

Clase 4: Funciones en Matlab

Hamilton Galindo

2015

Hamilton Galindo Clase 4: Funciones en Matlab 2015 1 / 34


Outline

1 Tipos de programas
2 Partes básicas de un programa
3 Caracterı́sticas generales de las funciones en Matlab
4 Help de directorios
5 Sub-funciones
6 Referencias de función
Creación de referencia de función
Evaluación de funciones mediante referencias
Utilidad de las referencias de función
Funciones inline
Funciones anónimas
Funciones anidadas
7 Funciones más importantes en Matlab
8 Tipos de funciones
Funciones que operan de modo escalar
Funciones que operan solo sobre vectores
Funciones que operan sobre matrices
9 Variables
Hamilton Galindo Clase 4: Funciones en Matlab 2015 2 / 34
Tipos de programas
En Matlab hay dos tipos de programas: scripts y functions. Un script es
el tipo de programa más 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
Útil para automatizar una serie de
Función
pasos
No acepta inputs Útil para extender el lenguaje de
Matlab para tus aplicaciones
Almacena variables en el
workspace base que es compartido Acepta inputs y muestra
con otros scripts a los cuales se resultados
puede acceder desde la linea de Almacena variables en el
comando. workspace interno de la función
Escribiendo el nombre del script (separado del workspace base)
en la lı́nea de comando, Matlab
ejecuta sus sentencias.
Hamilton Galindo Clase 4: Funciones en Matlab 2015 3 / 34
Partes básicas de un programa I

A continuación se muestra las partes básicas de un programa (por ejemplo


una función):

Definición de la 
función
Linea principal
Texto de ayuda

Cuerpo
p de la 
función

Comentarios

Hamilton Galindo Clase 4: Funciones en Matlab 2015 4 / 34


Partes básicas de un programa II
Las funciones y los scripts tienen las mismas partes, excepto la “lı́nea que
define a la función”, la cual aplica solo para funciones.

Parte del programa Descripción


Definición de la función Define el nombre de la función, y el número
(solo para funciones) y orden de los inputs y outputs
Lı́nea principal Es una descripción resumida del programa.
Se observa cuando escribimos help
Texto de ayuda Descripción más detallada del programa. Se
observa cuando escribimos help
Cuerpo del programa Código del programa
(función o script)
Comentarios Texto en el cuerpo del programa que explica
el trabajo interno del programa

A continuación se detalla cada parte del programa:

Hamilton Galindo Clase 4: Funciones en Matlab 2015 5 / 34


Partes básicas de un programa III

[1] Definición de la función


La “lı́nea que define la función”: [1] informa a Matlab que el archivo
contiene una función 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ón es (ejemplo):
function [y] = cobb douglas(alpha,beta)
Primera lı́nea de código para crear una función (términos generales):

function [out1,out2,...,outn] = function name(in1,in2...,ink)


Donde:
I function es el comando para definir una función

Hamilton Galindo Clase 4: Funciones en Matlab 2015 6 / 34


Partes básicas de un programa IV

I function name se refiere al nombre de la función (se recomienda


guardar el archivo *.m con este nombre). En caso de guardarlo con
otro nombre, al llamar a la función se debe de hacer con el nombre del
*.m file (Matlab ignora el nombre de la función). El nombre de la
función debe de empezar con una letra y debe de contener a lo máximo
63 caracteres alfa-numéricos (ver con namelengtmax).
Se recomienda escribir el nombre en minúsculas.
I (in1,in2...,ink) son los argumentos de la función; es decir, los
valores que tendran que ser introducidos por el usuario
I [out1,out2,...,outn] representa el resultado (output) de la función.
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ón resumida del programa. Dado que es un comentario se inicia la
lı́nea con %.
[3] Texto de ayuda

Hamilton Galindo Clase 4: Funciones en Matlab 2015 7 / 34


Partes básicas 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ón cuando se escribe “help
nombre función”
[4] Cuerpo de la función
El cuerpo del programa (función o script) contiene todos los códigos de
Matlab necesarios para realizar los cálculos 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ón de los códigos usados en el programa. Para escribir un
bloque de comentarios se usa %{... %}

Hamilton Galindo Clase 4: Funciones en Matlab 2015 8 / 34


Caracterı́sticas generales de las funciones en Matlab I

1 Una función en Matlab es un programa, que contiene un conjunto de


instrucciones especificadas en un archivo de texto de extensión *.m
2 Para crear un programa (función o script) se usa un editor de texto
con extensión *.m (M-FILE)
3 Para editar un m-file se coloca: edit nombre programa; y el
programa se abrirá. Para abrir el editor solo se escribe edit
4 Comandos útiles 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ón: nombre – argumentos – retorno
6 Una función se llama utilizando su nombre
7 En Matlab las funciones pueden tener valores de retorno matriciales
múltiples
Hamilton Galindo Clase 4: Funciones en Matlab 2015 9 / 34
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ón puede tener un número variable de
argumentos y valores de retorno

Hamilton Galindo Clase 4: Funciones en Matlab 2015 10 / 34


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.

Hamilton Galindo Clase 4: Funciones en Matlab 2015 11 / 34


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ón 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

Hamilton Galindo Clase 4: Funciones en Matlab 2015 12 / 34


Referencias de función
function handles

¿Que es?
Es una forma para referirse al nombre de una función. Se usa para llamar a
una función indirectamente.

1 Su principal uso: es pasar a una función el nombre de otra función,


junto con sus argumentos, para que la pueda ejecutar.
2 Permite al programador un mayor control sobre la función 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úmero y tipo de argumentos.

Hamilton Galindo Clase 4: Funciones en Matlab 2015 13 / 34


Creación de referencia de función

Se puede crear de dos formas:


1 Mediante el operador @
Para crear una referencia de función, se coloca el @ antes del nombre
de la función:
fh = @sin
donde, al colocarle @ al incio del nombre de la función seno (sin) se
convierte en una referencia de función (fh)
2 Mediante la función str2func
función str2func recibe como argumento una cadena de caracteres
conteniendo el nombre de una función y devuelve como valor de
retorno la referencia de función.
fh = str2func(‘sin’)
>> fh = @sin

Hamilton Galindo Clase 4: Funciones en Matlab 2015 14 / 34


Evaluación de funciones mediante referencias I

1 La principal aplicación de las referencias de función es pasar


información de funciones a otras funciones para que aquellas puedan
ser ejecutas por estas.
2 Para evaluar una referencia de función se usa la función feval
¿Que es feval?
[r1,r2,r3...] = feval(fh,arg1,arg2,arg3...)
Donde: fh es una referencia de función y r1,r2,r3... y arg1,arg2,arg3...
son los valores de retorno y los argumentos de la función cuya referencia es
fh.
3 Una obsevación sobre feval:
I La referencia de función fh debe de ser un escalar. Es decir, no se
puede evaluar un array de referencias de función con una sola llamada
a feval.
4 Ejemplo: ver los archivos pruebafh.m y PruebafhMain.m

Hamilton Galindo Clase 4: Funciones en Matlab 2015 15 / 34


Utilidad de las referencias de función

1 Principal utilidad: pasar información de una función 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úmero de ficheros *.m necesarios, pues muchas funciones se podrán
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ón son variables ordinarias de MATLAB que
pueden ser agrupadas en arrays de una o más dimensiones.

Hamilton Galindo Clase 4: Funciones en Matlab 2015 16 / 34


Funciones inline

¿Que son?
Permite crear una función matematica con sus argumentos

1 El código es el siguiente:
g = inline(‘x + y − 2’,‘x’,‘y’)
2 Esto crea la siguiente función:

g (x, y ) = x + y − 2

3 Para evaluar la función anterior, se coloca:

g (2, 5)

cuyo resultado es 5 (ver el archivo Func inline.m )

Hamilton Galindo Clase 4: Funciones en Matlab 2015 17 / 34


Función anónima

¿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ón o script.
La forma general de las funciones anónimas es:

nombre fa = @(arg1,arg2...) expresión


senoAngDoble = @(ang1,ang2) 2*(sin(ang1))*cos(ang2)

1 Para llamar a la función anónima se escribe lo siguiente: nombre fa


(arg1,arg2,...)
2 Si la función anónima no tiene argumentos, hay que poner los
paréntesis vacios () tanto al definirlas como al llamarlas.
3 Ver el archivo Func anonima.m

Hamilton Galindo Clase 4: Funciones en Matlab 2015 18 / 34


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()

Hamilton Galindo Clase 4: Funciones en Matlab 2015 19 / 34


Funciones anidadas II
nested functions

...
function Ab1()
...
end
...
function Ab2()
...
end
...
end
....
end

Reglas para llamar a las funciones anidadas:


1 Una función anidada se puede llamar desde cualquier otra función que
tenga acceso al handle.

Hamilton Galindo Clase 4: Funciones en Matlab 2015 20 / 34


Funciones anidadas III
nested functions

2 Una función anidada se puede llamar directamente desde la función


del nivel inmediatamente superior. Por ejemplo, la función A puede
llamar a las funciones Aa y Ab, pero no a las funciones Ab1 y Ab2
que están dos niveles más abajo.
3 Una función anidada puede llamar a otras funciones anidadas en la
misma función contenedora y al mismo nivel. Por ejemplo, la función
Aa puede llamar a la función Ab, y la Ab1 a la Ab2.
4 Una función anidada puede llamar a todas las que están por encima
de ella en lı́nea directa. Por ejemplo, la función Ab2 puede llamar a
las funciones A y Ab. Una función anidada no puede llamar a las que
están al mismo nivel en otra rama; por ejemplo, Aa1 no pueede llamar
a Ab2.
5 Además, cualquier función anidada puede llamar a todas las
sub-funciones definidas en el mismo fichero.

Hamilton Galindo Clase 4: Funciones en Matlab 2015 21 / 34


Funciones más importantes en Matlab

A continuación se listan los tipo de funciones más importantes:


• Funciones matemáticas elementales.
• Funciones especiales.
• Funciones matriciales elementales.
• Funciones matriciales especı́ficas.
• Funciones para la descomposición y/o factorización de matrices.
• Funciones para análisis estadı́stico de datos.
• Funciones para análisis de polinomios.
• Funciones para integración de ecuaciones diferenciales ordinarias.
• Resolución de ecuaciones no-lineales y optimización.
• Integración numérica.

Hamilton Galindo Clase 4: Funciones en Matlab 2015 22 / 34


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ás útiles y potentes de MATLAB. Se
clasifican en varios subgrupos:

I Funciones matriciales elementales


I Funciones matriciales especiales
I Funciones de factorización y descomposición matricial

Hamilton Galindo Clase 4: Funciones en Matlab 2015 23 / 34


Funciones que operan de modo escalar

Estas funciones, que comprenden las funciones matemáticas y otras


básicas, cuando se aplican a una matriz actúan sobre cada elemento de la
matriz. Entre estas funciones se encuentran:

sin(x), cos(x),... funciones trigonométricas


log(x) logaritmo natural
log10(x) logaritmo decimal
exp(x) función exponencial
sqrt(x) raı́z cuadrada
sign(x) función signo: devuelve -1 si < 0, 0 si = 0 y
1 si > 0
abs(x) valor absoluto
angle(x) ángulo de fase

Hamilton Galindo Clase 4: Funciones en Matlab 2015 24 / 34


Funciones que operan solo sobre vectores
Las siguientes funciones sólo actúan sobre vectores (no sobre escalares
ni matrices):

[xm, im] = max(x) máximo elemento de un vector. Devuelve el valor máximo xm y la posición
que ocupa im
min(x) mı́nimo elemento de un vector. Devuelve el valor mı́nimo y la posición
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ón 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ón 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én 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ón a cada columna de la matriz considerada como vector.
Hamilton Galindo Clase 4: Funciones en Matlab 2015 25 / 34
Funciones que operan sobre matrices

Funciones matriciales elementales


0
B=A calcula la traspuesta (conjugada) de la matriz A
B = A.0 calcula 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úmero de filas m y de columnas n
de una matriz rectangular A
n = size(A) devuelve el tamaño de una matriz cuadrada A
nf = size(A, 1) devuelve el número de filas de A
nc = size(A, 2) devuelve el número de columnas de A

Hamilton Galindo Clase 4: Funciones en Matlab 2015 26 / 34


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én sentido cuando se aplican a una
matriz como una única 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ón recı́proca de expm(A)

Hamilton Galindo Clase 4: Funciones en Matlab 2015 27 / 34


Funciones que operan sobre matrices

Funciones de factorización y descomposición matricial


U = chol(A) descomposición de Cholesky de matriz simétrica
y positivo definida. Sólo 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,0 chol 0 ).
r = rank(A) calcula el rango r de una matriz rectangular A.

Hamilton Galindo Clase 4: Funciones en Matlab 2015 28 / 34


Variables I
Tipos de variables

Matlab tiene tres tipos básicos 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ón o script.
I Las variables locales de una función se crean y destruyen cada vez que
se ejecuta la función.
I Script: estas tienen sus propias variables locales localizadas en el
workspace base y que están 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én 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úsculas y son largas (más de 5 letras).

Hamilton Galindo Clase 4: Funciones en Matlab 2015 29 / 34


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ón.
I Matlab no las limpia desde memoria cuando la función concluye, ası́
que sus valores son retnidos de una llamada de función a otra.
I Solo la función en la cual están 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.

Hamilton Galindo Clase 4: Funciones en Matlab 2015 30 / 34


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úsculas y minúsculas; por tanto, “a” y
“A” no son la misma variable.
El número máximo 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álido, antes de ser
usado, se utiliza la función isvarname, la cual retorna 1 si el nombre
es válido 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

Hamilton Galindo Clase 4: Funciones en Matlab 2015 31 / 34


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ón de
Matlab. Las variables de una función existen hasta que la función
complete su ejecución a menos que se hayan declarado como globales
o persistentes.

Hamilton Galindo Clase 4: Funciones en Matlab 2015 32 / 34


Variables I
Lectura y escritura interactiva de variables

A continuación se verá una forma sensilla de leer variables desde el teclado


y escribir mensajes en la pantalla del PC.
1 Función input: permite imprimir un mensaje en la lı́nea de comandos
de Matlab y recuperar como valor de retorno: valor numérico (escalar,
vectores o matrices) o una expresión (cadena de letras).
2 Comando que admite solo valor numérico:
n = input(‘escriba el número de ecuaciones’)
I Este comando mostrará en pantalla lo siguiente:
escriba el número de ecuaciones
Esperando que el usuario introdusca un valor numérico
I Al introducir el valor númerico (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:

Hamilton Galindo Clase 4: Funciones en Matlab 2015 33 / 34


Variables II
Lectura y escritura interactiva de variables
nombre = input(’ ¿Como te llamas?’, ’s’)
I Este comando mostrará 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úmero, este será considerado como una
cadena de caracteres (texto).
4 Función 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 Para mostrar a una matriz:
disp(A)
Este comando imprime en pantalla los elementos de “A” peno no su
nombre (“A”).
Hamilton Galindo Clase 4: Funciones en Matlab 2015 34 / 34

También podría gustarte