Está en la página 1de 22

Métodos numéricos 02 Funciones y ficheros de función Mg.

Amado Malca Villalobos

FUNCIONES Y FICHEROS DE FUNCION


Considere una función usual, con una variable de entrada (independiente, y una
variable de salida (dependiente). Lo que varía es la cantidad de argumentos que pueden
tener estas variables.
Ejemplo:
y  f  x   2 x  6 , una variable de entrada, y una de salida.
z  F  x, y   2 x 2  6 xy  y 3  8 , dos variables de entrada, y una de salida.
 u, v   G  x, y, z    2 x  5 y  z, x  3 y  5z  ,
tres variables de entrada, y dos de salida.
Para realizar estas funciones se usaran archivos script de extensión: ****.m. En el
desarrollo de estas funciones es posible usar funciones predefinidas por MatLab,
también se pueden usar funciones definidas por el usuario, las cuales deben ubicarse
siempre en la carpeta de trabajo de MatLab.

Funciones predefinidas: cos(x), sqrt(x), exp(x), det(A), etc.

Funciones definidas por el usuario; generalmente para representar una función que se
usara en varios programas adicionales.

x FUNCIÓ y  f  x
N

CREACIÓN DE UN ARCHIVO DE FUNCIÓN


Básicamente un archivo de función, es un archivo tipo .m, visto en el capítulo tres. Pero
la diferencia está en la primera línea, que lleva una forma especial, para indicar lo de
función. Además del nombre de tal archivo.

Definición de una función


Las funciones se crean del mismo modo que un script seleccionado en el menú New/Function y
se guardan en un fichero que tiene el mismo nombre que la función y extensión .m

La primera línea en el editor es la definición de la función que comienza con la palabra clave
function
function [variables_salida]=nombre_funcion(variables_entrada)
sentencias
end
O tambien
function variable_salida=nombre_funcion(variables_entrada)
sentencias
end
1. nombre_funcion, es el nombre significativo que se le asigna a la función y
coincide con el nombre del fichero de extensión .m en el que se guarda el código

02 archivos de función 1
Métodos numéricos 02 Funciones y ficheros de función Mg. Amado Malca Villalobos

de dicha función. Las reglas para nombrar una función son las mismas que para
las variables, los nombres no deben de incluir espacios, ni se pueden utilizar
palabras reservadas por MATLAB.
2. variables_entrada, es el conjunto de parámetros que se le pasa a la función.
Los nombres de las variables van entre paréntesis y separadas por coma.
3. variabales_salida, es el valor o conjunto de valores de las variables devueltos
por la función. Las variables de salida van después de la palabra reservada
function entre corchetes cuadrados y separados por comas si hay varios.
3. sentencias, líneas de código que tomando los valores de los parámetros de
entrada calculan mediante expresiones los valores que devuelve la función.
4. end, marca el final de la función es opcional (salvo en las funciones anidadas)
pero es conveniente acostumbrarse a ponerlo al finalizar la función.

Opcionalmente, en la segunda línea se pone un comentario, en el que se explica la tarea


que realiza la función. A continuación, una explicación detallada sobre las variables de
entrada y de salida

1. Cuando una función no devuelve ningún valor, se define


function nombre_funcion(variables_entrada)
2. Cuando una funcion no precisa de variables de entrada se define
function variables_salida=nombre_funcion
3. Cuando una función devuelve una solo resultado y se puede escribir, de dos maneras
function [y]=nombre_funcion(a,b,c)

function y=nombre_funcion(a,b,c)
4. En general, definiremos una función del siguiente modo:
function [y1, y2]=nombre_funcion(a,b,c)
Con tres argumentos a, b y c variables de entrada y que devuelve dos resultados en las
variables y1 e y2.

Una función se llama del mismo modo que las funciones predefinidas. Las funciones se
pueden llamar desde la ventana de comandos, desde un fichero script o desde otra
función.

Todas las variables en una función son locales a dicha función, incluyendo las de
entrada y las de salida.

La línea H1 y las líneas de texto de ayuda


Inmediatamente después de la línea de definición de función, están la llamada línea H1
y las líneas de texto de ayuda, que siempre empiezan con el símbolo “%”. Y
proporcionan información descriptiva sobre la función. La línea H1 es la que Matlab
busca en algunos casos de búsqueda de algunas palabras relacionadas con funciones.
Además esto se muestra con el comando “help nombre_funcion”
>> help trayectoria
Calculo de la altura y la distancia máximas que alcanzan un proyectil

Los argumentos de entrada son:


v0: velocidad inicial en m/s

02 archivos de función 2
Métodos numéricos 02 Funciones y ficheros de función Mg. Amado Malca Villalobos

theta: ángulo en grados.

Los argumentos de salida son:


hmax: altura máxima en metros
dmax: distancia máxima en metros

Cuerpo de la función
Aquí se tiene el código del programa mismo, que incluirá operaciones de entrada y/o
salida, también salida de gráficos si el problema lo amerita.

Vamos a ver unos cuantos ejemplos en esta página de funciones.


Ejemplo: Vamos a construir una función cuadrática, de la forma ( )

Archivo tipo .m funcuad.m Ventana de comandos de MatLab


function y =funcuad(x) >> y=funcuad(1),z=funcuad(2),w=funcuad(3)
y= 1
% Cálculo del valor de una z = 16
función cuadrática w = 37
% El argumento de entrada es: >> y=funcuad([1,2,3])
% x: un numero real
y = 1 16 37
% El argumento de salida es:
>> y=funcuad([1;2;3])
% y = 3x^2+6x-8, tambien real
y=
y=3*x.^2+6*x-8; 1
16
37
>> help funcuad
Cálculo del valor de una función cuadrática
El argumento de entrada es:
x: un numero real
El argumento de salida es:
y = 3x^2+6x-8, tambien real
Archivo script: funcuad.m

Con esta función se podrían hacer muchas cosas, como: graficar, derivar, integrar, etc.
Veamos una de ellas, grafiquemos en el intervalo [-10,10]

02 archivos de función 3
Métodos numéricos 02 Funciones y ficheros de función Mg. Amado Malca Villalobos

En la ventana de comandos de MatLab.


>> x=-10:0.1:10; y=funcuad(x); plot(x,y),grid
Grafico Resultante:
400

350

300

250

200

150

100

50

-50
-10 -5 0 5 10

Análisis completo de una función cuadrática

Problema: dada una función cuadrática mediante sus coeficientes, y el intervalo de


definición. Ingresados via una función que los pida por teclado, mostrar:
a) El vértice, el foco, el parámetro p, la directriz.
b) la grafica de la parábola con sus elementos
c) La integral en el intervalo [d,e]
[ ]
Equivale a
( ) ( )

( ) ( ) ( )

fcuadratica.m Ejecución en la ventana de comandos de


MatLab
function fcuadratica(a,b,c,d,e) >> fcuadratica(1,2,3,-4,5)

V=[-b/(2*a),c-(b^2/(4*a))]
V = -1 2
p=1/(4*a) p = 0.2500
F=V+[0,p] F = -1.0000 2.2500
dx=(e-d)/100 dx = 0.0900
x=d:dx:e;
y=a*x.^2+b*x+c; Intgral = 99.0000
inty=[a/3 b/2 c 0]; >>
Intgral=polyval(inty,e)-
polyval(inty,d)
n=length(x);
dz=(V(2)-p)*ones(n,1);
plot(x,y,x,dz)

02 archivos de función 4
Métodos numéricos 02 Funciones y ficheros de función Mg. Amado Malca Villalobos

40

35

30

25

20

15

10

0
-4 -3 -2 -1 0 1 2 3 4 5

Ejemplo: Cálculo de la altura y la distancia máximas que alcanzan un proyectil, cuando


se lanza con un ángulo determinado, y con una velocidad inicial dada.
funcuad.m
Function [hmax,dmax]=trayectoria(v0,theta)
% Cálculo de la altura y la distancia máximas, que alcanzan un
proyectil
%
% Los argumentos de entrada son:
% v0: velocidad inicial en m/s
% theta: ángulo en grados sexagesimales.
%
% Los argumentos de salida son:
% hmax: altura máxima en metros
% dmax: distancia máxima en metros

g=9.81;
v0x=v0*cos(theta*pi/180);
v0y=v0*sin(theta*pi/180);
thmax=v0y/g;hmax=v0y^2/(2*g);
ttot=2*thmax;dmax=v0x*ttot;

%Creación de un grafico de la trayectoria


tplot=linspace(0,ttot,200);
x=v0x*tplot;;
y=v0y*tplot-0.5*g*tplot.^2;
plot(x,y), grid
xlabel('DISTANCIA (m)')
ylabel('ALTURA (m)')
title('TRAYECTORIA DE UN PROYECTIL')
Ejecución en la ventana de comandos de MatLab
>> [hmax,dmax]=trayectoria(120,30)
hmax = 183.4862
dmax = 1.2712e+003
>> [hmax,dmax]=trayectoria(80,60)
hmax = 244.6483
dmax = 564.9911
>>

Grafico resultante

02 archivos de función 5
Métodos numéricos 02 Funciones y ficheros de función Mg. Amado Malca Villalobos

TRAYECTORIA DE UN PROYECTIL
250

200
ALTURA (m)

150

100

50

0
0 100 200 300 400 500 600
DISTANCIA (m)

Ventana del programa: trayectoria.m

Media y desviación estándar de un conjunto de datos

La definición de media y desviación estándar es la siguiente


∑ ∑ ( ̅)
̅ √

Creamos una función denominada estadistica a la que se le pasa un vector x de datos y


devuelve la media med y la desviación, des, y la guardamos en un fichero con el mismo
nombre que la función

02 archivos de función 6
Métodos numéricos 02 Funciones y ficheros de función Mg. Amado Malca Villalobos

Archivo en MatLab: estadística.m


function [med,des]=estadistica(x)
n=length(x);
med=sum(x)/n;
des=sqrt(sum((x-med).^2/(n-1)));
end
Ejemplo: Calcular la media y la desviación estándar de la altura de los 10 alumnos de
una clase: 1.65, 1.82, 1.72, 1.75, 1.73, 1.85, 1.90, 1.74, 1.76, 1.77.
Escribimos el nombre de la función estadistica en la ventana de comandos y le pasamos
el vector de datos
>> x=[1.65 1.82 1.72 1.75 1.73 1.85 1.90 1.74 1.76 1.77];
>> [media, desviacion]=estadistica(x)
media = 1.7690
desviacion = 0.0713

MATLAB dispone de dos funciones que calculan la media mean y la desviación


estándar, std.
>> x=[1.65 1.82 1.72 1.75 1.73 1.85 1.90 1.74 1.76 1.77];
>> mean(x)
ans = 1.7690
>> std(x)
ans = 0.0713

FUNCIONES ANÓNIMAS

Las funciones anónimas nos permiten definir una función simple sin necesidad de crearla y
guardarla en un fichero .m. Se pueden definir en la ventana de comandos, en un fichero script o
dentro de otra función, con la siguiente sintaxis:
variable=@(parámetros) expresion
expresion consiste en una única y válida expresión, puede tener una o más variables de entrada
que se especifican en la lista de argumentos separadas por comas. Puede incluir variables que se
han definido previamente
Las funciones se pueden asignar a variables y estas variables se pueden pasar a otras funciones
como se pasan escalares o vectores. Más adelante veremos cómo se llama a una función dentro
de otra función que se le pasa en uno de sus parámetros.
Comparamos la definición de una función func que se guarda en un fichero func.m y su
equivalente anónima
function y=func(x)
y=cos(x)-x;
end
Llamada a la función
>> z=func(0.5)
z = 0.3776
Su equivalente anónima se escribe en la ventana de comandos sin necesidad de guardarla en un
fichero y se llama del mismo modo que cualquier otra función
>> f=@(x) cos(x)-x;
>> z=f(0.5)
z = 0.3776
f guarda un valor asociado a una función que denominaremos manejador ( function handle)

02 archivos de función 7
Métodos numéricos 02 Funciones y ficheros de función Mg. Amado Malca Villalobos

En la ventana Workspace, vemos que aparece una variable f de distinto tipo que guarda la
referencia a la función anónima.
Sea una función anónima f que incluye una variable a cuyo valor definimos previamente
>> a=4;
>> f=@(x) a*x;
>> f(3)
ans = 12
Si cambiamos el valor de la variable a, el cambio no tiene efecto en la función f como vemos en
el siguiente código
>> a=5;
>> f(3)
ans = 12

Ejemplo: Teorema del coseno en triangulos

Calculamos el lado c del triángulo si conocemos los lados a y b y el ángulo en grados


sexagesimales comprendido γ, mediante el teorema del coseno
√ ( )
>> c=@(a,b,gamma) sqrt(a^2+b^2-2*a*b*cosd(gamma));
>> lado=c(3,4,30)
lado = 2.0531
Nota: MATLAB captura el valor de las variables cuando se define la función anónima. La
función anónima f(x) se define con un valor de a=2
>> a=2;
>> f=@(x) cos(a*x);
>> f(0.5)
ans = 0.5403
Ahora cambiamos el valor de la variable a=3, pero la función anónima f(x) no se modifica
>> a=3;
>> f(0.5)
ans = 0.5403
Para que la función f(x) utilice el nuevo valor de a hay que volverla a definir
>> a=3;
>> f=@(x) cos(a*x);
>> f(0.5)
ans = 0.0707

02 archivos de función 8
Métodos numéricos 02 Funciones y ficheros de función Mg. Amado Malca Villalobos

LLAMADA A UNA FUNCIÓN DESDE OTRA FUNCIÓN

Existen mucha situaciones en las que una función f1 utiliza otra función f2. Por ejemplo,
MATLAB tiene una función fzero que se utiliza para calcular las raíces de una ecuación f (x)=0.
La función f se le pasa a fzero cuando se llama para encontrar las raíces de f(x). Hay varias
formas de pasar una función f a otra función para su uso.
Ya hemos visto el significado de manejador para una función anónima, un valor que guarda una
variable f o c y que está asociado a una función.
Si definimos una función de forma explícita en un fichero por ejemplo, la función func,
obtenemos el manejador anteponiendo el carácter @ al nombre de la función

Ejemplo: La derivada de una función


Vamos ahora, a ver como se le pasa una función a otra función en uno de sus parámetros.
La derivada primera , de una función ( ) en un punto , se puede calcular
aproximadamente mediante la fórmula
( ) ( ) ( ) ( )

Donde h un un número pequeño en comparación con . Escribir una función denominada


derivada, cuyos parámetros sean la función f, y la abscisa x0 y devuelva el valor de la derivada
de la función ( ) en x0. Tomar . El valor de h para matlab, se escribe como:
.
Archivo en MatLab: derivada.m
function yp= derivada(f,x0)
h=1e-5;
yp=(f(x0-2*h)-8*f(x0-h)+8*f(x0+h)-f(x0+2*h))/(12*h);
end

En la ventana de comandos, definimos la función y=x3-6x2+3 (anónima) que queremos derivar y


llamamos a la función derivada.
>> f1=@(x) x^3-6*x^2+3;
>> derivada(f1,2)
ans = -12.0000
Calculamos también la derivada segunda de una función en un punto del siguiente modo
>> f2=@(x) derivada(f1,x);
>> derivada(f2,2)
ans = 9.8686e-007
Comparamos con el valor exacto

Para

FUNCIONES DEFINIDAS EN EL MISMO FICHERO

Un fichero función puede contener más de una función. Las funciones se definen una a
continuación de la otra. La primera función es la primaria y tiene el mismo nombre que el
fichero, las otras funciones son secundarias y se denominan subfunciones y pueden estar en
cualquier orden dentro del fichero. Solamente se puede llamar a la función primaria en la
ventana de comandos o por otras funciones. Cada función tiene sus propias variables que son
locales a la función, no se puede acceder a las variables de una subfunción desde la función
primaria o desde otra subfunción. No se puede acceder a las variables de la función primaria
desde una subfunción.
Las subfunciones permiten organizar tareas grandes en otras más pequeñas.

02 archivos de función 9
Métodos numéricos 02 Funciones y ficheros de función Mg. Amado Malca Villalobos

Más adelante veremos la utilidad de estas funciones cuando los programas sean más largos y
complejos, de momento vamos a ver un ejemplo que nos permita vislumbrar como se definen y
llaman las subfunciones.

Ejemplo: Ecuación de segundo grado


Resolveremos ahora una ecuación cuadrática

Las raíces son , tienen las siguientes propiedades:


√ √

Vamos a crear una función que nos permita comprobar las propiedades de las raíces de una
ecuación de segundo grado, y dos subfunciones, la primera calcula la raíz y la segunda la
raíz .
En el editor de funciones creamos la función comprobar_raices, a la que se le pasa los
coeficientes a, b y c de la ecuación de segundo grado y devuelve los cocientes -b/a y c/a de la
suma y producto de las dos raíces x1 y x2. Guardamos el código de la función primaria
comprobar_raices y de las subfunciones calcula_raiz1 y calcula_raiz2 en el fichero
comprobar_raices.m
Archivo en MatLab: comprobar raíces.m
function [suma,producto]=comprobar_raices(a,b,c)
x1=calcula_raiz1(a,b,c);
x2=calcula_raiz2(a,b,c);
suma=x1+x2;
producto=x1*x2;
end

function raiz=calcula_raiz1(a,b,c)
raiz=(-b+sqrt(b*b-4*a*c))/(2*a);
end

function raiz = calcula_raiz2(a,b,c)


raiz=(-b-sqrt(b*b-4*a*c))/(2*a);
end

Para comprobar las raíces de la ecuación de segundo grado x2-x-6=0, llamamos a la función
comprobar_raices y le pasamos los coeficientes 1,-1,-6 y nos devolverá -b/a=1 y c/a=-6
>> [-b/,c/a]=comprobar_raices(1,-1,-6)
b_a = 1
c_a = -6

FUNCIONES ANIDADAS

Una función anidada es una función definida dentro de otra función. Las funciones primarias y
las anidadas deben obligatoriamente terminar con end
Las funciones anidadas tienen acceso a las variables de la función primaria y la función primaria
tiene acceso a las variables definidas por la función anidada.
Una función anidada puede contener otra y así sucesivamente, pero este proceso puede llevar a
confusión. Existen reglas para llamar a una función anidada dentro de otra pero no tiene por el
momento interés para el lector.
En el editor de funciones creamos la función comprobar_raices1, a la que se le pasa los
coeficientes a, b y c de la ecuación de segundo grado y devuelve los cocientes -b/a y c/a de la
suma y producto de las dos raíces x1 y x2. Guardamos el código de la función primaria

02 archivos de función 10
Métodos numéricos 02 Funciones y ficheros de función Mg. Amado Malca Villalobos

comprobar_raices1 y de las subfunciones calcula_raiz1 y calcula_raiz2 en el fichero


comprobar_raices1.m
Archivo en MatLab: comprobar raíces1.m
function [r1,r2]=comprobar_raices1(a,b,c)
dis=sqrt(b*b-4*a*c);
calcula_raiz1;
calcula_raiz2;
r1=x1+x2;
r2=x1*x2;
function calcula_raiz1
x1=(-b+dis)/(2*a);
end
function calcula_raiz2
x2=(-b-dis)/(2*a);
end
end

Vemos que las funciones anidadas calcula_raiz1 y calcula_raiz2 tienen acceso a los parámetros
a, b y c de la función primaria, que son variables locales a la función comprobar_raices y
también, a la variable local dis, que guarda el discriminante de la ecuación de segundo grado.
Por otra parte, la función primaria tiene acceso a las variables x1 y x2 declaradas en cada una de
las funciones anidadas.
Estas funciones anidadas no precisan de variables de entrada y no devuelven nada.
Para comprobar las raíces de la ecuación de segundo grado x2-x-6=0, llamamos a la función
comprobar_raices1 y le pasamos los coeficientes 1,-1,-6 y nos devolverá -b/a=1 y c/a=-6
>> [b_a,c_a]=comprobar_raices(1,-1,-6)
b_a = 1
c_a = -6
Como ejercicio se porpone al lector crear la función estadistica_1, que devuelva la media y la
desviación estándar, cuando se le pasa un vector de datos. El valor medio se calculará mediante
la función anidada media y la desviación estándar mediante la función anidada desviacion.
En primer lugar, creamos la función estadistica_1, y dos funciones auxiliares: la función media
y la función desviacion en el mismo fichero estadistica_1.m
function [med,des]=estadistica_1(datos)
n=length(datos);
med=media(datos,n);
des=desviacion(datos,med,n);
end
%calcula la media del vector de datos
function res=media(x,num)
res=sum(x)/num;
end
%calcula la desviación estándar
function res=desviacion(x,m,num)
xd=x-m;
xd_suma=sum(xd.^2);
res=sqrt(xd_suma)/(num-1);
end
Ahora trasladamos las funciones media y desviacion al interior de la función estadistica _1.
function [med,des]=estadistica_1(x)
n=length(x);
media;
desviacion;
%calcula la media del vector de datos
function media

02 archivos de función 11
Métodos numéricos 02 Funciones y ficheros de función Mg. Amado Malca Villalobos

med=sum(x)/n;
end
%calcula la desviación estándar
function desviacion
xd=x-med;
xd_suma=sum(xd.^2);
des=sqrt(xd_suma)/(n-1);
end
end
En la ventana de comandos probamos las dos versiones de la función estadistica_1.
>> [med,des]= estadistica_1([1.65 1.82 1.72 1.75 1.73 1.85
1.90 1.74 1.76 1.77])
med =
1.7690
des =
0.0713

FUNCIONES EN LINEA
Se usan para realizar funciones simples, que también pueden tener una o más variables
de entrada.
nombre  inline  'exp resion matematica en forma de cadena '
nombre  inline  'exp resion matematica ','arg1','arg 2', ,'arg n ' 
y  f  x   3x 2  6 x  8
Ejemplo: Considerando la función cuadrática:
>> f=inline('3*x^2+6*x-8') % definiendo una function en linea
f = Inline function:
f(x) = 3*x^2+6*x-8
>> f=inline('3*x^2+6*x-8','x') % agregando la variable
f = Inline function:
f(x) = 3*x^2+6*x-8
>> f(1)
ans = 1
>> f(2)
ans = 16
Ejemplo: Ahora consideraremos una función real de dos variables:
>> G=inline('3*x+6*y+9*x*y-6','x','y')
G = Inline function:
G(x,y) = 3*x+6*y+9*x*y-6
>> G(1,2)
ans = 27
>> G(1,2),G(6,8)
ans = 27
ans = 492
>> [G(1,2), G(3,5), G(8,1), G(3,7)]
ans = 27 168 96 234
>> x=[1 2 3],y=[7 6 4]
x= 1 2 3
y= 7 6 4
>> G(x,y)
??? Error using ==> inlineeval at 15
Error in inline expression ==> 3*x+6*y+9*x*y-6
Inner matrix dimensions must agree.
Error in ==> inline.subsref at 27

02 archivos de función 12
Métodos numéricos 02 Funciones y ficheros de función Mg. Amado Malca Villalobos

INLINE_OUT_ = inlineeval(INLINE_INPUTS_,
INLINE_OBJ_.inputExpr, INLINE_OBJ_.expr);
Como aparece un error debemos redefinir la función, para cuando los argumentos son
vectores o matrices.
>> G=inline('3*x+6*y+9*x.*y-6','x','y') % véase la diferencia
G = Inline function:
G(x,y) = 3*x+6*y+9*x.*y-6
>> G(x,y)
ans = 102 144 135
>>
Ahora una función de dos variables de entrada y dos de salida
>> g=inline('[3*x+6*y+9,x+y-6]','x','y')
g = Inline function:
g(x,y) = [3*x+6*y+9,x+y-6]
>> g(2,3)
ans = 33 -1
>> x=[1 3 5],y=[9 8 4]
x= 1 3 5
y= 9 8 4
>> g(x,y)
ans = 66 66 48 4 5 3
>> g(1,9),g(3,8),g(5,4)
ans = 66 4
ans = 66 5
ans = 48 3
>>
Ejemplo: g  x, y   4 x5 y  7 x3 y 2  8x 2 y 4  6 x  29 y 6
>> G=inline('4*(x.^5).*y+7*(x.^3).*(y.^2)-8*(x.^2).*(y.^4)+6*x-29*(y.^6)')
G = Inline function:
G(x,y) = 4*(x.^5).*y+7*(x.^3).*(y.^2)-8*(x.^2).*(y.^4)+6*x-29*(y.^6)
>> G(5,6),G(8,7),G(9,1)
ans = -1505694
ans = -3547965
ans = 240676
>> x=[-2 -1 0 1 2 3 4 5],y=[-3 -2 -1 0 1 2 3 4]
x = -2 -1 0 1 2 3 4 5
y = -3 -2 -1 0 1 2 3 4
>> G(x,y)
ans = -23865 -2010 -29 6 135 -290 -15165 -105954

EL COMANDO “feval”
Este comando evalúa el valor de una función, en algún o algunos valores dados. La
diferencia con el caso anterior, está en que aquí se da la función, solo el nombre, y se
evalúa en el valor dado.
variable = feval(„nombre_funcion‟,valor_argumento)

Se tiene que seguir ciertos lineamientos, como son:


-El nombre de la función debe introducirse en forma de cadena.
-La función puede ser una de MATLAB, o alguna definida por el usuario.
- Los argumentos de entrada se separan por comas, y después del nombre de la función.
-Los argumentos de salida van entre corchetes, y separados por comas.

02 archivos de función 13
Métodos numéricos 02 Funciones y ficheros de función Mg. Amado Malca Villalobos

Ejemplo 01: Aquí vamos a definir una función H, y luego la evaluamos en x=1.
>> H=inline('exp(x.^2)./(1+x.^4)')
H = Inline function: H(x) = exp(x.^2)./(1+x.^4)
>> feval(H,1)
ans = 1.3591
>>
Ejemplo 02:
>> D=feval(inline('exp(x.^2)./(1+x.^4)'),1)
D = 1.3591
>> H=inline('exp(x.^2)./(1+x.^4)')
H = Inline function: H(x) = exp(x.^2)./(1+x.^4)
>> feval(H,1)
ans = 1.3591
Ejemplo 03:
>> G=inline('exp(x.^2)./(y+x.^4)')
G = Inline function: G(x,y) = exp(x.^2)./(y+x.^4)
>> feval(G,1,1)
ans = 1.3591
>> feval(G,4,5)
ans = 3.4046e+004
Ejemplo 04:
>> D=feval(inline('exp(x.^2)./(1+x.^4)'),1)
D = 1.3591
>> D=feval('sin',0)
D= 0
>> D=feval('sin',pi/6)
D = 0.5000
>> D=feval(inline('cos(x)+tan(x)'),pi/7)
D = 1.3825

6. FUNCIONES Y FICHERO DE FUNCIÓN


PROBLEMAS PROPUESTOS
1. Escriba una función en MATLAB con dos argumentos de entrada y dos de salida. La función
debe calcular la altura en pulgadas y la masa en libras de una persona a partir de su altura en
centímetros y de su peso en kilogramos. Utilice la siguiente definición de función para el
problema: in,lb  SIaSTi  cm,kg  . Los argumentos de entrada son la altura en centímetros
y el peso en kilogramos, y los argumentos de salida son la altura en pulgadas y la masa en
libras. Posteriormente utilice está función en la Ventana de Comandos para:
a) Determinar la altura en pulgadas y la masa en libras de una persona que mide 170 cm y pesa
70 kg.
b) Determinar su propia altura y peso en pulgadas y libras, respectivamente.
2. Escriba una función MATLAB para la siguiente función matemática:
y  x   0,9 x 4  12 x 2  5x
La entrada de la función será x , y la salida será y . Escriba la función de forma que x pueda
ser un vector, utilícela para:
a) Calcular y(-3) e y(5).
b) Representar gráficamente la función y  x  para 4  x4 .
3. Escriba una función MATLAB para la siguiente función matemática:

02 archivos de función 14
Métodos numéricos 02 Funciones y ficheros de función Mg. Amado Malca Villalobos

r    2 1,1  sen 2 
La entrada de la función será  (en radianes) y la salida será r . Escriba la función de forma
que  pueda ser un vector, y utilícela para:
a) Calcular r  / 3 y r  3 / 2 
b) Representar gráficamente (en coordenadas polares) r   para 0    2
4. Escriba una función MATLAB que calcule el máximo o mínimo local de una función
cuadrática de la forma: f ( x)  ax 2  bx  c . Utilice la siguiente línea de definición de la
función :  x,y  maxmin(a,b,c) . Los argumentos de entrada son las constantes. a, b y c y los
argumentos de salida son las coordenadas x e y del máximo o el mínimo de la función.
Utilice la función para calcular el máximo o el mínimo de las siguientes funciones:
a) f ( x)  3x 2  18x  48
b) f ( x)  5x 2  10 x  3
5. El valor P de una cuenta de ahorros, con un capital inicial P0 y una tasa de interés anual r
(en %) después de t años, viene dado por:
t
 r 
P  P0 1  
 100 
Escriba una función que calcule el valor futuro de una cuenta de ahorros. Utilice para ello la
siguiente línea de definición de función: P  saval  PO, r , t  . Las entradas de la función serán
en capital inicial, la tasa de interés y el número de años. La salida será el valor de la cuenta a
partir de los datos especificados en la entrada. Utilice posteriormente está función para
calcular el valor de un capital inicial de 10 000 €, a un interés anual del 6%, después de 13
años.

6. Escriba una función que convierta las unidades de un par de torsión (fuerza que causa la
rotación de un objeto) de libras-pulgadas a newtons-metro. Utilice la siguiente línea de
definición para la función: Nm = lbintoNm(lbin) . El argumento de entrada será el par en
libras-pulgadas, y el argumento de salida el par en newtons-metro. Utilice posteriormente esta
función para convertir 500 libras-pulgada a newtons-metro.
7. Escriba una función que calcule los ángulos de un triángulo a partir de las longitudes de sus
lados. Utilice para ello la siguiente línea de definición de función:
alp,bet,gam  triangulo(a,b,c) . Utilice posteriormente esta función para calcular los
siguientes triángulos:
a = 10, b = 15, c = 7
a = 6, b = 8, c = 10
a = 200, b = 75, c = 250
8. Escriba una función que calcule el vector unitario en la dirección de la recta que une dos
puntos (A y B) en el espacio. Utilice la siguiente línea de definición de función:
n = unitvec (A,B) . La entrada de la función serán dos vectores A y B, cada uno con tres
elementos correspondientes a las coordenadas cartesianas de dichos puntos. La salida será un
vector con tres componentes que representan las coordenadas del vector unitario en la
dirección de A a B. Utilice posteriormente esta función para determinar los siguientes vectores
unitarios:
En la dirección del punto (2,6,5) al punto (-10,15,9)
En la dirección del punto (-10,15,9) al punto (2,6,5)
En la dirección del punto (1,1,2) al punto (2,1,1)

02 archivos de función 15
Métodos numéricos 02 Funciones y ficheros de función Mg. Amado Malca Villalobos

9. La forma tradicional de la ecuación de la recta en el plano x – y es: Ax + By + C = 0 .


Además, cualquier punto queda determinado por sus coordenadas en dicho plano  x0 , y0  .
Escriba una función MATLAB que calcule la distancia entre un punto y una recta en el plano
x  y . Utilice para ello la siguiente definición de función: d = DistPaL ( x0, y0, A, B, C) ,
donde los argumentos de entrada son las coordenadas del punto y las tres constantes de la
ecuación de la recta. El argumento de salida será la distancia. Utilice posteriormente esta
función para calcular la distancia en los siguientes casos:
Punto : (2,-4), recta: 2 x  3,5 y  6  0 .
Punto (11,2): recta: y  2 x  6 , (observe que en este caso la ecuación de la recta no está
representada de la forma tradicional expuesta anteriormente).

10. Escriba una función que calcule la nota final de un estudiante a partir de la nota de su
examen final, sus dos exámenes parciales y de los cinco trabajos realizados durante el curso.
Los exámenes parciales se puntúan de 0 a 100, y cada uno es un20% de la nota final. El examen
final tiene la misma escala de puntuación, y es un 40% de la nota final. Los trabajos, sin
embargo, puntúan de 0 a 10, y todos ellos en conjunto representan un20% de la nota final.
La función debe tener la siguiente definición: g = notasfinales (R) , donde la entrada será una
matriz R que contenga en cada fila las notas de cada estudiante. Además por cada fila, se
tendrá 8 columnas que representarán las notas de los trabajos (las cinco primeras), la nota de
los dos, exámenes parciales (las dos siguientes) y la nota del examen final (la última columna)
de cada estudiante. La salida de la función será un vector columna g con la nota final del
curso. Cada fila de este vector será la nota final del estudiante cuyas notas se relacionan con la
correspondiente la fila de la matriz R .
La función debe usarse para calcular las notas finales de cualquier número de estudiantes.
Para el caso de un solo estudiante, la matriz R tendrá una sola fila. Aplique esta función en los
siguientes casos:
a) Utilice la Ventana de Comandos para calcular la nota de un estudiante con las siguientes
calificaciones: 10, 5, 8, 7, 9, 75, 87, 69.
b) Escriba un fichero script que pida al usuario las notas de los estudiantes y las almacene en
un array (cada estudiante en una fila). El programa debe calcular seguidamente las notas
finales utilizando la función notasfinales . Ejecute el fichero script en la Ventana de Comandos
para calcular las notas finales de los siguientes cuatro estudiantes:
Estudiante A: 7, 9, 5, 8, 10, 90, 70, 85
Estudiante B: 6, 4, 7, 0, 7, 60, 71, 50
Estudiante C: 5, 9, 10, 3, 5, 45, 75, 80
Estudiante D: 8, 8, 7, 7, 9, 82, 81, 88
11. Cuando se conectan n resistencias en paralelo, su resistencia equivalente REq viene
determinada por:

02 archivos de función 16
Métodos numéricos 02 Funciones y ficheros de función Mg. Amado Malca Villalobos

1 1 1 1
   ... 
REq R1 R2 Rn
Escriba una función que calcule REq . Utilice la siguiente definición: REQ = req (R) , donde la
entrada será un vector en el cual cada elemento representa un valor de la resistencia, y la
salida será el valor de la resistencia equivalente REq . Utilice esta función para calcular la
resistencia equivalente de las siguientes resistencias en paralelo:
50, 75, 300, 60, 500, 180 y 200
12. Escriba una función que proporcione un número entero aleatorio en un rango concreto
especificado a partir de dos números. Utilice para ello la siguiente definición de función:
n = r a n d i n t (a,b) , donde los dos argumentos de entrada a y b son los números que
determinan el rango, y la salida será el número aleatorio calculado n .Utilice posteriormente
está función en la Ventana de Comandos para:
Generar un número aleatorio entre 1 y 49
Generar un número aleatorio entre -35 y -2

13. El momento de inercia superficial I x0 de un rectángulo alrededor del eje x0 que pasa por el
1 3
Centroide viene determinado por I x0  bh . El momento de inercia alrededor del eje x
12
paralelo a x0 viene dado por I x  I x0  Ad x2 , donde A es el área del rectángulo, y d x la
distancia entre los dos ejes.
b
w
x0 t
h
dx h
t
x
Escriba una función que calcule el momento de inercia superficial de una viga en forma de "I"
alrededor del eje que pasa por su Centroide (ver dibujo). Utilice para ello la siguiente
definición de función: I = I v i g a (w, h, t) . Las entradas de la función serán el ancho w , la
altura h y el grosor t del nervio y las pestañas de la viga. (El momento de inercia del área
compuesta se obtiene dividiendo el área en distintas partes y sumando el momento de inercia
de cada una de ellas.)
Utiliza la función para calcular el momento de inercia de una viga en forma de "I" cuyas
dimensiones son w  200 mm, h  300 mm y t  22 mm.
14. La representación bidimensional del estado de tensión en un punto de un material cargado
queda definido por las tres componentes de la tensión  xx ,  yy , xy .Las tensiones normales
máxima y mínima (tensiones principales) en el punto,  max y  min , se calculan a partir de las

componentes de la tensión, de la forma:  max   xx   yy    xx   yy    xy2


2

min 2  2 

02 archivos de función 17
Métodos numéricos 02 Funciones y ficheros de función Mg. Amado Malca Villalobos

Escriba una función que calcule las tensiones principales a partir de las componentes de la
tensión. Utilice para ello la siguiente línea de definición de función:
Smax,Smin   TensionPrincipal (Sxx,Syy,Sxy) . Los argumentos de entrada serán las tres
componentes de la tensión, y la salida las tensiones máxima y mínima.
Utilice posteriormente esta función para calcular las tensiones principales para los siguientes
estados de tensión:
 xx  150 MPa,  yy  40 MPa y  xy  80 MPa
 xx  12 ksi,  yy  16 ksi y  xy  7 ksi.
15. En un filtro paso-bajo (filtro que pasa señales de bajas frecuencias), la relación de voltajes
viene determinada por:
V0 1
RV  
Vi 1   RC 
2

Donde  es la frecuencia de la señal de entrada.


Escriba una función que calcule la relación de voltajes. Utilice para ello la siguiente línea de
definición: RV = pasobajo (R, C, w) . Los argumentos de entrada son el valor de la
resistencia R en  (ohmios), la capacidad del condensador C en F (faradios) y la frecuencia
w de la señal de entrada en rad/s. Diseñe la función de forma que w pueda ser un vector.
Escriba un fichero script que utilice la función pasobajo para generar un gráfico RV en
función de ,102    106 rad/s . El gráfico debe tener escala logarítmica en el eje
horizontal   . Cuando se ejecute el fichero script, éste debe pedir al usuario que introduzca
los valores de R y C . Etiquete los ejes convenientemente y ejecute el script para los valores
R  1200 y C  8 F .
16. En un filtro paso-banda (filtro que pasa señales con frecuencias dentro de un cierto rango),
la relación de voltajes viene determinada por:

V0  RC
RV  
Vi 1   2 LC    RC 
2 2

Donde  es la frecuencia de la señal de entrada.


Escriba una función que calcule la relación de voltajes. Utilice para ello la siguiente línea de
definición: RV = pasobanda (R, C, L, w) . Los argumentos de entrada son el valor de la
resistencia R en  (ohmios), la capacidad del condensador C en F (faradios), el valor de la
bobina (inductancia) L en H (henrios) y la frecuencia w de la señal de entrada en rad/s.
Diseñe la función de forma que w pueda ser un vector.
Escriba un fichero script que utilice la función pasobanda para generar un gráfico RV en
función de ,10    10 rad/s . El gráfico debe tener la escala logarítmica en el eje
2 7

02 archivos de función 18
Métodos numéricos 02 Funciones y ficheros de función Mg. Amado Malca Villalobos

horizontal   . Cuando se ejecute el fichero script , éste debe pedir al usuario que introduzca
los valores de R , C y L . Etiquete los ejes convenientemente y ejecute el script para los
siguientes casos:
R  1100  C  9 F y L  7 mH
R  500  C  300F y L  400 mH

Capitulo 06: FUNCIONES Y FICHEROS DE FUNCION


PROBLEMAS CAPITULO 06
Capitulo 06 problema 01
SIaSTi.m Ejecucion
function [in,lb]=SIaSTi(cm,kg) >>
%Funcion que convierte del Sistema [in,lb]=SIaSTi(170,70)
Internacional al Sistema Ingles in = 66.9291
%La altura de una persona en centimetros la lb = 152.1739
convierte a pulgadas >>
%La masa en kilogramos lo convierte a libras [in,lb]=SIaSTi(150,80)
% pulgada = 2.54 cm, 1 pie = 12 pulgadas, 1 in = 59.0551
yarda = 3 pies lb = 173.9130
% 1 libra = 16 onzas = 460 gramos

in = cm/2.54;
lb = kg/0.460;
Ahora vienen algunos ejemplos de ejecución:
>> [in,lb]=SIaSTi(170,70)
in = 66.9291
lb = 152.1739
>> [in,lb]=SIaSTi(150,80)
in = 59.0551
lb = 173.9130
>> h=[120 130 140 150 160 170 180]
h = 120 130 140 150 160 170 180
>> p=[50 60 70 80 90 100 110]
p = 50 60 70 80 90 100 110
>> [in,lb]=SIaSTi(h,p)
in = 47.2441 51.1811 55.1181 59.0551 62.9921 66.9291 70.8661
lb = 108.6957 130.4348 152.1739 173.9130 195.6522 217.3913 239.1304
Capitulo 06 problema 02
pol4.m Ejecucion
function y=pol4(x) >> pol4(1)
%Funcion que evalua una funcion de polinomial ans = -16.1000
de grado 4. >> pol4(1),pol4(2)
%la variable de entrada puede ser un numero, un ans = -16.1000
vector o una matriz, ans = -43.6000
% la variable de salida tendra la misma estructura
y=0.9*x.^4-12*x.^2-5*x;
Ahora vienen algunos ejemplos de ejecución:

>> m=[1:10]
m = 1 2 3 4 5 6 7 8 9 10
>> pol4(m)
ans = 1.0e+003 *
-0.0161 -0.0436 -0.0501 0.0184 0.2375 0.7044 1.5379 2.8784 4.8879 7.7500
>> x=[1:0.1:4];
>> y=pol4(x);
>> plot(x,y)
>> grid

02 archivos de función 19
Métodos numéricos 02 Funciones y ficheros de función Mg. Amado Malca Villalobos

20

10

-10

-20

-30

-40

-50

-60
1 1.5 2 2.5 3 3.5 4

Capitulo 06 problema 03
funpolar.m Ejecucion
function r=funpolar(x) >> funpolar(-3)
%Función polar que asume valores
ans = 2.1602
angulares reales.
%El argumento de entrada esta en >> funpolar(5)
radianes ans = 0.3609
%El argumento de salida es un numero >> funpolar(pi/4)
real ans = 1.2000
r=2*(1.1-sin(x).^2); >>
Ahora vienen algunos ejemplos de ejecución:
>> x=[0:0.1:2*pi];
>> y=funpolar(x);
>> polar(x,y)
90
2.5
120 60
2

1.5
150 30
1

0.5

180 0

210 330

240 300
270

Capitulo 06 problema 04
extcuad.m Ejecucion
function [x,y]=extcuad(a,b,c) >> [x,y]=extcuad(3,-18,48)
%Funcion que da como resultado el
x= 3
extremo de una funcion cuadratica
% de la forma y = a*x^2 + b*x +c y = 252
%Habra mínimo si el valor de a es >> [x,y]=extcuad(-5,10,-3)
positivo x= 1
%Habra máximo si el valor de a es y = -40
negativo
x=-b./(2*a); >>
y=(4*a.*c-b.^2);
Capitulo 06 problema 05
saval.m Ejecucion
function P=saval(P0,r,t) >> saval(10000,6,13)
% Funcion que calcula el valor
ans = 2.1329e+004
futuro de una cuenta de ahorros
% Los valores de entrada son: >> saval(1000,5,10)
% P0: el capital inicial ans = 1.6289e+003
% r: la tasa de interes anualizada >>
% t: el tiempo en años
% el valor de salida es:
% P: El valor final de la cuenta

02 archivos de función 20
Métodos numéricos 02 Funciones y ficheros de función Mg. Amado Malca Villalobos

P=P0*(1+r/100).^t;

>> x=[1:10]
x = 1 2 3 4 5 6 7 8 9 10
>> y=saval(1000,15,x)
y = 1.0e+003 *
1.1500 1.3225 1.5209 1.7490 2.0114 2.3131 2.6600 3.0590 3.5179 4.0456
>> plot(x,y)
>> xlabel('tiempo')
>> ylabel('capital e intereses')
>> title('Capitalizacion')
>> grid
Capitalizacion
4500

4000

3500
capital e intereses

3000

2500

2000

1500

1000
1 2 3 4 5 6 7 8 9 10
tiempo

Capitulo 06 problema 06
lbintoNm.m Ejecucion
function Nm=lbintoNm(lbin) >> Nm=lbintoNm(345)
% Función que convierte las
Nm = 92.2875
unidades de un par de torsión
% Un par de torsión es una fuerza >> Nm=lbintoNm(500)
que causa la rotación de un objeto Nm = 133.7500
% Las unidades pasan de libras- >> Nm=lbintoNm(800)
pulgadas a newton-metro Nm = 214
% El argumento de entrada será un
par en libras-pulgadas >>
% el argumento de salida es un par
en newton-metro

Nm=lbin*0.2675;
Capitulo 06 problema 07
triangulo.m
function [alp,bet,gam]=triangulo(a,b,c)
% Funcion que resuelve un triangulo a partir de
los lados
% los argumentos de entrada seran los lados del
triangulo
% los argumentos de salida son los angulos de
este triangulo, en radianes
% Ademas debemos saber que:
% a+b<=c , b+c<=a, c+a<=b
alp=acos((b.^2+c.^2-a.^2)./(2*b.*c));
bet=acos((c.^2+a.^2-b.^2)./(2*a.*c));
gam=acos((a.^2+b.^2-c.^2)./(2*a.*b));
>> [alp,bet,gam]=triangulo(10,15,7)
alp = 0.5942 bet = 2.1446 gam = 0.4027

02 archivos de función 21
Métodos numéricos 02 Funciones y ficheros de función Mg. Amado Malca Villalobos

>> [alp,bet,gam]=triangulo(6,8,10)
alp = 0.6435 bet = 0.9273 gam = 1.5708
>> [alp,bet,gam]=triangulo(200,75,250)
alp = 0.7227 bet = 0.2507 gam = 2.1682
Capitulo 06 problema 08
unitvec.m
function n=unitvec(A,B)
% Funcion que calcula un vector unitario en la
dirección que
% une dos vectores en el espacio tridimensional
de A a B
% los argumentos de entrada seran dos puntos en
R3
% El argumento de salida es un vector unitario
V=[B(1)-A(1),B(2)-A(2),B(3)-A(3)];
mod=sqrt(V(1)^2+V(2)^2+V(3)^2);
n=(1/mod)*V;
>> unitvec([2 6 5],[-10 15 9])
ans = -0.7730 0.5797 0.2577
>> unitvec([-10 15 9],[2 6 5])
ans = 0.7730 -0.5797 -0.2577
>> unitvec([1 1 2],[2 1 1])
ans = 0.7071 0 -0.7071
Capitulo 06 problema 09
DistPaL.m
function d=DistPaL(x0,y0,A,B,C)
% Funcion que calcula la distancia del punto P=(x0,y0),
% ala recta: Ax + By + C = 0
% los argumentos de entrada seran las coordenas de P: x0 e
y0
% y los coeficientes de la ecuacion de la recta: A, B y C
% El argumento de salida es la distancia del punto P a la
recta L.
N=abs(A*x0+B*y0+C);
D=sqrt(A^2+B^2);
d=N/D;

>> d=DistPaL(2,-4,-2,3.5,-6)
d = 5.9537
>> d=DistPaL(11,2,-2,-1,6)
d = 8.0498
Capitulo 06 problema 10
DistPaL.m
function d=DistPaL(x0,y0,A,B,C)
% Funcion que calcula la distancia del punto
P=(x0,y0),
% ala recta: Ax + By + C = 0
% los argumentos de entrada seran las coordenas de P:
x0 e y0
% y los coeficientes de la ecuacion de la recta: A,
B y C
% El argumento de salida es la distancia del punto P
a la recta L. ;

02 archivos de función 22

También podría gustarte