pgfplots 中正态分布的总和

pgfplots 中正态分布的总和

我需要创建这个图表(尝试以通用方式编写它,我使用的是 Python):

f(x) = sum([x*a>1 for a in gaussian(...)]) % some normal distribution

我尝试使用的是这个:

\pgfmathdeclarefunction{gaussian}{2}{\pgfmathparse{1/(#2*sqrt(2*pi))*exp(-((x-#1)^2)/(2*#2^2))}%
}

\pgfmathdeclarefunction{gsum}{2}{%
\pgfmathsetmacro\ret{0}%
\foreach \i in {#1}{%
  \pgfmathsetmacro\ret{\ret+(\i*#2>1?1:0)}%
  \xdef\ret{\ret}%
}%
\pgfmathparse{\ret}%
}

...

\addplot [
domain=0:1.5, 
samples=100, 
color=red,
]
{gsum(gaussian(0.75,0.25), x)};

我希望从 Python 获得什么:

Python 图表

我得到的是:

在此处输入图片描述

非常感谢您的帮助,我已经找了好几个小时也没找到解决方案,可能是因为我几天前才开始使用它。

答案1

现在,我不知道您到底想要什么功能,所以我绘制了几个。

您的问题是,您\pgfmathsetmacro\ret{0}在函数中使用了。\ret每次调用时都会重置,因此不会进行任何总结。将初始化移到前面\addplot可以解决您的问题。

代码:

\documentclass[border=2mm]{standalone}
\usepackage{pgfplots}

\pgfmathdeclarefunction{gaussian}{2}{%
    \pgfmathparse{1/(#2*sqrt(2*pi))*exp(-((x-#1)^2)/(2*#2^2))}%
}

\pgfmathdeclarefunction{gsum}{2}{%
    %\pgfmathsetmacro\ret{0}% bad here, because it resets \ret every time
    \foreach \i in {#1}{%
        \pgfmathsetmacro\ret{\ret+(\i*#2>1?1:0)}%
        \xdef\ret{\ret}%
    }%
    \pgfmathparse{\ret}%
}
\pgfmathdeclarefunction{gsuma}{2}{%
    \foreach \i in {#1}{%
        \pgfmathsetmacro\ret{\ret+(\i*#2)}%
        \xdef\ret{\ret}%
    }%
    \pgfmathparse{\ret}%
}
\pgfmathdeclarefunction{gsumb}{2}{%
    \foreach \i in {#1}{%
        \pgfmathsetmacro\ret{\ret+(\i)}%
        \xdef\ret{\ret}%
    }%
    \pgfmathparse{\ret}%
}

\begin{document}
\begin{tikzpicture}
\begin{axis}[xlabel=$x$,ylabel=$f(x)$]
% initialise \ret
\pgfmathsetmacro\ret{0}%
\addplot [
domain=0:1.5, 
samples=100, 
color=red,
]
{gsum(gaussian(0.75,0.25), x)};

% initialise \ret again
\pgfmathsetmacro\ret{0}%
\addplot [
domain=0:1.5, 
samples=100, 
color=cyan,
]
{gsuma(gaussian(0.75,0.25), x)};

% and initialise \ret yet again
\pgfmathsetmacro\ret{0}%
\addplot [
domain=0:1.5, 
samples=100, 
color=green,
]
{gsumb(gaussian(0.75,0.25), x)};

% just to see the gaussian function
\addplot [
domain=0:1.5, 
samples=100, 
color=blue,
]
{10*gaussian(0.75,0.25)};
\end{axis}
\end{tikzpicture}
\end{document}

结果:

在此处输入图片描述

相关内容