Вы находитесь на странице: 1из 10

Funciones

Funciones definidas por el usuario


Funciones inline La funcin inline es una manera rpida de convertir cadenas de caracteres en objetos que pueden ser argumentos para las funciones matlab que operan en otras funciones . Ejemplo:
>>f = inline('1/x - (x-1)') f = Inline function: f(x) = 1/x - (x-1) >> f(5) ans = -3.80000000000000

Una grfica de f(x) en el intervalo 0 x 4 se obtiene con: >> ezplot(f,0,4) El nombre ezplot se refiere a "easy plot" (grfico fcil). An cuando f(x) se hace infinito cuando x 0, ezplot lo grafica automticamente en una razonable escala vertical. La sentencia >>phi = fzero(f,1) busca un cero de f(x) cerca de x = 1. Produce una aproximacin que es certera a casi precisin completa. El resultado puede ser insertado en el grfico ezplot con >> hold on >> plot(phi,0,'o')
Otra manera de generar funciones online >> clc >> g=@(x) sin(x).*exp(-x) % Define la funcin >> g(1) ans = 0.3096 >> x=0:0.1:6; >> y=g(x); >> plot(x,y) >> h=@(x,y) x.^2.*y + x.*y.^2 h = @(x,y)x.^2.*y+x.*y.^2 >> h(5,4) ans = 180

Prof. Heber Helfer

Funciones
Ejemplo: Programa que calcula la integral Simpson. usando la regla de

% Clculo de la integral. la funcin solo est definida entre -1<=x<=1 f = inline('sqrt(1-x*x)'); disp('Regla de Simpson para la integral de f(x) sobre el') disp('intervalo[a,b]') a = input('Desde a = '); b = input('hasta b = '); n = input('Nmero de subintervalos (nmero par) :'); dx = (b-a)/n; sum = 0; c = 2; for i=1:n-1 c = 6 - c; % genera los coeficientes 4,2,4,2,... sum = sum + c*f(a + i*dx); end integral = dx/3*(f(a) + sum + f(b)); fprintf('Integracin numrica de f(x) sobre [a,b] = %10.6f\n', integral);

Prof. Heber Helfer

Funciones

Reglas para escribir funciones


De acuerdo a las reglas de MATLAB, las reglas que describen cmo se van a generar salidas de resultados a partir de las entradas de datos (o sea la codificacin) debe ser guardada en un archivo que tenga el mismo nombre de la funcin, con una extensin .m. La primera sentencia (despus de cualquier comentario) es de la forma function [variables de salida] = nombre_de _la_funcin(variables de entrada) Note que podemos tener ms de una variable de salida y ms de una variable de entrada. Ejemplo: Escribamos una funcin que nos retorne las races reales de una ecuacin cuadrtica ax2 + bx + c , si existen. As, las variables de entrada de la funcin seran a, b y c . Las variables de salida seran las dos races ms otra variable que informar al usuario si hay o no races reales. Una implementacin posible de esta funcin es la \siguiente:
function [raiz1,raiz2,condicion] = cuadratica(a,b,c); % Esta funcin calcula las races de una ecuacin cuadrtica, si % las ecuaciones tienen races reales. en estos casos la funcin % retorna un valor de condicin igual a 0. Si las races son complejas % la funcin retorna un valor de condicin igual a -1 % se chequea si las races son reales det = b^2 - 4*a*c; if det < 0 % Se chequea si la ecuacin tiene races reales condicion = -1 % No hay races reales else condicion = 0 raiz1 = (-b + sqrt(det))/(2*a); raiz2 = (-b - sqrt(det))/(2*a) end end

Como el nombre de la funcin es cuadratica, el archivo debe ser guardado con el mismo nombre, esto es cuadratica.m. Para usar esta funcin en MATLAB para obtener las races de la ecuacin 2x2 + 4x + 1 = 0 escribimos >> [x,y,z] = cuadratica(2,4,1) Basndose en la forma cmo se escribi la funcin, x contendr la primera raz, y contendr la segunda raz y z ser cero si la ecuacin tiene races reales o -1 si son complejas. la respuesta de MATLAB es x= -0.2929 y= -1.7071 z= 0 Por consiguiente las races son 0.2929 y 1.7071. vea si puede hacer cuadratica ms general, haciendo que retorne la parte real y la parte imaginaria de la primera y segunda variables de salida cuando las races son complejas. Prof. Heber Helfer

Funciones

Note las lneas de comentario despus de la declaracin de la funcin. Estas lneas son una sentencia de ayuda para esta funcin. Es decir, si usted escribe help cuadratica obtendr la respuesta
Esta funcin calcula las races de una ecuacin cuadrtica, si las ecuaciones tienen races reales. en estos casos la funcin retorna un valor de condicin igual a 0. Si las races son complejas la funcin retorna un valor de condicin igual a -1

Ejemplo En nuestro ejemplo de caja registradora podemos escribir una funcin que calcule el impuesto.
function[impuesto] = calcula_impuesto(precio,tipo); % Esta funcin calcula el impuesto a las ventas de diferentes tems % usando las siguientes tasas: % alimento, medicina- sin impuesto % todos los otros tems- 6% de impuesto % switch tipo case {'alimento','medicina'} impuesto = 0; case 'lujo' impuesto = .1*precio; otherwise impuesto = .06*precio; end end

Podemos cambiar el ejemplo de la caja registradora incorporando la funcin calcula_impuesto.


total = 0; precio = input('Digite el precio de la mercanca:'); while precio > 0 tipo = input('Ingrese el tipo de mercanca:', 's'); impuesto = calcula_impuesto(precio,tipo); costo = precio + impuesto; total = total + costo; precio = input('Digite el precio de la mercanca:'); end a = sprintf('El precio final es %8.2f\n',total); disp(a);

Note que el nuevo programa es ms legible que el anterior. Ms an, si la cambian los impuestos todo lo que tenemosue hacer es hacer el reemplazo en la funcin calcula_impuesto.

Prof. Heber Helfer

Funciones Funcin que calcula el calor especfico del Calcio


function ce = capcalcio(t) % Funcin que calcula el calor especfico del Calcio % capcalcio solo se ejecuta en el intervalo de temperatura % 273-873 Kelvin. Unidades: cal/mol-K if t>=273 && t<=873 if (t < 673) ce = 5.31 + 0.00333*t; else ce = 6.29 + 0.0014*t; end else ce=NaN; disp('Valor fuera de rango. Digite valores entre 273 y 873 Kelvin.'); end end

Programa que hace uso de capcalcio clc clear disp('Clculo de la capacidad calorfica del calcio'); temp=input('Ingrese la temperatura:'); fprintf('La capacidad calorfica es %9.5f cal/mol-K\n',... capcalcio(temp));

Funcin que calcula el tiempo de inversin para obtener un capital


function a = tinversion(capital,interes,final) a = 0; while capital < final a = a + 1; capital = (interes/100+1)*capital; end end

Funcin que calcula la desviacin estndar muestral de un grupo de datos


function v = desvstd(x) prom=mean(x); n=size(x,2); suma=0; for i=1:n suma=suma+(x(i)-prom)^2; end v=sqrt(suma/(n-1)); end

Prof. Heber Helfer

Funciones

Funcin fibonacci La siguiente funcin genera los n primeros elementos de la serie de fibonacci (un elemento es la suma de los dos elementos anteriores.) Escriba la funcin en el editor, luego grbela con el mismo nombre de la funcin (fibonacci). Las funciones no se ejecutan directamente desde el editor, function f = fibonacci(n) f = zeros(n,1); f(1) = 1; f(2) = 2; for k = 3:n f(k) = f(k-1) + f(k-2); end

Puede usar la funcin dentro de un programa o desde la lnea de comandos, por ejemplo, >> fibonacci(8) ans = 1 2 3 5 8 13 21 34 retorna los primeros 8 nmeros de Fibonacci. Programa que hace uso de la funcin fibonacci: clc clear disp('Serie de Fibonacci'); x = input('Indique el nmero de elementos de la serie:'); nes = fibonacci(x); fprintf('Los primeros %3d elementos de la serie son:\n',x); fprintf('%16d%16d%16d%16d\n',nes);

Prof. Heber Helfer

Funciones Funcin que calcula el promedio de pHs bsicos de un vector function p = promphbas(ph) n=length(ph); suma = 0; % suma de los ph bsicos nb = 0; % nmero de phs bsicos for i=1:n if ph(i)> 7 && ph(i)<=14 suma = suma + ph(i); nb = nb + 1; end end p = suma/nb; % promedio de los phs bsicos end Programa que hace uso de la funcin promphbas para calcular el promedio de los pH bsicos clc clear disp('Clculo del promedio de phs bsicos.'); ndatos=input('Cuntos datos se leern?:'); x=zeros(ndatos); for i=1:ndatos fprintf('%3d) ',i); x(i)=input('Ingrese un valor de pH: '); end promedio=promphbas(x); fprintf('El promedio de los pHs bsicos es %9.2f\n',promedio);

Prof. Heber Helfer

Funciones Funcin que busca el elemento mayor de una matriz y la fila y columna en que se encuentra function [mayor,fila,col]=busca(A) [f,c]=size(A); mayor = -1e10; for i=1:f for j=1:c if A(i,j)> mayor mayor = A(i,j); fila = i; col = j; end end end end ejemplo: >> x=rand(1,30); >> [mayor, fila, columna]=busca(x) mayor = 0.9340 fila = 1 columna = 11

Prof. Heber Helfer

Funciones

Funciones de Interpolacin
Interpolacin lineal
La funcin interp1 interpola linealmente por defecto (mtodo 'linear'): x = 0:5; y = [0 20 60 68 77 110]; yi = interp1(x,y,[2.6 4.9]) yi = 64.8000 106.7000

Mtodos de interpolacin disponibles en la funcin interp1


'nearest' 'linear' 'spline' 'pchip' 'cubic' 'v5cubic' interpolacin de la vecindad prxima interpolacin lineal interpolacin por splines cbicos por partes (SPLINE) interpolacin cbica por partes preservando la forma igual que la funcin 'pchip' la interpolacin cbica de MATLAB 5, la cual no extrapola y usa 'spline' si X no es igualmente espaciado.

ejemplo: x = 0:5; y = [0 20 60 68 77 110]; yi = interp1(x,y,[2.6 4.9],'spline') yi = 1.0e+002 * 0.67301333333333 Interpolacin lineal Si el segundo argumento de la funcin interp1 es una matriz, la matriz retorna un vector fila con el mismo nmero de columnas, y cada valor retornado ser interpolado de su columna correspondiente de datos. Asuma que se obtuvieron los siguientes datos: Tiempo,s Temp 1 0 0 1 20 2 60 3 68 4 77 5 110 Temp 2 Temp 3 0 0 25 52 62 90 67 91 82 93 103 96 1.05202000000000

Almacenamos estos datos en una matriz e interpolamos para el tiempo igual a 2.6 segundos : x = (0:5)';

Prof. Heber Helfer

Funciones y(:,1) y(:,2) y(:,3) temps= = [0,20,60,68,77,110]'; = [0,25,62,67,82,103]'; = [0,52,90,91,93,96]'; interp1(x,y,2.6)

10

temps= 64.8000 65.0000 90.6000 Interpolacin por splines cbicos >> x = 0:5; >> y = [0,20,60,68,77,110]; >> temp = spline(x,y,[2.6,4.9]) temp = 67.3013 105.2020 % Comparacin entre la interpolacin lineal y de splines cbicos x = (0:5); y = [0,20,60,68,77,110]; xi = 0:0.1:5; ylin = interp1(x,y,xi); ycub = spline(x,y,xi); plot(xi,ylin,':',xi,ycub,x,y,'o'),... legend('Lineal','Cbica','Medida',4),... title('Interpolacin lineal y cbica'),... xlabel('x'),... axis([-1,6,-20,120]),... grid

Prof. Heber Helfer

Вам также может понравиться