• No se han encontrado resultados

Clase 4: Funciones en Matlab

N/A
N/A
Protected

Academic year: 2021

Share "Clase 4: Funciones en Matlab"

Copied!
34
0
0

Texto completo

(1)

Clase 4: Funciones en Matlab

Hamilton Galindo

2015

(2)

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

(3)

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)

(4)

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

(5)

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:

(6)

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:

(7)

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

(8)

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 %{... %}

(9)

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

(10)

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

(11)

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.

(12)

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

(13)

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.

(14)

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

(15)

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

(16)

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.

(17)

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 )

(18)

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

(19)

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

(20)

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

(21)

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.

(22)

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.

(23)

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

(24)

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

(25)

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.

(26)

Funciones que operan sobre matrices

Funciones matriciales elementales

B = A

0

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´ 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

(27)

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)

(28)

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,

0

chol

0

).

(29)

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

(30)

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.

(31)

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

(32)

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.

(33)

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:

(34)

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

Para mostrar a una matriz:

Referencias

Documento similar

Como no basta incluir esta novela en el listado de una nueva novela histórica, ya que no toma a ningún héroe o acontecimiento que se plantee como central en

Las microalgas representan un importante soporte trófico para la acuicultura, tanto cualitativa como cuantitavamente, en diversos aspectos y especies objeto de cultivo.. Factores

saginata, se considera común en Europa del este (15), con una prevalencia mucho más baja en Europa occidental (del orden de 0.01%) (16).. Las infecciones humanas son endémicas

Porcentaje de radiación solar interceptada (RSI; 0,35 - 2,5 µm) y de radiación fotosintéticamente activa interceptada (RFAI) a lo largo del ciclo de cultivo para las

En el capítulo de desventajas o posibles inconvenientes que ofrece la forma del Organismo autónomo figura la rigidez de su régimen jurídico, absorbentemente de Derecho público por

La recuperación histórica de la terciaria dominica sor María de Santo Domingo en los últimos años viene dada, principalmente, por causa de su posible influjo sobre personajes

usando Excel 153 7.1 Introducción 153 7.2 Operaciones entre matrices y vectores con Excel 153 Matriz por vector columna 153 Vector fila por matriz 158 7.3 Multiplicación de

que hasta que llegue el tiempo en que su regia planta ; | pise el hispano suelo... que hasta que el