Publicado el 30 de Agosto del 2018
1.514 visualizaciones desde el 30 de Agosto del 2018
653,7 KB
23 paginas
Creado hace 14a (03/03/2011)
Funciones en MATLAB
Estructura de una función:
function [ parametros_salida ] = nombre_funcion (parametros_entrada)
% comentarios de la descripción de la función
Bloque de instrucciones / cálculos (dentro de los cuales se asignan valores
a los parámetros de salida)
Obs.
• Las variables que fueron declaradas dentro de la función, “viven” sólo en
esa función (estas no existen fuera de ese ámbito). Se dice que dichas
variables son locales a la función.
• Las variables declaradas en el programa como GLOBAL (esto es, las
variables definidas en un script o en el ambiente de trabajo de Matlab), si
son validas dentro de las funciones. Sin embargo, no es una buena
práctica de programación usar variables globales en una función.
Prof. Saúl. Buitrago y Oswaldo Jiménez
Funciones en MATLAB
• Cada función debe ser almacenada en un archivo de extensión m, al igual
que los scripts. La diferencia en el caso de las funciones es que el nombre
del archivo donde está almacenada la función debe ser igual al nombre de
la función.
• Una función puede ser invocada directamente desde la ventana de
comandos de Matlab, dentro de otra función o en un script.
Ejemplo:
DEFINICIÓN DE LA FUNCIÓN
INVOCACIÓN DE LA FUNCIÓN
function yy = func(x,y)
% evaluación de yy = - y + x +1
yy = - y + x + 1
Escrita en un archivo de
de nombre “func.m”
>> yy = func(1,2) → yy = 0
Desde el ambiente
de trabajo de Matlab
Prof. Saúl. Buitrago y Oswaldo Jiménez
Funciones en MATLAB
nargin y nargout
• Si se usan dentro de la función :
nargin es la cantidad de parámetros de entrada en la invocación
de la función.
nargout es la cantidad de parámetros de salida en la invocación
de la función.
• Si se usan fuera de la función :
nargin es la cantidad de parámetros de entrada en la definición
de la función.
nargout es la cantidad de parámetros de salida en la definición
de la función.
Prof. Saúl. Buitrago y Oswaldo Jiménez
Funciones en MATLAB
nargin y nargout
Ejemplo:
DEFINICIÓN DE LA FUNCIÓN
function yy = func(x,y)
% evaluación de yy = - y + x +1
yy = - y + x + 1
Escrita en un archivo de
de nombre “func.m”
>> in = nargin(‘func’) → in = 2
>> out = nargout(‘func’) → out = 1
Desde el ambiente
de trabajo de Matlab
archivo : func.m
Prof. Saúl. Buitrago y Oswaldo Jiménez
Funciones en MATLAB
nargin y nargout
Ejemplo:
Se refiere a la
cantidad de
parámetros de
entrada que se
coloquen al
momento de
invocar la función
Prof. Saúl. Buitrago y Oswaldo Jiménez
archivo : imprime_matriz.m
Funciones en MATLAB
nargin y nargout
En el ejemplo de la lámina anterior, si se invoca la función
imprime_matriz desde el ambiente de trabajo de Matlab de la
siguiente manera:
>> A = [ 1 2 3; 4 5 6];
>> imprime_matriz(A,’result.txt’);
entonces se imprime la matriz A en el archivo de nombre result.txt,
mientras que al invocarla como:
>> A = [ 1 2 3; 4 5 6];
>> imprime_matriz(A);
entonces la matriz se imprime en pantalla.
En el primer caso nargin tomó el valor 2, mientras que en el segundo
caso tomó el valor 1.
Obs. Nótese que una función no tiene por qué tener parámetros de
salida (igual observación vale para los parámetros de entrada).
Prof. Saúl. Buitrago y Oswaldo Jiménez
Funciones en MATLAB
nargin y nargout
Ejemplo:
Se refiere a la
cantidad de
parámetros de
salida que se
coloquen al
momento de
invocar la función
Prof. Saúl. Buitrago y Oswaldo Jiménez
archivo : biseccion_nargout.m
Funciones en MATLAB
nargin y nargout
En el ejemplo de la lámina anterior, si se invoca la función bisección
desde el ambiente de trabajo de Matlab de alguna de las siguiente
maneras, usando f = inline('cos(x)-x')
>> raiz = biseccion(f,0,pi/2,0.01)
raiz =
0.7363
>> [raiz,numIt] = biseccion(f,0,pi/2,0.01)
>> [raiz,numIt,traza] = biseccion(f,0,pi/2,0.01)
0.7363
0.7363
raiz =
numIt =
5
raiz =
numIt =
5
traza =
0.7854 0.3927 0.5890 0.6872 0.7363
Prof. Saúl. Buitrago y Oswaldo Jiménez
Funciones en MATLAB
Funciones recursivas
Son aquellas que recurren a si mismas en su declaración (bloque de
instrucciones que la definen), en otras palabras se invocan a sí mismas.
Ejemplo 1: calculo de la potencia n de x, es decir xn
Función no recursiva (calpot)
Función recursiva (calpot_r)
Basado en xn = x * xn-1
Obs. Las 2 funciones producen el mismo resultado, pero las funciones
recursivas en general son más costosas desde el punto de vista de
ejecución y memoria utilizada.
Prof. Saúl. Buitrago y Oswaldo Jiménez
tic; x = calpot(2,500); toc
tic; x = calpot_r(2,500); toc
Funciones en MATLAB
Ejemplo: Cálculo de la integral de un polinomio en un intervalo [a,b] dado.
N: número de subintervalos en [a,b]
h
=
ab
−
N
area
=
xf
(
i
)
xf
(
i
1+
)
h
+
2
a
xi
xi+1
b
a
xi
+=
i
,0 K=
hi
N
,
xi
xi+1
total
=
h
0
i
=
xf
(2)
+
1
area
xfh
(
(
2
af
)(
⎧
(
⎨
⎩
h
0
N
1
−
∑
xf
(
i
)
xf
(
i
1
+
)
=
+
2
)
+
L
+
xf
(2
)
+
xf
(
))
=
N
N
1
−
bf
)(
)
+
+
2
N
1
−
∑
i
1
=
xf
(
i
)
⎫
⎬
⎭
Prof. Saúl. Buitrago y Oswaldo Jiménez
Funciones en MATLAB
Funciones como parámetros de otras funciones
En MATLAB, cualquiera de los parámetros de entrada de una función puede
ser, a su vez, una función, la cual es invocada de manera usual en el bloque
de instrucciones de la función que se está definiendo.
Ejemplo:
La función “integral”
aproxima la integral
de una función f dada,
usando el método del
trapecio. Así, la
función f es el primer
parámetro de la
función “integral”.
Nótese la invocación
de la función f en el
cálculo de int
Prof. Saúl. Buitrago y Oswaldo Jiménez
archivo : integral.m
Funciones en MATLAB
Funciones como parámetros de otras funciones (cont.)
Si ahora se quiere invocar la función “integral” en el ambiente de trabajo de
MATLAB, debe pasársele como primer parámetro otra función. Por ejemplo,
supóngase que se quiere aproximar la integral entre 0 y 1 de la función x2+1.
Si ésta se define en un archivo “func1.m” de la siguiente manera:
function y = func1(x)
y = x.^2 + 1;
entonces podemos invocar a “integral” como:
>> int_aprox = integral(@func1,0,1) → int_aprox = 1.33333333334999
o equivalentemente:
>> g = @func1;
>> int_aprox = integral(g,0,1) → int_aprox = 1.33333333334999
Prof. Saúl. Buitrago y Oswaldo Jiménez
Funciones en MATLAB
Funciones como parámetros de otras funciones (cont.)
En el caso de funciones cuya definición sea una fórmula, como en el ejemplo
anterior, se puede utilizar lo que se conoce como “funciones anónimas”. Este
método es muy práctico ya que no requiere que la función sea definida en un
archivo .m
En el caso del ejemplo anterior, se puede invocar la función “integral” para
calcular una aproximación de la integral entre 0 y 1 de la función x2+1, de la
siguiente manera:
>> int_aprox = integral(@(x) x.^2+1,0,1) → int_aprox = 1.33333333334999
o equivalentemente:
>> g = @(x) x.^2+1;
>> int_aprox = integral(g,0,1) → int_aprox = 1.33333333334999
Prof. Saúl. Buitrago y Oswaldo Jiménez
Funciones en MATLAB
Funciones como parámetros de otras funciones (cont.)
En el caso de funciones predefinidas en Matlab (funciones intrínsecas), tales
como sin, cos, exp, etc., se trabaja como en el caso de funciones definidas
en archivos .m. Por ejemplo, una aproximación de la integral de la función
seno en el intervalo [0,pi/2] se obtendría así:
>> int_aprox = integral(@sin,pi/2,0) → int_aprox = 0.99999999997944
o equivalentemente:
>> g = @sin;
>> int_aprox = integral(g, pi/2,0) → int_aprox = 0.99999999997944
Obs: Nótese que en esta invocación de la función “integral”, los extremos del
intervalo de integración fueron pasados en orden inverso respecto a los
ejemplos anteriores. Esto no representa un problema porque lo primero que
se hace en la función “integral” es asegurar que en el parámetro a quede
almacenado el extremo izquierdo del intervalo y en el parámetro b el extremo
derecho.
Prof. Saúl. Buitrago y Oswaldo Jiménez
Funciones en MATLAB
Funciones como parámetros de otras funciones (cont.)
Obs: En la última instrucción de la función “integral”, destaca la expresión
sum(f(v)), lo cual obliga a que la función parámetro f sea aplicable a vectores.
Es por eso que en la definición de la función “func1”
function y = func1(x)
y = x.^2 + 1;
era estrictamente necesario el uso del operador .^ en lugar de ^ (como
sería en el caso escalar).
Prof. Saúl. Buitrago y Oswaldo Jiménez
Funciones en MATLAB
Funciones como parámetros de otras funciones (cont.)
Un ejemplo en el cual no se puede usar una función anónima como parámetro
de entrada, sino que es necesario definirla en un archivo .m, es el siguiente:
xf
)(
=
1
⎧
⎨
x
⎩
2
+
1
x
si
1
0
<≤−
x
0si
1
≤≤
Se define la función “funcion_a_trozos” en el archivo “funcion_a_trozos.m”
como
function y = funcion_a_trozos(x)
y = zeros(1,length(x));
for i=1:length(x)
if x(i) < 0
y(i) = 1;
y(i) = x(i)^2 + 1;
else
end
end
Prof. Saúl. Buitrago y Oswaldo Jiménez
Funciones en MATLAB
Funciones como parámetros de otras funciones (cont.)
Luego, una aproximación de la integral de esta función en el intervalo [-1,1]
es:
>> int_aprox = integral(@funcion_a_trozos,-1,1)
int_aprox =
2.33333333340002.
Prof. Saúl. Buitrago y Oswaldo Jiménez
Funciones en MATLAB
Ejemplo: Cálculo de la integral de un polinomio en un intervalo [a,b] dado.
N: número de intervalos en [a,b]
h
=
ab
−
N
area
total
=
h
⎧
(
⎨
⎩
af
)(
+
2
bf
)(
)
+
N
∑
i
=
2
ixf
(
)
⎫
⎬
⎭
archivos :
calculo_integral_polinomio.m
const_polinomio.m
integral.m
Prof. Saúl. Buitrago y Oswaldo Jiménez
Graficas en 2 dimensiones
MATLAB tiene funciones básicas para crear gráficos 2D. Estas funciones se
diferencian principalmente por el tipo de escala que utilizan en los ejes de las
abscisas y las ordenadas.
Función “plot”
Crea un gráfico a partir de vectores y/o columnas de matrices, con
escalas lineales sobre ambos ejes.
>> x = [ 1.5, 2.2,
Comentarios de: Funciones en Matlab (0)
No hay comentarios