我想绘制两个光谱的卷积。第一个是加权狄拉克梳,第二个是定义函数。为此,我使用了两个嵌套的 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 的函数,但我已经用列表替换它以降低计算能力。
答案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的内存。