지수 y축을 사용한 그래프 함수

지수 y축을 사용한 그래프 함수

2개의 상수(\varepsilon 및 \k)와 1개의 변수(\m)를 사용하여 함수 그래프를 작성해야 합니다. 나는 사용한다 \declarefunction.

내 문제는 que y축이 너무 작아서 내가 기대하는 출력을 얻기 위해 내 코드에서 이를 설정하는 방법을 모른다는 것입니다. 기능은 다음과 같습니다.

\[
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) 
\]

그러면 내 코드는 다음과 같습니다.

\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}

예상되는 출력은 다음과 같습니다.

여기에 이미지 설명을 입력하세요

해당 그래프를 얻기 위해 해당 y축 값을 설정하는 데 도움을 줄 수 있는 사람이 있습니까? 몇 가지 값을 시도했지만 실패했습니다.

답변1

재미와 운동을 위해: nice의 주제에서 벗어난 작은 변형 @Ñako답변 (+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}

여기에 이미지 설명을 입력하세요

답변2

편집 : 구현gnuplot

동일한 함수를 gnuplot원하는 결과와 다른 결과 로 플로팅하는 방법은 pgfplots다음을 참조하세요.원래 답변.

여기에 이미지 설명을 입력하세요

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}

원래 답변

귀하의 함수에 대한 내 출력은 예상한 것과 약간 다릅니다(아마 내가 뭔가를 놓쳤을 수도 있습니다!?). 여기에 이미지 설명을 입력하세요

정의가 아닌 환경 declare function에서 구현되어야 합니다 . 대괄호도 잊어버렸습니다. 마지막 을 참조하세요 . 또한 디렉터리를 의 디렉터리로 변경한 후에는 tikz 디렉터리로 다시 변경해야 합니다.tikzpictureaxispow((1-\k*\e,\m)number formatyticklabel style

y축 제한 ymin=0.00044ymax=0.00045

여기에 이미지 설명을 입력하세요

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}

편집 : 기능에 대해pgfplots

비교를 위해 함수를 플롯했습니다.

((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))

와 함께 OriginLab: 여기에 이미지 설명을 입력하세요

pgfplots이제 차이점은 함수를 계산하는 방식과 방식에서 비롯된다는 것이 분명해졌습니다 . 아무래도 권력과 관련이 있는 것 같습니다.

관련 정보