Está en la página 1de 23

CAPITULO 3

FUNCIONES Y ARCHIVOS

MATLAB tiene muchas funciones incorporadas, que incluyen funciones trigonométricas,


logarítmicas, e hiperbólicas, así como también funciones para tratamiento de arreglos. Estas
funciones se resumen en la sección 3.1. Puedes definir tus propias funciones con un archivo
función, y puedes usarlo convenientemente justo como las funciones incorporadas. Explicaremos
esta técnica en la sección 3.2. La sección 3.3 trata temas adicionales en programación de función,
que incluye funciones handles, funciones Anonymous, sub funciones, y funciones anidadas. Otro
tipo de archivo que es útil en MATLAB es el archivo de datos. Importar y exportar tales archivos es
tratado en la sección 3.4.

Las secciones 3.1 y 3.2 contiene temas esenciales y deben ser cubiertos. El material en la sección
3.3 es útil para crear programas grandes. El material en la sección 3.4 es útil para lectores que
deben trabajar con grandes conjuntos de datos.

3.1 FUNCIONES MATEMÁTICAS ELEMENTALES

Algunas de las funciones, tales como sqrt y sin, están integradas. Estas son almacenadas como
archivo imagen y no son M-files. Son parte del núcleo de MATLAB así que son muy eficientes, pero
los detalles computacionales no son fácilmente accesibles. Algunas funciones son implementadas
en M-files. Puedes ver el código e incluso modificarlo, aunque no es recomendado.

FUNCIONES LOGARÍTMICA Y EXPONENCIAL

La tabla 3.1.1 resume algunas de las funciones comunes elementales. Un ejemplo es la función raíz
cuadrada sqrt. Para calcular √ 9, escribe sqrt(9) en la línea de comando. Cuando presiones Enter,
ves el resultado ans=3. Puedes usar funciones con variables. por ejemplo, considerar la sesión

Note que la función sqrt retorna solo la raíz positiva.


Una de las fortalezas de MATLAB es que tratara una variable como un arreglo automáticamente.
Por ejemplo, para calcular las raíces cuadradas de 5,7, y 15, escribir

La función raíz cuadrada opera sobre cada elemento en el arreglo x.

Similarmente, podemos escribir exp(2) para obtener e 2=7.3891, donde es es la base del logaritmo
natural. Escribir exp(1) da 2.7183, lo cual es e. Note que es texto de matemáticas, ln x denota el
logaritmo natural, cuando x=ey implica que

Porque ln e=1. Sin embargo, esta notación no ha sido traslada a MATLAB, el cual usa log(x) para
representar ln x.

El logaritmo común (base-10) es denotado en texto por log x o log 10x. esta definido por la relación
x=10y, esto es,

Porque log1010=1. La función del logaritmo común en MATLAB es log10(x).

Un error común es escribir log(x), en lugar de log10(x).

Otro erro común es olvidar usar el operador multiplicación de matriz .*. note que en la expresión
y=exp(x).*log(x), necesitamos usar el operador .* si x es un arreglo ya que tanto exp(x) y log(x)
serán arreglos.
FUNCIONES NUMÉRICAS

La función round redondea al entero mas cercano. Si y=[2.3 2.6 3.9], escribir round (y) da los
resultados 2 3 4. La función fix(x) trunca al entero mas cercano a cero. Escribir fix (y) da los
resultados 2 2 3. La función ceil redondea al entero mas cercano a infinito. Escribir ceil (y) produce
las respuestas 3 3 4.

Suponer z=[-2.6 -2.3 5.7]. la función floor redondea al entero más cercano al menos infinito.
Escribir floor (z) produce el resultado -3 -3 5. Escribir fix(z) produce las respuestas -2 -2 5. La
función abs calcula el valor absoluto. Así abs(z) produce 2.6 2.3 5.7

ARGUMENTOS DE FUNCIONES

Cuando se escribe matemáticas en texto, usamos paréntesis (), corchetes [], y llaves {} para
facilitar la legibilidad de expresiones, y tenemos mucha libertad sobre su uso. Por ejemplo,
podemos escribir sin2 en texto, pero MATLAB requiere paréntesis alrededor del 2 (que es llamado
el argumento de la función o parámetro). Así para evaluar sin 2 en MATLAB, escribimos sin (2). El
nombre de la función MATLAB debe ser seguido por un par de paréntesis que encierren el
argumento. Para expresar en texto el seno del segundo elemento del arreglo x, podríamos escribir
sin [x(2)]. Sin embargo, en MATLAB no puedes usar corchetes o llaves de esta manera, y debes
escribir sin (x(2)).

Puedes incluir expresiones y otras funciones como argumentos. Por ejemplo, si x es un arreglo,
para evaluar sin(x^2 + 5) , escribe sin (x.^2+5). Para evaluar sin( √ x ¿ +1)¿ , escribe sin(sqrt(x)+1).
Asegurarse de verificar el orden de precedencia y la cantidad y ubicación de los paréntesis cuando
se escribe tales expresiones.

Otro error común involucra expresiones tales como sin 2(x), que significa (sinx)2. En MATLAB, si x es
un escalar escribimos esta expresión como (sin(x)) 2, si no como sin^2(x),sin^2x, o sin(x^2)

FUNCIONES TRIGONOMÉTRICAS

Otras funciones usadas comúnmente son cos(x),tan(x),sec(x), y csc(x), que retorna cosx,tanx,secx,y
cscx, respectivamente. La tabla 3.1.2 lista las funciones trigonométricas de MATLAB que operan en
modo radian. Así sin(5) calcula el seno de 5 radianes, no el seno de 5°. Similarmente, las funciones
trigonométricas inversas retornan una respuesta en radianes. Las funciones que operan en modo
grado tienen la letra d agregada a sus nombres. Por ejemplo, sind(x) acepta los valores de x en
grados. para calcular el seno inverso en radianes, escribir asin(x). por ejemplo, asin(0.5) retorna la
respuesta 0.5236 radianes. Nota: en MATLAB, sin(x)^(-1) no da sin -1(x), da 1/sen(x).

MATLAB tiene dos funciones tangentes inversa. La función atan(x) calcula arctan x -el
arcotangente o tangente inversa- y retorna un ángulo entre -pi/2 y pi/2. Otra respuesta correcta es
el ángulo que se encuentra en el cuadrante opuesto. El usuario debe ser capaz de elegir la
respuesta correcta. Por ejemplo atan(1) retorna la respuesta 0.7854 radianes, que corresponden a
45°. Asi tan45°=1. Sin embargo, tan (45°+180)=tan 225°=1 también. Así arctan(1)=225° también es
correcto.

MATLAB proporciona la función atan2(y,x) para determinar el arcotangente inequívocamente,


donde x y y son las coordenadas del punto. El angulo calculado por atan2(y,x) es el ángulo entre
los ejes reales positivos y la línea desde el origen (0,0) hasta el punto (x,y). por ejemplo, el punto
x=1,y=-1 corresponde a -45° o -0.7854 radianes, y el punto x=-1, y=1 corresponde a 135° o 2.3562
radianes. Escribir atan2 (1,-1) retorna 2.3562. la función atan2(x,y) es un ejemplo de una función
que tiene dos argumentos. El orden de los argumentos es importante para tales funciones.
Actualmente no existe la función atan2d.

FUNCIONES HIPERBÓLICAS

Las funciones hiperbólicas son las soluciones de algunos problemas comunes en el análisis de
ingeniería. Por ejemplo, la curva catenaria la cual describe la forma de un cable colgante
soportado en sus dos extremos, puede ser expresada en términos del coseno hiperbólico, coshx,
que esta definido como

El seno hiperbolico, sinh x, esta definido como

El seno hiperbólico inverso, sinh-1x, es el valor y que satisface sinh y=x.

Otras series de funciones hiperbólicas han sido definidas. La tabla 3.1.3 lista estas funciones
hiperbólicas y los comando en MATLAB para obtenerlas.
3.2 FUNCIONES DEFINIDAS POR EL USUARIO

Otro tipo de M-file es un archivo función. A diferencia de un script file, todas las variables en un
archivo función son variables locales, lo cual significa que sus valores están disponibles solo dentro
de la función. Los archivos función son útiles cuando necesitas repetir un conjunto de comandos
varias veces. Son los bloques de construcción de programas mas grandes.

Para crear un archivo función, abrir el Editor/Debugger como se describió en el capitulo 1. La


primera línea en un archivo función debe empezar con una línea de definición de función que
tiene una lista de entradas y salidas. Esta línea distingue una función M-file de un script M-file. Sus
sintaxis son como sigue:

Las variables de salida son esas variables cuyos valores son calculados por la función, usando los
valores dados de las variables de entrada. Note que las variables de salida están encerradas en
corchetes (que es opcional si hay solo una salida), mientras que las variables de entrada deben
estar encerradas con paréntesis. El function_name debe ser el mismo que el nombre del archivo
en el cual esta guardado (con la extensión .m). esto es, si llamamos a una función drop, debería
estar guardada en el archivo drop.m. la función es llamada al escribir su nombre (por
ejemplo,drop) en la línea de comandos. La palabra function en la línea de definición de función
debe estar en minúscula. Antes de nombrar una función, puedes usar la función exist para ver si
otra función tiene el mismo nombre.
ALGUNOS EJEMPLOS DE FUNCIONES SIMPLES

Las funciones operan en variables dentro de su propio espacio de trabajo (llamadas variables
locales), que esta separado del espacio de trabajo que accedes en el prompt comando de MATLAB.
Considere la siguiente función definida por el usuario fun

Note el uso del operador de exponenciación de matriz (.^). Este permite que la función acepte a y
como un arreglo. Ahora considerar que sucede cuando llamas esta función de varias maneras en la
ventana de comando. Llamar la función con su argumento de salida:

La función usa x=3 y y=7 para calcular z.

Llama la función sin su argumento de salida e intentar acceder su valor. Ver un mensaje de error.

Asignar el argumento de salida a otra variable:

Puedes suprimir la salida al poner un punto y coma después de llamar la función. Por ejemplo, si
escribes q=fun(3,7); el valor de q será calculado pero no mostrado.

Las variables x y y son locales a la función fun, así, a menos que pases sus valores al nombrarlos x y
y, sus valores no estarán disponibles en el espacio de trabajo fuera de la función. La variable u
también es local a la función. Por ejemplo,

Comparar esto con


Solo el orden de los argumentos es importante, no los nombres de los argumentos:

Puedes usar arreglos como argumentos de entradas:

Una función puede tener mas de una salida. Estas están encerradas en corchetes. Por ejemplo, la
función circle calcula el área A y circunferencia C de un círculo, dando sus radios como un
argumento de entrada.

La función es llamada como sigue, si r=4

Una función puede no tener argumentos de entrada ni lista de salida. Por ejemplo, la siguiente
función definida por usuario show_date calcula y almacena la fecha en la variable today, y muestra
el valor de today

VARIACIONES EN LA LÍNEA DE FUNCIÓN

Los siguientes ejemplos muestran variaciones admisibles en el formato de la línea de función. Las
diferencias dependen en si no hay salida, una sola salida, o múltiples salidas.
El ejemplo 1 es una función con una entrada y una salida. Los corchetes son opcionales cuando
solo hay una salida (ver ejemplo 2). El ejemplo 3 tiene una salida y tres entradas. El ejemplo 4
tiene dos salidas y una entrada. El ejemplo 5 no tiene variable de salida (por ejemplo, una función
que genere una gráfica). En tales casos el signo igual puede ser omitido.

Las líneas comentarios inician con el signo % que puede ser ubicado en cualquier lado en el archivo
función. Sin embargo, si usas help para obtener información sobre la función, MATLAB muestra
todas las líneas comentarios inmediatamente después de la línea de definición de función hasta la
primera línea en blanco o la primera línea ejecutable. La primera línea comentario puede
accederse por el comando lookfor.

Podemos llamar tanto a las funciones incorporadas como a las definidas por el usuario ya sea con
variables de salida explícitamente especificadas, como en los ejemplos 1 a 4, o sin ninguna variable
de salida especificada. Por ejemplo, podemos llamar la función square como square(side) si no
estamos interesados en su variable de salida área_square. (La funcion debe realizar alguna otra
operación que queramos que ocurra, tal como generar una grafica) Note que si omitimos el punto
y coma al final de la declaración de la función llamada, la primera variable en lista de variable de
salida será mostrada usando el nombre de la variable por defecto ans.

VARIACIONES EN LAS LLAMADAS A FUNCIONES

La siguiente función, denominada drop, calcula la velocidad y la distancia de caída de un objeto.


Las variables de entrada son la aceleración g, la velocidad inicial vo, y el tiempo transcurrido t.
note que debemos usar las operaciones elemento por elemento para cualquier operación que
involucre entradas de función que sean arreglos. Aquí anticipamos que t será un arreglo, de esta
manera usamos el operador elemento por elemento (.^).

los siguientes ejemplos muestras varias maneras para llamar la función drop:

1. Usar los nombres de las variables en la definición de función puede, pero no es necesario,
ser usados cuando la función es llamada:
2. No es necesario asignar valores a las variables de entrada fuera de la función antes de
llamar la función:

3. Las entradas y salidas pueden ser arreglos:

Llamar esta función genera los arreglos feet_dropped y speed, cada uno con seis valores
correspondientes a los seis valores de tiempo en el arreglo 0:1:5

VARIABLES LOCALES

Los nombres de las variables de entrada dados en la línea de definición de función son locales para
esa función. Esto significa que otros nombres de variables pueden ser usados cuando llamas la
función. Todas las variables dentro de una función se borran después de que la función termina de
ejecutarse, excepto cuando los mismos nombres de las variables aparecen en la lista de variable
de salida en la llamada de función.

Por ejemplo, cuando usamos la función drop en un programa, podemos asignar un valor a la
variable dist antes de llamar la función, y su valor se mantendrá sin cambios después de llamarla
porque su nombre no fue usado en la lista de salida de la llamada declaración (la variable
feet_dropped fue usada en lugar de dist). Esto es lo que se quiere decir por las variables de
funciones que son locales a la función. Esta característica nos permite escribir generalmente
funciones útiles usando variables de nuestra elección, sin estar preocupado de que al llamar el
programa use los mismos nombres de variables para otros cálculos. Esto significa que nuestros
archivos función son portables y no necesitan volverse a escribir cada vez que son usados en
diferentes programas.

VARIABLES GLOBALES

El comando global declara ciertas variables globales, y por lo tanto sus valores están disponibles
para el espacio de trabajo básico y para otras funciones que declaran estas variables globales. La
sintaxis para declarar las variables A,X, y Q es global A X Q. Usar un espacio, no una coma, para
separar las variables. cualquier asignación para estas variables, en cualquier función o en el
espacio de trabajo básico, esta disponible para todas las otras funciones declarándolas globales. Si
la variable global no existe la primera vez que emites la declaración global, será inicializada para la
matriz vacía. Si una variable con el mismo nombre que la variable global ya existe en el espacio de
trabajo actual, MATLAB emite una advertencia y cambia el valor de esa variable para ajustar la
global. En una función definida por el usuario, hacer que el comando global sea la primera línea
ejecutable. Coloque el mismo comando en el programa de llamada. Es habitual, pero no
requerido, capitalizar los nombres de las variables globales y usar nombres largos, hacerlas
fácilmente reconocibles.

La decisión para declarar una variable global no es siempre clara. Se recomienda evitar usar
variables globales. A menudo esto puede hacerse al usar funciones anónimas y anidadas, como se
discute en la sección 3.3.

FUNCIONES HANDLES

Una función handle es una forma de citar una función dada. Introducida por primera vez en
MATLAB 6.0, la función handle se ha vuelto ampliamente utilizada y frecuentemente aparece en
ejemplos a lo largo de la documentación de MATLAB. Puedes crear una función handle para
cualquier función al usar el signo @ antes del nombre de la función. Entonces puedes dar al
identificador un nombre, si deseas, y puedes usar el indentificador para citar la función.

Por ejemplo, considerar la siguiente función definida por el usuario, que calcula

Para crear un identificador a esta función y nombrar el identificador fh1, escribe fh1=@f1.

FUNCIONES FUNCIONES

Algunas funciones MATLAB actúan sobre funciones. Estos comandos son denominados function
functions. Si la función sobre la que se actúa no es una función simple, es más conveniente definir
la función en un M-file. Puedes pasar la función a la función de llamada al usar una función handle.

ENCONTRAR LOS CEROS DE UNA FUNCIÓN

Puedes usar la función fzero para encontrar el cero de una función de una sola variable, que es
denotada por x. su sintaxis básica es

Donde @function es una función handle y x0 es una estimación suministrada por el usuario para el
cero. La función fzero retorna un valor de x que esta cerca a x0. Identifica solo puntos donde la
función cruza al eje x, no puntos donde la función solamente toca al eje. Por ejemplo,
fzero(@cos,2) retorna el valor de x=1.5708. Como otro ejemplo, y=x 2 es una parábola que toca el
eje x en x=0. Sin embargo, no se encontrará ningún cero, porque la función nunca cruza el eje.

La función fzero(@function,x0) intenta encontrar un cero de function cerca de x0, si x0 es un


escalar. El valor retornado por fzero es un punto cerca donde la función cambia de signo, o NaN si
la búsqueda falla. En este caso, la búsqueda termina cuando el intervalo de búsqueda se expande
hasta un Inf, NaN, o un valor complejo es encontrado (fzero no puede encontrar ceros complejos).
Si x0 es un vector de longitud 2, fzero asume que x0 es un intervalo donde el signo de function
(xo(1)) difiere del signo de function (x0(2)). Un error ocurre si esto no es verdad. Llamar fzero con
tal intervalo garantiza que fzero retornara un valor cerca de un punto donde la function cambia de
signo. Graficar primero la función es una buena manera para obtener un valor para el vector x0. Si
la función no es continua, fzero podría retornar valores que son puntos discontinuos en lugar de
ceros. Por ejemplo, x=fzero(@tan,1) retorna x=1.5708, un punto discontinuo en tan (x).

Las funciones pueden tener mas de un cero, por lo que ayuda graficar la función primero y luego
usar fzero para obtener una respuesta que es mas exacta que la respuesta leída de la gráfica. La
figura 3.2.1 muestra la grafica de la función y=x+2e -x-3, la cual tiene dos ceros, uno cerca de x=-0.5
y uno cerca de x=3. Usando el archivo función f1 creado anteriormente para encontrar el cero
cerca de x=-0.5, escribir x=fzero(@f1,-0.5). la respuesta es x=-0.5831. para encontrar el cero cerca
de x=3, escribir x=fzero(@f1,3). La respuesta es x=2.8887.

La sintaxis fzero(@f1,-0.5) es preferia a la sintaxis vieja fzerp(‘f1’,-0.5).

MINIMIZAR UNA FUNCIÓN DE UNA VARIABLE

La función fminbnd encuentra el mínimo de una función de una sola variable, que es denotada por
x. su sintaxis básica es
Donde @function es una función handle. La función fminbnd retorna un valor de x que minimiza la
función en el intervalo x1≤x≤x2. Por ejemplo, fminbnd(@cos,0,4) retorna el valor x=3.1416.

Sin embargo, para usar esta función para encontrar el mínimo de funciones muy complicadas, es
mas conveniente definir la función en un archivo función. Por ejemplo. Si y=1-xe -x, definir el
siguiente archivo función:

Para encontrar el valor de x que de un mínimo de y para 0≤x≤5, escribir x=fminbnd(@f2,0,5). La


respuesta es x=1. Para encontrar el valor mínimo de y, escribir y=f2(x). el resultado es y=0.6321.

Siempre que usemos una técnica de minimización, deberíamos comprobar que la solución es un
mínimo verdadero. Por ejemplo, considerar el polinomio y=0.025x 5-0.0625x4-0.333x3+x2. Su grafica
se muestra en la figura 3.2.2. La función tiene dos puntos mínimos en el intervalo -1<x<4. El
mínimo cerca de x=3 es llamado un mínimo relativo o mínimo local porque forma un valle cuyo
punto mas bajo es mas alto que el mínimo en x=0. El mínimo en x=0 es el mínimo verdadero y
también se denomina el mínimo global. Primero crear el archivo función

Para especificar el intervalo -1≤x≤4, escribir x=fminbnd(@f3,-1,4). MATLAB proporciona la


respuesta x=2.0438e-06, que es esencialmente cero, el punto mínimo verdadero. Si especificamos
el intervalo 0.1≤x≤2.5, MATLAB proporciona la respuesta x=0.1001, que corresponde a el valor
mínimo de y en el intervalo 0.1≤x≤2.5. De esta manera pasaremos por alto el punto mínimo
verdadero si nuestro intervalo especificado no lo incluye.

También fminbnd puede dar respuestas engañosas. Si especificamos el intervalo 1≤x≤4, MATLAB
proporciona la respuesta x=2.8236, que corresponde al valle mostrado en la gráfica, pero el cual
no es el punto mínimo en el intervalo 1≤x≤4. En este intervalo el punto mínimo esta en el limite
x=1. El procedimiento fminbnd busca para un punto mínimo correspondiente a una pendiente
cero. En la práctica, el mejor uso de la función fminbnd es para determinar precisamente la
ubicación de un punto mínimo cuya ubicación aproximada fue encontrada por otros medios, tales
como graficar la función.
La tabla 3.2.1 resume la sintaxis básica de los comandos fminbnd, fminsearch y fzero.

3.3 TEMAS DE FUNCIONES ADICIONALES

Además de las funciones handles , las funciones anónimas, subfunciones, y funciones anidadas son
algunas de las funciones mas recientes de MATLAB. Esta sección trata las características básicas de
estos nuevos tipos de funciones.
MÉTODOS PARA LLAMAR FUNCIONES

Hay cuatro maneras para invocar, o llamar, una función a la acción:

1) Como una cadena de caracteres que identifica la función apropiada M-file.


2) Como una función handle
3) Como una función objeto ‘en línea’
4) Como una expresión de cadena

Ejemplos de estas maneras para la función fzero usada con la función definida por el usuario fun1,
que calcula y=x2-4.

1) Como una cadena de caracteres que identifica la función apropiada M-file, que es

La función puede ser llamada como sigue, para calcular el cero sobre el rango 0≤x≤3:

2) Como una función handle para una función M-file existente:

3) Como un objeto de funcion ‘inline’:

4) Como una expresión de cadena:

El método 2 no estaba disponible antes de MATLAB 0.6, y ahora se prefiere sobre el método 1. El
tercer método no se discute en este texto porque es un método mas lento que el segundo. El
tercer y cuarto método son equivalentes porque ambos utilizan la función inline, la única
diferencia es que con el cuarto método MATLAB determinar que el primer argumento de fzero es
una variable cadena y llama inline para convertir la variable cadena a una función objeto inline. El
método de la función handle es el método más rápido, seguido por el método 1.

Además, para acelerar la mejora, otra ventaja de usar una función handle es que proporciona
acceso a subfunciones, que normalmente no son visibles fuera de su definición M-file. Esto será
discutido después en esta sección.
TIPOS DE FUNCIONES

En este punto es útil repasar los tipos de funciones proporcionadas por MATLAB. MATLAB
proporciona funciones incorporadas, tales como clear, sin, y plot, que no son M-files, y algunas
funciones que son M-files, tales como la función mean. Además, los siguientes tipos de funciones
definidas por el usuario pueden ser creadas en MATLAB.

 La función primaria es la primera función en un M-file y típicamente contiene el programa


principal. Siguiendo la función principal en el mismo archivo puede ser cualquier cantidad
de subfunciones, que pueden servir como subprogramas para la función principal.
Usualmente la función principal es la única función en un M-file que puedes llamar desde
la línea de comandos de MATLAB o desde otro M-file función. Puedes invocar esta función
al usar el nombre del M-file en el cual esta definida. Normalmente usamos el mismo
nombre para la función y su archivo, pero si el nombre de la función difiere del nombre del
archivo, debes usar el nombre del archivo para invocar la función.
 Las funciones anónimas te permiten crear una función simple sin la necesidad de crear un
M-file para esto. Puedes construir una función anónima ya sea en la línea de comandos de
MATLAB o dentro de otra función o script. De este modo, las funciones anónimas
proporcionan una manera rápida de hacer una función desde cualquier expresión sin la
necesidad de crear, nombrar, y guardar un archivo.
 Las subfunciones están localizadas en la función primaria y son llamadas por la función
primaria. Puedes usar múltiples funciones dentro de una sola función M-file primaria.
 Las funciones anidadas son funciones definidas dentro de otra función. Pueden ayudar a
mejorar la legibilidad de tu programa y también darte más accesos flexibles a variables en
el M-file. La diferencia entre funciones anidadas y subfunciones es que las subfunciones
normalmente no pueden ser accedidas desde afuera de su archivo función principal.
 Las funciones de sobrecarga son funciones que responden diferentemente para diferentes
tipos de argumentos de entradas. Son similares a las funciones de sobrecarga en cualquier
lenguaje orientado a objetos. Por ejemplo, una función de sobrecarga puede ser creada
para tratar las entradas enteras de manera diferente de entradas de clase double.
 Las funciones privadas te permiten restringir el acceso a una función. Pueden ser llamadas
solo desde un M-file función en el directorio principal.

FUNCIONES ANÓNIMAS

Las funciones anónimas te permiten crear una función simple sin la necesidad de crear un M-file
para esto. Puedes construir una función anónima ya sea en la línea de comandos de MATLAB o
dentro de otra función o script. La sintaxis para crear una función anónima de una expresión es

Donde arglist es una lista separada por comas de argumentos de entrada que se pasan a la función
y expr es cualquier expresión de MATLAB única y valida. Esta expresión crea la función handle
fhandle, la cual te permite invocar la función. Note que esta sintaxis es diferente de la que se usa
para crear otras funciones handles, fhandle=@funtion_name. El identificador también es útil para
pasar la función anónima en una llamada a alguna otra función de la misma manera como
cualquier otra función handle.

Por ejemplo, para crear una función simple llamada sq para calcular el cuadrado de un número,
escribir

Para facilitar la legibilidad, puedes encerrar la expresión en paréntesis, como sq=@(x) (x.^2);. Para
ejecutar la función, escribir el nombre de la función handle, seguido por cualquier argumento de
entrada encerrado en paréntesis. Por ejemplo

Puedes pensar que esta función anónima particular no te ahorrara nada de trabajo porque
escribir sq([5,7]) requiere nueve pulsaciones, unas mas de las que se requieren para escribir
[5,7].^2. Aquí, sin embargo, la función anónima te protege de olvidar escribir el punto (.) requerido
para la exponenciación de matriz. Sin embargo, las funciones anónimas son útiles para funciones
mas complicadas que involucran mas pulsaciones.

Puedes pasar el identificador de una función anónima a otras funciones. Por ejemplo, para
encontrar el mínimo del polinomio 4x 2-50x+5 sobre el intervalo [-10,10], escribe

Si no vas a usar el polinomio otra vez, puedes omitir la línea de definición del identificador y
escribir en cambio

MÚLTIPLES ARGUMENTOS DE ENTRADA

Puedes crear funciones anónimas que tengan más de una entrada. Por ejemplo, para definir la
función √ x 2+ y 2 , escribir

Luego
Como otro ejemplo, considerar la función z=Ax+By que definen un plano. Las variables escalares A
y B deben asignarse valores antes de crear la función handle. Por ejemplo,

SIN ARGUMENTOS DE ENTRADA

Para construir un identificador para una función anónima que no tiene argumentos de entrada,
usar paréntesis vacíos para la lista de argumentos de entrada, como se muestra por lo siguiente:
d=@() date;.

Usar paréntesis vacíos cuando se invoque la función, como sigue:

Debes incluir los paréntesis. Si no lo haces, MATLAB solo identificará el identificador, no se


ejecutará la función.

LLAMAR UNA FUNCIÓN DENTRO DE OTRA

Una función anónima puede llamar a otra para implementar la composición de funciones.
Considerar la función 5sin(x^3). Está compuesta de las funciones g(y)=5sin(y) y f(x)=x^3. En la
siguiente sesión la función cuyo identificador es h llama a las funciones cuyos identificadores son f
y g para calcular 5sin(2^3)

Para conservar una función anónima de una sesión de MATLAB para la siguiente, guardar la
función handle para un MAT-File. Por ejemplo, para guardar la función asociada con el
identificador h, escribir save anon.mat h. Para recuperarla en una sesión posterior, escribir load
anon.mat h
VARIABLES Y FUNCIONES ANÓNIMAS

Las variables pueden aparecer en las funciones anónimas de dos maneras:

 Como variables especificadas en la lista de argumentos, tales como f=@(x) x.^3;.


 Como variables especificadas en el cuerpo de la expresión, tales como con las variables A y
B en plane=@(x,y) A*x+B*y. En este caso, cuando la función es creada, MATLAB capta los
valores de estas variables y conserva estos valores para el tiempo de vida de la función
handle. En este ejemplo, si los valores de A o B son cambiados después de que el
identificador es creado, sus valores asociados con el identificador no cambian. Esta
característica tiene tanto ventajas como desventajas, así que debes tenerlo en mente.

SUBFUNCIONES

Una función M-file puede contener mas de una función definida por el usuario. La primera función
definida en el archivo es denominada la función principal, cuyo nombre es el mismo que el
nombre del M-file. Todas las otras funciones en el archivo se denominan subfunciones. Las
subfunciones son normalmente ‘visibles, notables’ solo para la función principal y para otras
subfunciones en el mismo archivo; esto es, normalmente no puede ser llamadas por programas o
funciones fuera del archivo. Sin embargo, esta limitación puede ser removida con el uso de la
función handles, como veremos después en esta sección.

Primero crear la función principal con una línea de definición de función y su código de definición,
y nombrar el archivo, con el nombre de esta función como es costumbre. Luego crear cada
subfunción con su propia línea de definición de función y su código de definición. El orden de las
subfunciones no importa, pero los nombres de las funciones deben ser únicos dentro del M-file.

El orden en el cual MATLAB verifica las funciones es muy importante. Cuando una función es
llamada desde dentro de un M-file, MATLAB primero verifica para ver si la función es una función
incorporada tal como sin. Si no, se verifica para ver si es una subfunción en el archivo, luego
verifica para ver si es una función privada. Luego MATLAB verifica para un M-file estándar en su
ruta de búsqueda. De este modo, ya que MATLAB verifica para una subfunción antes de verificar
para M-file función privadas y estándar, puedes usar subfunciones con el mismo nombre que otro
M-file existente. Esta característica te permite nombrar subfunciones sin estar preocupado sobre
si otra función existe con el mismo nombre, así no necesitas elegir nombres de funciones largos
para evitar conflictos.

Esta característica también te protege de usar otra función involuntariamente.

Note que incluso puedes remplazar un M-funcion de esta manera. El siguiente ejemplo muestra
como el M-funcion mean puede ser remplazado por nuestra propia definición del promedio, uno
el cual da el valor de la raíz del cuadrado del promedio. La función mean es una subfunción. La
función subfun_demo es la función principal
A continuación, se muestra una sesión de muestra.

Si hubiéramos utilizado la M-function mean de MATLAB, habríamos obtenido una respuesta


diferente, esto es,

De este modo el uso de subfunciones te permite reducir la cantidad de archivos que definen tus
funciones. Por ejemplo, si no fuera por la subfunción mean en el ejemplo anterior, habríamos
tenido que definir un M-file separado para nuestra función mean y darle un nombre diferente de
manera que no se confundiera con la función de MATLAB del mismo nombre.

Las subfunciones son normalmente visibles solo para la función principal y otras subfunciones en
el mismo archivo. Sin embargo, podemos usar una función handle para permitir el acceso a la
subfunción desde fuera del M-file, como se muestra en el siguiente ejemplo.

Crear el siguiente M-file con la función principal fn_demo1 (range) y la subfunción testfun(x) para
calcular los ceros de la función (x^2-4)cos x sobre el rango especificado en la variable de entrada
range. Note el uso de una función handle en la segunda línea.
FUNCIONES ANIDADAS

Con MATLAB 7 ahora puedes colocar las definiciones de una o mas funciones dentro de otra
función. Así las funciones definidas se dicen ser anidadas dentro de la función principal. También
puedes anidar funciones dentro de otras funciones anidadas. Como cualquier M-file function, una
función anidada contiene los componentes habituales de un M-file function. Sin embargo, siempre
debes terminar una función anidada con una declaración end. De hecho, si un M-file contiene al
menos una función anidada, debes terminar todas las funciones, incluyendo subfunciones, en el
archivo con una declaración end, ya sean que contengan o no funciones anidadas.

El siguiente ejemplo construye una función handle para una función anidada p(x) y luego pasa el
identificador a la función fminbnd de MATLAB para encontrar el punto mínimo sobre la parábola.
La función parábola construye y retorna una función handle f para la función anidad p que evalúa
la parábola ax^2+bx+c. este identificador se pasa a fminbnd.

En la ventana de comandos escribir

Note que la función p(x) puede ver las variables a,b, y c en el espacio de trabajo de la función de
llamada.

Comparar este enfoque con el que requiere usar variables globales. Primero crear la función p(x)

Luego, en la ventana de comandos, escribir


Las funciones anidadas pueden parecer ser iguales que las subfunciones, pero no lo son. Las
funciones anidadas tienen dos propiedades únicas:

 Una función anidada puede acceder al espacio de trabajo de todas las funciones dentro de
la cual este anidada. Así, por ejemplo, una variable que tiene un valor asignado por la
función principal puede ser leído o sobrescrito por una función anidada en cualquier nivel
dentro de la función principal. Además, una variable asignada en una función anidada
puede ser leído o sobrescrito por cualquiera de las funciones que contienen esta función.
 Si construyes una función handle para una función anidada, el identificador no solo
almacena la información necesaria para acceder a la función anidada, sino también
almacena los valores de todas las variables compartidas entre la función anidada y
aquellas funciones que la contienen. Esto significa que estas variables persisten en
memoria entre llamadas realizadas por medio de la función handle.

Considerar la siguiente representación de algunas funciones denominadas A,B,…,E.

Llamas a una función anidada de varias maneras.

1) Puedes llamarla desde el nivel inmediatamente arriba de esta. (En el código previo, la
función A puede llamar a B o a D, pero no a C o E)
2) Puedes llamarla desde una función anidada en el mismo nivel dentro de la misma función
principal. (La función B puede llamar a D, y D puede llamar a B)
3) Puedes llamarla desde una función en cualquier nivel inferior. (La función C puede llamar a
B o D, pero no a E)
4) Si construyes una función handle para una función anidada, puedes llamar la función
anidada desde cualquier función de MATLAB que tenga acceso al identificador.

Puedes llamar una subfunción desde cualquier función anidada en el mismo archivo M.
3.4 TRABAJAR CON ARCHIVOS DE DATOS

Un archivo de datos ASCII puede terne una o más líneas de texto, denominadas el encabezado, al
principio. Estas podrían ser comentarios que describen qué representan los datos, la fecha que
fueron creados, y quien creo los datos, por ejemplo. Una o más líneas de datos, organizadas en
filas y columnas, sigue el encabezado. Las cantidades en cada fila podría ser separadas por
espacios o comas.

Si hay inconveniente para editar el archivo de datos, el entorno de MATLAB proporciona muchas
maneras para traer los datos creados por otras aplicaciones a el espacio de trabajo de MATLAB, un
proceso denominado importar datos, y empaqueta las variables del espacio de trabajo de modo
que puedan ser exportadas para otras aplicaciones.

Si el archivo tiene un cabezal o los datos están separados por comas, MATLAB producirá un
mensaje de error. Para corregir esta situación, primero cargar el archivo de datos en un editor de
texto, remover el cabezal, y remplazar las comas por espacios. Para recuperar estos datos a
MATLAB, escribir load filename. Si el archivo tiene m líneas con n valores en cada línea, los datos
serán asignados para una matriz mxn que tiene el mismo nombre que el archivo con la extensión
despojada de f. tu archivo de datos puede tener cualquier extensión excepto .mat, para que
MATLAB no intente cargar el archivo como un archivo del espacio de trabajo.

IMPORTAR ARCHIVOS DE HOJAS DE CALCULO

Algunos programas de hojas de calculo almacenan datos en el formato .wk1. Puedes usar el
comando M=wk1read (‘filename’) para importar estos datos a MATLAB y almacenarlos en la
matriz M. El comando A=xlsread (‘filename’) importa el archivo filename.xsl de libro de trabajo de
Microsoft Excel a el arreglo A. el comando [A,B]= xlsread (‘filename’) importa todos los datos
numéricos a el arreglo A y todos los datos de texto a el arreglo celda B.

EL ASISTENTE DE IMPORTACIÓN

Puedes usar el asistente de importación para importar muchos tipos de formatos de datos ASCII,
incluyendo datos en el portapapeles. El asistente de importación presenta una serie de cuadros de
diálogo en los cuales especificas el nombre del archivo, el delimitador usado en el archivo, y las
variables que deseas importar.

Haga lo siguiente para importar este archivo de datos ASCII delimitador por tabuladores de
muestra

1) Activar el asistente de importación ya sea al escribir uiimport o al seleccionar la opción


Import Data en el menú File en el escritorio de MATLAB. El asistente de importación
muestra un cuadro de dialogo que te pide especificar el nombre del archivo que deseas
importar.
2) El asistente de importación procesa los contenidos del archivo y muestra pestañas que
identifican las variables que reconocen en el archivo, y muestra una porción de los datos
en una cuadricula, similar a una hoja de cálculo. El asistente de importación usa el carácter
espacio como el delimitador por defecto. Después de que des click en Next, el asistente
de importación intenta identificar el delimitador.
3) En el siguiente cuadro de dialogo, el asistente de importación muestra una lista de las
variables encontradas en el archivo. También muestra el contenido de la primera variable
en la lista. En este ejemplo solo hay una variable, denominada testdata.
4) Elegir las variables que desees importar al dar click en las casillas de verificación siguientes
a sus nombres. Por defecto, todas las variables se comprueban para la importación.
Después de seleccionar las variables que deseas importar, dar click al botón Finish para
importar los datos a el espacio de trabajo de MATLAB.

Para importar datos desde el portapapeles, seleccionar Paste Special desde el menú Edit. Luego
proceder con el paso 2. El nombre de la variable por defecto es A_pastespecial.

EXPORTAR ARCHIVOS DE DATOS ASCII

Podrías querer exportar una matriz de MATLAB como un archivo de datos ASCII donde las filas y
columnas son representadas como valores numéricos delimitados por espacios. Para exportar una
matriz de MATLAB como un archivo de datos delimitados ASCII, puede usar ya sea el comando
save, especificando el calificador -ASCII, o la funcion dlmwrite. El comando save es fácil de usar; sin
embargo; la funcion dlmwrite proporciona gran exibilidad, permitiéndote especificar cualquier
carácter como un delimitador y exportar subconjuntos de un arreglo al especificar un rango de
valores.

Suponer que has creado el arreglo A=[1 2 3 4;5 6 7 8] en MATLAB. Para exportar el arreglo usando
el comando save, escribir lo siguiente en la ventana de comandos.

Por defecto, save usa espacios como delimitadores, pero puedes usar tab en lugar de espacios al
especificar el calificador -tab.

Que el señor FERNEY BUITRAGO ESCAMILLA, identificado con cedula de ciudadanía N° 1.096.186.751 de Barrancabermeja; laboro para esta compañía mediante contrato a termino
por obra o labor, desde 10 septiembre 2013 hasta 20 de febrero 2014; desempeñando el cargo de cuñero, con una asignación salarial de Un Millón Quinientos Noventa y cinco mil
Pesos ($ 1.500.000 m/te).

La presente se expide en la ciudad de Bogotá C.D, a solicitud del interesado, a los 27 días del mes Febrero 2014.

También podría gustarte