
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 디렉터리로 다시 변경해야 합니다.tikzpicture
axis
pow((1-\k*\e,\m)
number format
yticklabel style
y축 제한 ymin=0.00044
과ymax=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))
pgfplots
이제 차이점은 함수를 계산하는 방식과 방식에서 비롯된다는 것이 분명해졌습니다 . 아무래도 권력과 관련이 있는 것 같습니다.