Funciones Definidas Por El Usuario en Matlab

  • Upload
    noam21

  • View
    213

  • Download
    0

Embed Size (px)

Citation preview

  • 8/16/2019 Funciones Definidas Por El Usuario en Matlab

    1/7

    MATLAB-Funciones Definidas por el Usuario 1

    Funciones anónimas

    Una función anónima es una función que no es almacenada en un archivo de programa, pero esasociada con una variable cuyo tipo de dato es manejado por la función. Las funciones anónimaspueden aceptar entradas y retornar salidas, tal como lo hacen las funciones estándar. Sin embargo,solo pueden contener una sola sentencia ejecutable.

    Ejemplo:

    >>f = @(x) 1/x - (x-1)

    f =@(x)1/x-(x-1)

    >> f(5)

    ans =

    -3.800

    >> g = @(x,y) 1/y -(x-1)

    g =

    @(x,y)1/y-(x-1)

    >> g(5,2)ans =

    -3.5000

    Una gráfica de f(x) en el intervalo 0≤ x ≤ 4 se obtiene con:

    >> ezplot(f,0,4)

    El nombre ezplot se refiere a "easy plot" (gráfico fácil).Aún cuando f(x) se hace infinito cuandox → 0, ezplot lo grafica automáticamente en una razonable escala vertical. La sentencia>>phi = fzero(f,1)

    busca un cero de f ( x) cerca de x = 1. Produce una aproximación que es certera a casi precisióncompleta. El resultado puede ser insertado en el gráfico ezplot con

    >> hold on>>plot(phi,0,'o')

  • 8/16/2019 Funciones Definidas Por El Usuario en Matlab

    2/7

    MATLAB-Funciones Definidas por el Usuario 2

    clc clear all disp( 'Programa que genera la tabla de una función f(x),' ) disp( 'la grafica y encuentra una raíz' ) f = @(x) x*sin(x) ;

    fprintf( 'x\t\t\tx*sin(x)\n**********************\n' ) for i=0:0.1:1 fprintf( '%4.2f\t\t%6.4f\n' ,i,f(i));

    end ezplot(f,-10,10) % Se busca una raíz de la función x = fzero(f,1); fprintf( 'Se encontró una raíz en %8.3f\n' ,x) hold on

    plot(x,0, 'o' ) grid on

    Programa que genera la tabla de una función f(x), la graficay encuentra una raízx x*sin(x)**********************0.00 0.00000.10 0.01000.20 0.03970.30 0.08870.40 0.15580.50 0.23970.60 0.33880.70 0.45100.80 0.57390.90 0.70501.00 0.8415Se encontró una raíz en 3.142

    -10 -8 -6 -4 -2 0 2 4 6 8 10

    -6

    -4

    -2

    0

    2

    4

    6

    8

    x

    x sin(x)

  • 8/16/2019 Funciones Definidas Por El Usuario en Matlab

    3/7

    MATLAB-Funciones Definidas por el Usuario 3

    Ejemplo : Programa que calcula la integral usando la regla deSimpson.

    ∆ ∆ ∆

    % Cálculo de la integral. la función solo está definida entre -1

  • 8/16/2019 Funciones Definidas Por El Usuario en Matlab

    4/7

    MATLAB-Funciones Definidas por el Usuario 4

    Funciones definidas por el usuario

    Reglas para escribir funciones

    De acuerdo a las reglas de MATLAB, las reglas que describen cómo se van a generar salidas deresultados a partir de las entradas de datos (o sea la codificación) debe ser guardada en un archivoque tenga el mismo nombre de la función, con una extensión .m. La primera sentencia (después decualquier comentario) es de la forma

    function [variables de salida] = nombre_de _la_función(variables de entrada)

    Note que podemos tener más de una variable de salida y más de una variable de entrada.

    Ejemplo:Escribamos una función que nos retorne las raíces reales de una ecuación cuadráticaax2+ bx + c , siexisten. Así, las variables de entrada de la función seríana , byc . Las variables de salida serían lasdos raíces más otra variable que informará al usuario si hay o no raíces reales. Una implementaciónposible de esta función es la \siguiente:

    function [raiz1,raiz2,condicion] = cuadratica(a,b,c);% Esta función calcula las raíces de una ecuación cuadrática, si% las ecuaciones tienen raíces reales. en estos casos la función% retorna un valor de condición igual a 0. Si las raíces son complejas% la función retorna un valor de condición igual a -1

    % se chequea si las raíces son realesdet = b^2 - 4*a*c;

    if det < 0 % Se chequea si la ecuación tiene raíces realescondicion = -1 % No hay raíces reales

    else condicion = 0

    raiz1 = (-b + sqrt(det))/(2*a);raiz2 = (-b - sqrt(det))/(2*a)

    endend Como el nombre de la función escuadratica, el archivo debe ser guardado con el mismo nombre,esto escuadratica.m . Para usar esta función en MATLAB para obtener las raíces de la ecuación

    2 x2

    + 4 x + 1 = 0 escribimos>> [x,y,z] = cuadratica(2,4,1)

    Basándose en la forma cómo se escribió la función, x contendrá la primera raíz, y contendrá lasegunda raíz y z será cero si la ecuación tiene raíces reales o -1 si son complejas. la respuesta deMATLAB esx =-0.2929y =-1.7071

    z =0

  • 8/16/2019 Funciones Definidas Por El Usuario en Matlab

    5/7

    MATLAB-Funciones Definidas por el Usuario 5

    Por consiguiente las raíces son −0.2929 y −1.7071. vea si puede hacercuadratica más general,haciendo que retorne la parte real y la parte imaginaria de la primera y segunda variables de salidacuando las raíces son complejas.Note las líneas de comentario después de la declaración de la función. Estas líneas son unasentencia de ayuda para esta función. Es decir, si usted escribe help cuadratica obtendrá larespuesta

    Esta función calcula las raíces de una ecuación cuadrática, silas ecuaciones tienen raíces reales. en estos casos la funciónretorna un valor de condición igual a 0. Si las raíces soncomplejas la función retorna un valor de condición igual a -1

    EjemploEn nuestro ejemplo de caja registradora podemos escribir una función que calcule el impuesto.

    function [impuesto] = calcula_impuesto(precio,tipo);% Esta función 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;endend

    Podemos cambiar el ejemplo de la caja registradora incorporando la función calcula_impuesto.

    total = 0; precio = input( 'Digite el precio de la mercancía:' );

    while precio > 0tipo = input( 'Ingrese el tipo de mercancía:' , 's' );impuesto = calcula_impuesto(precio,tipo);costo = precio + impuesto;total = total + costo;

    precio = input( 'Digite el precio de la mercancía:' );end a = sprintf( 'El precio final es %8.2f\n' ,total);disp(a);

    Note que el nuevo programa es más legible que el anterior. Más aún, si la cambian los impuestostodo lo que tenemosue hacer es hacer el reemplazo en la funcióncalcula_impuesto .

  • 8/16/2019 Funciones Definidas Por El Usuario en Matlab

    6/7

    MATLAB-Funciones Definidas por el Usuario 6

    Función de FibonacciLa siguiente función genera los n primeros elementos de la serie de fibonacci (un elemento es lasuma de los dos elementos anteriores.) Escriba la función en el editor, luego grábela con el mismonombre de la función (fibonacci). Las funciones no se ejecutan directamente desde el editor,function [f] = fibonacci(n) % fibonacci(n) - retorna los primeros n elementos % de la función de Fibonacci. f = zeros(n,1);

    f(1) = 1; f(2) = 2;

    for k = 3:n f(k) = f(k-1) + f(k-2);

    end end Puede usar la función dentro de un programa o desde la línea de comandos, por ejemplo,>> fibonacci(8)ans =

    12358

    132134

    retorna los primeros 8 números de Fibonacci. La función se puede llamar desde un programa:

    clc clear disp( 'Serie de Fibonacci' ); x = input( 'Indique el número 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);

    FUNCIÓN - CAPACIDAD CALORÍFICA DEL CALCIO

    function ce = capcalcio(t) % capcalcio - Función que calcula el calor específico del Calcio % capcalcio solo se ejecuta en el intervalo de temperatura % 273-873 Kelvin. Unidades: cal/mol-K

    if t>=273 && t < 673 ce = 5.31 + 0.00333*t;

    elseif t>= 673 && t

  • 8/16/2019 Funciones Definidas Por El Usuario en Matlab

    7/7

    MATLAB-Funciones Definidas por el Usuario 7

    PROGRAMA QUE HACE USO DE LA FUNCIÓN capcalcioclc clear disp ( 'Cálculo de la capacidad calorífica del calcio' ); temp=input( 'Ingrese la temperatura (Kelvin):' );

    fprintf ( 'La capacidad calorífica es %9.5f cal/mol-K\n ' , ... capcalcio(temp));

    FUNCIÓN tinversion – Cálculo del tiempo de inversión

    function t = tinversion(cini,interes,cfinal) t = 0;

    if cini >= cfinal error( 'El capital inicial debe ser menor que el final' )

    end if interes