有谁知道如何绘制正态分布的累积分布函数(这里解释) 在 tikzpicture 环境中如何工作?非常感谢!
答案1
如果您想避免使用 gnuplot 进行计算,您可以使用正常 CDF 的近似值,例如由以下公式给出的非常简单的近似值Bowling 等人(哪个John D. Cook 在他的博客中):
\tikzset{
declare function={
normcdf(\x,\m,\s)=1/(1 + exp(-0.07056*((\x-\m)/\s)^3 - 1.5976*(\x-\m)/\s));
}
}
最大误差为 0.014%,这对于可视化目的来说已经足够了。
以下是 gnuplot 版本与 Bowling 等人的近似值的比较:
\documentclass[border=5mm]{standalone}
\usepackage{amsmath}
\usepackage{pgfplots}
\DeclareMathOperator{\CDF}{cdf}
\def\cdf(#1)(#2)(#3){0.5*(1+(erf((#1-#2)/(#3*sqrt(2)))))}%
\tikzset{
declare function={
normcdf(\x,\m,\s)=1/(1 + exp(-0.07056*((\x-\m)/\s)^3 - 1.5976*(\x-\m)/\s));
}
}
\begin{document}
\begin{tikzpicture}
\begin{axis}[%
xlabel=$x$,
ylabel=$\CDF(x)$,
grid=major,
legend entries={gnuplot, Bowling et al},
legend pos=south east]
\addplot[smooth, line width=3pt, orange!50] gnuplot{\cdf(x)(0)(2)};
\addplot [smooth, black] {normcdf(x,0,2)};
\end{axis}
\end{tikzpicture}
\end{document}
答案2
一种方法是使用pgfplots
Gnuplot 并与之交互。事实上,Gnuplot 之所以有用,是因为其erf
功能。
这是一个需要编译的简单示例pdflatex -shell-escape
:
\documentclass{minimal}
\usepackage{amsmath}
\usepackage{pgfplots}
\def\cdf(#1)(#2)(#3){0.5*(1+(erf((#1-#2)/(#3*sqrt(2)))))}%
% to be used: \cdf(x)(mean)(variance)
\DeclareMathOperator{\CDF}{cdf}
\begin{document}
\begin{tikzpicture}
\begin{axis}[%
xlabel=$x$,
ylabel=$\CDF(x)$,
grid=major]
\addplot[smooth,red] gnuplot{\cdf(x)(0)(1)};
\addplot[smooth,blue]gnuplot{\cdf(x)(0.5)(1)};
\addplot[smooth,green]gnuplot{\cdf(x)(1)(1)};
\addplot[smooth,orange]gnuplot{\cdf(x)(2)(1)};
\end{axis}
\end{tikzpicture}
\end{document}
结果:
请注意,该函数\cdf
已通过在参数周围\def
使用分隔符来定义。()
答案3
请注意,在较新版本的 gnuplot 中,有绘制标准正态 cdf 的“norm”函数。
\addplot [very thick] gnuplot{norm(x)};
答案4
这里有一些可能有帮助的代码。
\begin{tikzpicture}[domain=0:4, yscale=4]
\def\cumulative{\x,{1/(1 + exp((0-\x))}}
\def\betaA{\x,{1/(1 + (0.25*exp(0-\x))}}
\def\betaB{\x,{1/(1 + (0.5*exp(0-\x))}}
\def\betaC{\x,{1/(1 + (5*exp(0-\x))}}
\def\betaD{\x,{1/(1 + (15*exp(0-\x))}}
\draw[very thin,color=gray, step=0.25] (-6.1,-0.025) grid (5.9,1.025) ;
\draw[very thick, ->] (-6.1,0) -- (6,0) node[right] {Project Time} ;
\draw[very thick, ->] (-6,-0.025) -- (-6,1.2) node[above] {\% Budget };
\draw[thick,color=red,domain=-6:6] plot (\cumulative);
\draw[thick,color=green,domain=-6:4] plot (\betaA) node[above left] {$\beta = 0.05$};
\draw[thick,color=blue,domain=-6:5] plot (\betaB) node[above] {$\beta = 0.25$};
\draw[thick,color=cyan,domain=-6:6] plot (\betaC) node[right] {$\beta = 5.00$};
\draw[thick,color=magenta,domain=-6:6] plot (\betaD) node[below right] {$\beta = 15.00$};
\node at (-6.4,0.25) {25\%};
\node at (-6.4,0.50) {50\%};
\node at (-6.4,0.75) {75\%};
\node at (-6.5,1.0) {100\%};
\node at (0,-.1){\textbf{Effect of Changing $\beta$}};
\end{tikzpicture}