
Ich muss eine Funktion mit 2 Konstanten (\varepsilon und \k) und 1 Variable (\m) grafisch darstellen. Ich verwende \declarefunction
.
Mein Problem ist, dass die y-Achsen zu klein sind und ich nicht weiß, wie ich sie in meinem Code einstellen soll, um die erwartete Ausgabe zu erhalten. Die Funktion ist diese:
\[
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)
\]
Dann ist mein Code:
\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}
Die erwartete Ausgabe ist die folgende.
Kann mir jemand helfen, die Y-Achsenwerte so einzustellen, dass ich dieses Diagramm erhalte? Ich habe einige Werte ausprobiert, aber es hat nicht geklappt.
Antwort1
Zum Spaß und zur Übung: kleine Off-Topic-Variante von nett @ÑakoAntwort (+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}
Antwort2
EDIT: Implementierung ingnuplot
Das Plotten derselben Funktion mit gnuplot
Ergebnissen führt zu der gewünschten Ausgabe, die sich von der unterscheidet pgfplots
, sieheursprüngliche Antwort.
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}
Ursprüngliche Antwort
Meine Ausgabe Ihrer Funktion weicht leicht von der erwarteten ab (vielleicht habe ich etwas übersehen!?):
Das declare function
muss im tikzpicture
Environment und nicht in der axis
Definition umgesetzt werden. Du hast auch eine Klammer vergessen, siehe letztes . Außerdem musst du pow((1-\k*\e,\m)
nach dem Verzeichniswechsel in das number format
von wieder zurück in das von tikz wechseln.yticklabel style
Mit den y-Achsen-Grenzen ymin=0.00044
undymax=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}
Edit: über die Funktion undpgfplots
Zum Vergleich habe ich die Funktion aufgezeichnet:
((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))
Jetzt ist klar, woher der Unterschied kommt pgfplots
und wie die Funktion berechnet wird. Mir scheint, dass es mit der Potenz zu tun hat.