Saltar al contenido principal
LibreTexts Español

6.5: Funciones de Funciones - Asas

  • Page ID
    87620
  • \( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)

    \( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)

    \( \newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\)

    ( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\)

    \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\)

    \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\)

    \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\)

    \( \newcommand{\Span}{\mathrm{span}}\)

    \( \newcommand{\id}{\mathrm{id}}\)

    \( \newcommand{\Span}{\mathrm{span}}\)

    \( \newcommand{\kernel}{\mathrm{null}\,}\)

    \( \newcommand{\range}{\mathrm{range}\,}\)

    \( \newcommand{\RealPart}{\mathrm{Re}}\)

    \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\)

    \( \newcommand{\Argument}{\mathrm{Arg}}\)

    \( \newcommand{\norm}[1]{\| #1 \|}\)

    \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\)

    \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\AA}{\unicode[.8,0]{x212B}}\)

    \( \newcommand{\vectorA}[1]{\vec{#1}}      % arrow\)

    \( \newcommand{\vectorAt}[1]{\vec{\text{#1}}}      % arrow\)

    \( \newcommand{\vectorB}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)

    \( \newcommand{\vectorC}[1]{\textbf{#1}} \)

    \( \newcommand{\vectorD}[1]{\overrightarrow{#1}} \)

    \( \newcommand{\vectorDt}[1]{\overrightarrow{\text{#1}}} \)

    \( \newcommand{\vectE}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash{\mathbf {#1}}}} \)

    \( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)

    \( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)

    A menudo es el caso de que deseamos pasar una función a una función: en otras palabras, deseamos que una función llamada pueda operar no solo en diferentes datos sino también en diferentes “funciones de entrada”. Para hacer las cosas más concretas (y evitar usar la palabra función demasiadas veces con referencia a diferentes entidades), considere la función f_o _diff:

    function [ value ] = f_o_diff ( func, x, delta_x ) 
    value = (func (x + delta_x) - func (x))./delta_x; 
    end
    

    Esta pequeña función calcula la aproximación de diferencia finita de primer orden a una función func en el punto\(\mathrm{x}\) para un delta_ de longitud de segmento dado\(\mathrm{x}\). Obviamente podríamos incluir la definición de func dentro de f_o_diff, pero entonces necesitaríamos tener una función derivada diferente para cada función que quisiéramos diferenciar. En contraste,\(f_{\text {_o_diff can be re-used for any function func }}\) - claramente muy preferido. (Tenga en cuenta que ahora podríamos realizar una investigación mucho más sistemática del error de redondeo; en nuestra discusión anterior aún no estábamos armados con funciones, o matrices).

    Llamar a\(f_{-} \circ\) _iff desde un programa de llamadas es bastante sencillo con una sola arruga dentro de la sintaxis de MATLAB. En particular, para pasar la función de entrada func del programa llamante a la función llamada (f_o_diff) no deseamos pasar realmente la función sino más bien una especie de puntero -o handle- a donde se almacenan estas instrucciones para su uso por cualquier programa (llamante). (La descripción aquí es virtual, un modelo mental que proporciona la intuición correcta. En general, qué y cómo pasa un lenguaje de programación dentro de una llamada de función puede ser un tema bastante complicado). Para crear un manejador para la función func -es decir, para encontrar el puntero a (decir) el inicio del conjunto de instrucciones que definen func- ponemos un “at sign” (@) delante de func como en @func. Entonces, por ejemplo, para aplicar\(f_{-}\) _diff a la función MATLAB sin podemos hacer

    >> sin_handle = @sin; 
    >> fprime = f_o_diff( sin_handle, [pi/4, pi/2], .01) 
    fprime = 
        0.7036 -0.0050 
    >>
    

    de más directamente

    >> fprime_too = f_o_diff( @sin, [pi/4, pi/2], .01) 
    fprime_too = 0.7036 -0.0050 
    >>
    

    Los manejadores de notas también se pueden crear para otros tipos de objetos, por ejemplo figuras (gráficas).

    A menudo ocurre que una función func que deseamos pasar a (digamos) nombre_función es de alguna manera más general -definida con respecto a más entradas- que las funciones que nombre_función espera. En MATLAB hay una manera fácil de lidiar con esta ocurrencia común, que ahora discutimos.


    This page titled 6.5: Funciones de Funciones - Asas is shared under a CC BY-NC-SA 4.0 license and was authored, remixed, and/or curated by Masayuki Yano, James Douglass Penn, George Konidaris, & Anthony T Patera (MIT OpenCourseWare) via source content that was edited to the style and standards of the LibreTexts platform; a detailed edit history is available upon request.