Funciones

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

 

Regresar.