我需要画一个由这些余弦波相加而成的波
这是我在 LuaLaTeX 中的尝试:
\documentclass{article}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\usepackage{luacode}
\begin{luacode*}
function p(x)
assert(x == math.floor(x), "x must be an integer")
res = 0
for W = 0, 4000 do
res = res + (1/2) * (1 + math.cos(2*math.pi*x*W))
end
tex.sprint(res)
end
\end{luacode*}
\begin{document}
\begin{tikzpicture}[
declare function={p(\n) = \directlua{p(\n)};}
]
\begin{axis}[
use fpu=false, % very important!
xlabel=$x$, ylabel=$p(x)$,
samples at={0,...,21},
only marks,
]
\addplot {p(x)};
\end{axis}
\end{tikzpicture}
\end{document}
我期望的图形形状具有中心绝对最大值,局部最大值随着中心最大值的远离而减小
图表未显示任何内容
答案1
我仍然不是现在使用 LuaLaTeX 的酷孩子之一。此解决方案将使用纯 LaTeX(即 pdflatex)完成。
我使用了tikzmath
TikZ 库,不需要 PGFPlots。另外,我不知道您是否真的需要1+
在求和中,因为它只会将图形向上移动,但您可以根据需要自定义以下内容。也许\n = 6
。
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{math}
\begin{document}
\begin{tikzpicture}[scale=.5]
\tikzmath{
function f(\x, \n) {
%\y = \n+1;
\y = 0;
for \i in {0,...,\n} {
\y = \y + cos(deg(2 * pi * \x) * \i);
};
\y = \y / 2;
return \y;
};
}
\draw[->] (-5,0) -- (5,0) node[below] {\(x\)};
\draw[->] (0,-1) -- (0,4) node[left] {\(p(x)\)};
\draw[domain=-4:4, samples=201, smooth] plot (\x, {f(\x,6)});
\end{tikzpicture}
\end{document}
回答评论:这实际上应该有效,你只需要添加use fpu=false
,正如你所说(另请参阅此问题)。
\documentclass[convert]{standalone}
\usepackage{tikz}
\usepackage{pgfplots}
\usetikzlibrary{math}
\begin{document}
\begin{tikzpicture}[scale=.5]
\tikzmath{
function f(\x, \n) {
%\y = \n+1;
\y = 0;
for \i in {0,...,\n} {
\y = \y + cos(deg(2 * pi * \x) * \i);
};
\y = \y / 2;
return \y;
};
}
\begin{axis}[use fpu=false]
\addplot[domain=-4:4, samples=201] {f(x,6)};
\end{axis}
\end{tikzpicture}
\end{document}