Saltar al contenido principal
LibreTexts Español

6.7: Entradas de cadena y la función eval

  • Page ID
    87636
  • \( \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}}} \)

    Observamos que en ocasiones sí queremos que cambie la función real -las instrucciones a evaluar para cambiar- a medida que cambiamos las entradas. Esto se puede hacer con la función eval. La función eval toma como entrada una cadena y devuelve la evaluación de esta cadena dados los valores actuales para las diversas variables presentes en la cadena; en esencia, eval está en el intérprete.

    Por ejemplo, podemos crear la función

    function [ value ] = f_o_diff_eval ( fstring, x, delta_x ) 
    
    z = x; 
    f_x = eval(fstring); 
    z = x + delta_x; 
    f_x_plus = eval(fstring); 
    
    value = (f_x_plus - f_x)./delta_x; 
    
    end
    

    que es nuestra función de diferencia finita pero ahora con una cadena de entrada fstring para especificar la función a diferenciar. Tenga en cuenta que eval (fstring) simplemente evaluará la expresión fstring dados los valores actuales de workspace_f_o_diff_eval.

    Ahora llamamos\(f_{-}\) o_diff_eval:

    >> fstring = 'z.^4'; 
    >> f_o_diff_eval(fstring,[1,2],.01) 
    ans = 
        4.0604 32.2408 
    >>
    

    lo que nos da el mismo resultado que antes. Tenga en cuenta que\(f_{\text {_ }}=\) eval (fstring) en\(f_{-}\) diff_eval para fstring como se da es equivalente a\(f_{-} x=z\). 4 pero como en la línea anterior establecemos\(z=x\) entonces\(f_{-} x\) se asigna\(x . \sim 4\) como deseado. De igual manera, dos líneas abajo,\(f_{-} x_{-} p l u s\) se le asigna el valor apropiado ya que hemos cambiado\(z\) para ser\(z=x+\) delta\(x\). El usuario ahora puede especificar cualquier función deseada (expresada en términos de\(z\)) sin crear una función MATLAB (o función anónima).

    En la práctica real ciertamente hay mejores formas de lograr estos objetivos. El propósito de esta pequeña sección es sólo ilustrar que en ocasiones en las que nos gustaría adaptar el código real existen algunas formas sencillas de implementar esta característica.


    This page titled 6.7: Entradas de cadena y la función eval 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.