Función gráfica con eje y exponencial

Función gráfica con eje y exponencial

Necesito graficar una función con 2 constantes (\varepsilon y \k) y 1 variable (\m). Yo suelo \declarefunction.

Mi problema es que el eje y es demasiado pequeño y no sé cómo configurarlo en mi código para obtener el resultado que espero. La función es esta:

\[
f(m,\varepsilon,k)=\frac{\left( 1-\varepsilon \right) }{2}\left( 1-\left(
1-\varepsilon \right) ^{m}-m\left( 1-\varepsilon \right) ^{m-1}\varepsilon
\right) +\frac{\varepsilon }{2}\left( 2-(1-k\varepsilon )^{m}\right) -\frac{m%
}{2}\varepsilon (1-k\varepsilon )^{m-1}k\varepsilon \left( 1+\frac{\left(
1-\varepsilon \right) \left( 1-\varepsilon \right) ^{m-1}\varepsilon }{%
\left( 1-\varepsilon \right) \varepsilon +\varepsilon (1-k\varepsilon )^{m}}%
\right) 
\]

Entonces, mi código es:

\documentclass{article}
\usepackage{tikz}
\usepackage{pgfplots} 
\pgfplotsset{compat=1.17} 
\pgfplotsset{every non boxed x axis/.append style={x axis line style=-},
     every non boxed y axis/.append style={y axis line style=-}}
\begin{document}
\begin{figure}
\centering
\begin{tikzpicture} 
\begin{axis}[xlabel={b},
            ylabel={r},
            axis lines=left,
            y tick label style={/pgf/number format/.cd,sci,sci e},
            declare function={f(\m,\e,\k)=
            ((1-\e)/(2))*
            (1-pow((1-\e),\m)-\m*\e*(pow((1-\e),(\m-1))))+
            (\e/2)*(2-pow((1-\k*\e),\m))-
            (\m/2)*\e*\k*\e*pow((1-\k*\e),(\m-1))*
            (1+(((1+\e)*pow((1-\e),(\m-1))*\e)/((1-\e)*\e+\e*(pow(1-\k*\e),\m))))
            ;},
            domain=1:8,no marks,samples=20
            ,smooth, ymin=0.00044, ymax=0.000445, xmin=2, xmax=5,
            extra x ticks={2.25, 2.75, 3.25, 3.75, 4.25, 4.75},
            extra x tick labels={ },
%            extra y ticks={1.425, 1.435, 1.445, 1.455},
%            extra y tick labels={ },
            tick label style={font=\scriptsize}]
\addplot[color=black, domain=2:5, variable = \m]{f(m, 0.001, 100)};
\end{axis} 
\end{tikzpicture}
\end{figure}
\end{document}

El resultado esperado es el siguiente.

ingrese la descripción de la imagen aquí

¿Alguien podría ayudarme a establecer los valores del eje y para obtener ese gráfico? Probé algunos valores pero no tuve éxito.

Respuesta1

Para divertirse y hacer ejercicio: pequeña variación fuera de tema de nice @Ñakorespuesta (+1):

\documentclass[margin=3mm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.17}

\begin{document}
    \pgfkeys{/pgf/number format/.cd,
             sci,
             sci generic={mantissa sep={\,},exponent={\textsc{e}^{#1}}},
             precision=1
            }

    \begin{tikzpicture}[
declare function={f(\m,\e,\k)=
    ((1-\e)/2)*(1-pow((1-\e),\m)-\m*\e*(pow((1-\e),(\m-1))))+
    (\e/2)*(2-pow((1-\k*\e),\m))-
    (\m/2)*\e*\k*\e*pow((1-\k*\e),(\m-1))*(1+(((1+\e)*pow((1-\e),(\m-1))*\e)/((1-\e)*\e) +
    \e*(pow((1-\k*\e),\m)))));}
\begin{axis}[
    axis lines=left,
    xlabel={$b$},
    ylabel={$r$},
        x label style={at={(1,0)}, anchor=north east},
        y label style={at={(0,1)}, rotate=-90, anchor=north east},
scaled ticks=false,
    minor tick num=1,
    ticklabel style={font=\scriptsize},
    xticklabel style={/pgf/number format/.cd, fixed, fixed zerofill}, 
    yticklabel style={/pgf/number format/sci},
    xmax=5.4, 
    domain=2:5, 
    samples=401, no marks
            ]
\addplot +[thick, variable=\m]{f(m, 0.001, 100)};
\end{axis}
\end{tikzpicture}
\end{document}

ingrese la descripción de la imagen aquí

Respuesta2

EDITAR: Implementación engnuplot

Trazar la misma función con gnuplotresultados en la salida deseada, que difiere de la pgfplotsanterior, consulterespuesta original.

ingrese la descripción de la imagen aquí

MWE:

\documentclass{article}
\usepackage{tikz}
\usepackage{pgfplots}
\pgfplotsset{compat=1.17} 
\pgfplotsset{every non boxed x axis/.append style={x axis line style=-},
    every non boxed y axis/.append style={y axis line style=-}}
\begin{document}
  \begin{tikzpicture}
    \begin{axis}[ 
        xlabel={b},
        ylabel={r},
        axis lines=left,
        scaled ticks=false,
        yticklabel style={/pgf/number format/precision=3,
            /pgf/number format/.cd,
            sci,sci e,
            /tikz/.cd,},
        xmin=2, xmax=5,
        ymin=0.000441, ymax=0.000456,
        extra x ticks={2.25, 2.75, 3.25, 3.75, 4.25, 4.75},
        extra x tick labels={ },
        ytick={0.000441,0.000443,...,0.000456},
        ]
      \addplot[color=red, samples=20, smooth,domain = 2:5, no markers] gnuplot [raw gnuplot]{ %
        f(x)=((1-eps)/2)*(1-(1-eps)**x-x*(1-eps)**(x-1)*eps)+eps/2*(2-(1-k*eps)**x)-x/2*eps*k*eps*(1-k*eps)**(x-1)*(1+((1+eps)*(1-eps)**(x-1)*eps)/((1-eps)*eps+eps*(1-k*eps)**x));
        eps=0.001;k=100;
        plot[x=2:5] f(x);
         };
    \end{axis}
  \end{tikzpicture}
\end{document}

Respuesta original

Mi salida a su función difiere un poco de la esperada (¿tal vez me he perdido algo?): ingrese la descripción de la imagen aquí

Tiene declare functionque implementarse en el tikzpictureentorno y no en la axisdefinición. También has olvidado un corchete, ver último pow((1-\k*\e,\m). Además, después de cambiar el directorio al number formatde, yticklabel styledebe volver a cambiar al de tikz.

Con los límites del eje ymin=0.00044y yymax=0.00045

ingrese la descripción de la imagen aquí

MWE:

\documentclass{article}
\usepackage{tikz}
\usepackage{pgfplots} 
\pgfplotsset{compat=1.17} 
\pgfplotsset{every non boxed x axis/.append style={x axis line style=-},
    every non boxed y axis/.append style={y axis line style=-}}
\begin{document}
    \begin{figure}
        \centering
        \begin{tikzpicture}[
         declare function={f(\m,\e,\k)=
                    ((1-\e)/(2))*
                    (1-pow((1-\e),\m)-\m*\e*(pow((1-\e),(\m-1))))+
                    (\e/2)*(2-pow((1-\k*\e),\m))-
                    (\m/2)*\e*\k*\e*pow((1-\k*\e),(\m-1))*
                    (1+(((1+\e)*pow((1-\e),(\m-1))*\e)/((1-\e)*\e+\e*(pow((1-\k*\e),\m)))) % <-- bracket
                    ;},
        ]
        \begin{axis}[
        xlabel={b},
        ylabel={r},
        axis lines=left,
        scaled ticks=false,
        yticklabel style={/pgf/number format/precision=1,
            /pgf/number format/.cd,
            sci,sci e,
            /tikz/.cd,}, %<-- change back to tikz directory
%       domain=1:8,
%       no marks,
        samples=20,
        smooth, 
%       ymin=0.00044, ymax=0.00045, 
        xmin=2, xmax=5,
        extra x ticks={2.25, 2.75, 3.25, 3.75, 4.25, 4.75},
        extra x tick labels={ },
        %            extra y ticks={1.425, 1.435, 1.445, 1.455},
        %            extra y tick labels={ },
        ticklabel style={font=\scriptsize}]
        \addplot[color=red, domain=2:5, variable = \m]{f(m, 0.001, 100)};
        \end{axis} 
        \end{tikzpicture}
    \end{figure}
\end{document}

Editar: sobre la función ypgfplots

A modo de comparación, he trazado la función:

((1-eps)/2)*(1-(1-eps)^x-x*(1-eps)^(x-1)*eps)+eps/2*(2-(1-k*eps)^x)-x/2*eps*k*eps*(1-k*eps)^(x-1)*(1+((1+eps)*(1-eps)^(x-1)*eps)/((1-eps)*eps+eps*(1-k*eps)^x))

con OriginLab: ingrese la descripción de la imagen aquí

Ahora está claro que la diferencia proviene de pgfplotscómo se calcula la función. Me parece que tiene que ver con el poder.

información relacionada