如何减少以下示例所需的内存(嵌套的“for”循环)

如何减少以下示例所需的内存(嵌套的“for”循环)

我想绘制两个光谱的卷积。第一个是加权狄拉克梳,第二个是定义函数。为此,我使用了两个嵌套的 for 循环,但计算超出了 Tex 容量(尽管我大大增加了它)TeX capacity exceeded, sorry [main memory size=259000000]:。

有没有更好的方法来可视化人工函数的卷积?或者有更好的方法来实现给定的示例?它使用 samples=100 来工作,但我需要 1000 才能获得清晰的边缘。

\documentclass{article}
\usepackage{pgfplots}
\begin{document}

\begin{tikzpicture} 
    \begin{axis}[xmax=4.5,xmin=-4.5,ymax=1.2,ymin=0,enlargelimits=false,axis lines=center,width=12cm, height=3cm]
        \foreach \ox/\oy in {-3.6/0.15,-2.4/0.1,-1.2/0.6,0/1,3.6/0.15,2.4/0.1,1.2/0.6}{ 
            \foreach \p [evaluate=\p as \p using \p+\ox,evaluate=\p as \m using \ox,evaluate=\oy]in {-4,-3,-2,-1,0,1,2,3,4}{ 
                \addplot[domain=-5:5, fill=blue, samples=100,fill opacity=0.5]{\oy*((x+\p)>-0.2 && (x+\p)<0.2)*abs(sin(180*(x+\m))/(pi*(x+\m)))};
            } 
        }
    \end{axis}
\end{tikzpicture}
\end{document}

PS:我也有狄拉克梳作为 x 的函数,但我已经用列表替换它以降低计算能力。

包含 100 个样本的图片

答案1

我设法用 LuaLaTeX 编译了该图samples=1000;当然,这需要长的时间,但 LuaTeX 动态分配主内存。

\documentclass{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}

\begin{document}

\begin{tikzpicture} 
    \begin{axis}[xmax=4.5,xmin=-4.5,ymax=1.2,ymin=0,enlargelimits=false,axis lines=center,width=12cm, height=3cm]
        \foreach \ox/\oy in {-3.6/0.15,-2.4/0.1,-1.2/0.6,0/1,3.6/0.15,2.4/0.1,1.2/0.6}{ 
            \foreach \p [evaluate=\p as \p using \p+\ox,evaluate=\p as \m using \ox,evaluate=\oy]in {-4,-3,-2,-1,0,1,2,3,4}{ 
                \addplot[domain=-5:5, fill=blue, samples=1000,fill opacity=0.5]{\oy*((x+\p)>-0.2 && (x+\p)<0.2)*abs(sin(180*(x+\m))/(pi*(x+\m)))};
            } 
        }
    \end{axis}
\end{tikzpicture}
\end{document}

由于您可能不想经常更改此图,因此我使用standalone它来生成可以作为图像包含的 PDF。

以下是time回复:

  144.74 real       144.48 user         0.21 sys

也就是说超过两分钟。根据系统统计,运行该进程大约需要180MB的内存。

在此处输入图片描述

相关内容