Funciones.
Las funciones en MATLAB, que se guardan como
archivos independientes, equivalen a las subrutinas y funciones de otros
lenguajes.
Funciones que devuelven una sola
variable.
Consideremos el ejemplo de escribir la
función
f(x)= 2x3+4x2+ 3
podemos escribir en MATLAB un archivo con el
nombre fun00.m como
function
y = fun01(x)
y = 2*x^3+4*x^2+ 3;
Para ejecutar esta función, desde el
ambiente de MATLAB podemos valuar f(2) como
fun01(2)
Funciones que devuelven mas de una
variable.
Una función puede devolver más de una
variable.
La sintaxis en para escribir esta función es
function
[Y1, Y2, ...,
Yn ] = fun_regresa_varias(X)
...
...
...
Y1 = ....
Y2 = ....
...
...
Supongamos que dado un conjunto de datos
queremos realizar una función que devuelva la media y la desviación estándar.
Primero escribimos un archivo llamado
fun02.m, que tenga las siguientes intrucciones.
function
[media, des] =
fun02(x)
n = length(x);
suma = 0;
for i=1:n
suma = suma + x(i);
end;
media = suma/n;
suma = 0;
for i=1:n
suma = (x(i) -
media)^2;
end;
des = sqrt(suma/n );
Guardamos el archivo y ejecutamos desde el
MATLAB con:
[m d] = fun02(x)
y la ejecución regresa.
m =
2
d =
0.5774
Note que la función recibe dos argumentos a
los que llamamos m y d. De hacer el llamado de la función sin poner estos dos,
no se genera error alguno pero solo se imprime el primer parámetro que devuelve
la función.
fun02(x)
ans =
2
Ejemplo 1.
Determinar el
cruce por cero de la función f(x) = x – cos(x), utilizando el método de
Newton Raphson.
Este algoritmo
iterativo se resuelve haciendo
xk+1
= xk - f(xk)/f’(xk)
La implementación
en MATLAB es:
function z = cero(x0)
for k =
1: 100
xnva = x0 - f(x0)/df(x0);
x0 = xnva;
fprintf('Iteracion
%d f(%f) = %f\n', k, x0, f(x0));
if(abs(f(x0))
< 0.00001) break; end;
end;
z
=x0;
function y = f(x)
y = x-cos(x);
function dy = df(x)
dy = 1+sin(x);
Ejemplo 2.
Determinar el
cruce por cero de la función f(x) = x – cos(x), utilizando el método de Bisecciones.
La implementación
en MATLAB es:
function b = biseccion(x0,x1)
n=x0:0.1:x1;
plot(n,f(n))
xlabel('eje x');
ylabel('eje y');
hold on;
fmin = min(f(n));
fmax = max(f(n));
for S = 1:100
mau=((x1+x0)/2);
a=f(x0);
b=f(x1);
fmau=f(mau);
fprintf('Iteracion
%d f(mau)(%f) = %f\n', S, mau, f(mau));
plot(x0, fmin:0.01:fmax, x1,
fmin:0.01:fmax);
pause;
if a*fmau
> 0 x0=mau;
elseif a*fmau==0 x0=mau;
elseif a*fmau==0 x1=mau;
elseif a*fmau < 0 x1=mau;
if (abs(fmau)
< 0.0001), break, end;
end;
end;
disp(['La
solucion esta en:'])
disp([mau]);
function y = f(x)
y = x-cos(x);