![通过求和定义的函数可视化](https://linux22.com/image/407363/%E9%80%9A%E8%BF%87%E6%B1%82%E5%92%8C%E5%AE%9A%E4%B9%89%E7%9A%84%E5%87%BD%E6%95%B0%E5%8F%AF%E8%A7%86%E5%8C%96.png)
我多次访问过这个网站,希望能找到问题的答案,而且很多时候我都找到了我所寻找的东西,所以首先感谢那些分享知识的专家。
我最后还是有一个问题没法解决:我需要在足够大的X域。捕捉实部和虚部其实并不让我害怕,因为我可以很容易地从公式中找到它们,但问题是如何从求和中得到图形。
我在这里找到了类似问题的答案如何在 tikz 图中使用求和但是我是一个对最深层编码充满热情但不切实际的人,我不知道如何消除变量应该是整数的条件,因为我想要一个实数,具有一定的域和样本数。
因此,感谢所有能够提供帮助的人,祝大家有美好的一天!
编辑:感谢语法更正。正如评论中所建议的那样,我分享了我的尝试,但我批评它是第一次,因为我能做的最好的就是复制上面链接中给出的答案,将其用作“基础”,并进行我认为必要的所有修改。我使用 LaTeX 已经快两年了,我知道 TikZ 和 PgfPlots 的基础知识,可以制作漂亮的图形,但我从来没有用 Lua 编码的必要性。所以代码如下
\pgfplotsset{compat=newest}
\usepackage{luacode}
\begin{luacode*}
function p(x)
assert(x == math.floor(x), "x must be an integer")
res = 0
for k = -100, 100 do
res=res+((cos(k*x)*k+sin(x*k))/(k^2+1))
end
tex.sprint(res)
end
\end{luacode*}
\begin{document}
\begin{tikzpicture}[
declare function={p(\n) = \directlua{p(\n)};}
]
\begin{axis}[
use fpu=false,
xlabel=$x$, ylabel=$p(x)$,
domain=0:40,
samples=50,
only marks,
]
\addplot {p(x)};
\end{axis}
\end{tikzpicture}
\end{document}
我完全知道抄袭别人的代码不是最好的选择,但我现在不知道该怎么做。所以我接受每一个建议,甚至包括去学习那种编程语言的建议:我只是想了解我需要哪些工具来提高 LaTeX 水平并解决与问题相关的问题。
谢谢大家。
答案1
您不一定需要lualatex
这些总和。另外,我不明白您是如何得出想要绘制的表达式的,我的结果有些不同,如下所示。以下代码有一个新函数sum
。您可以summand
通过同名的键定义。它被假定为求和索引(\k
,比如)和绘图变量(\x
,比如)的函数,按该顺序排列。(我必须将其存储在 pgf 键中,因为pgfplots
和tikz
以不同的方式处理传递给函数的字符串类型参数。我选择这个是因为它可以转换为纯 Ti钾Z 很容易。)因此,为了绘制总和,您需要定义被加数,例如
declare function={imp(\k,\x)=-2*cos(\k*\x)/(1+\k*\k);}
然后可以说
\addplot+[summand=imp] {-1+sum(100,\x)};
接下来我会发布完整的例子以及我得到的实部和虚部结果。
\documentclass[fleqn]{article}
\usepackage[margin=1in]{geometry}
\usepackage[sumlimits]{amsmath}
\DeclareMathOperator{\re}{Re}
\DeclareMathOperator{\im}{Im}
\usepackage{pgfplots}
\pgfplotsset{compat=1.16}
\newcounter{isum}
\pgfplotsset{summand/.initial=max}
\pgfmathdeclarefunction{sum}{2}{%
\begingroup%
\pgfkeys{/pgf/fpu,/pgf/fpu/output format=fixed}%
\edef\myfun{\pgfkeysvalueof{/pgfplots/summand}}%
\pgfmathsetmacro{\mysum}{0}%
\pgfmathsetmacro{\myx}{#2}%
\pgfmathtruncatemacro{\imax}{#1}%
\setcounter{isum}{1}%
\loop
\pgfmathsetmacro{\mysum}{\mysum+\myfun(\value{isum},#2)}%
\ifnum\value{isum}<\imax\relax
\stepcounter{isum}\repeat
\pgfmathparse{\mysum}%
\pgfmathsmuggle\pgfmathresult\endgroup%
}%
\begin{document}
\begin{align}
p(x)&=\sum_{k=-\infty}^\infty\frac{\mathrm{e}^{\mathrm{i}\,k\,x}}{k+\mathrm{i}}
\notag\\
&=\frac{1}{\mathrm{i}}+\sum_{k=1}^\infty\left(
\frac{\mathrm{e}^{\mathrm{i}\,k\,x}}{k+\mathrm{i}}
+
\frac{\mathrm{e}^{-\mathrm{i}\,k\,x}}{-k+\mathrm{i}}\right)\notag\\
&=\frac{1}{\mathrm{i}}+\sum_{k=1}^\infty
\frac{(\mathrm{i}-k)\,\mathrm{e}^{\mathrm{i}\,k\,x}+(\mathrm{i}+k)\,\mathrm{e}^{-\mathrm{i}\,k\,x}}{
-(1+k^2)}\notag\\
&=-\mathrm{i}-\mathrm{i}\,\sum_{k=1}^\infty\frac{2\,\cos(k\,x)}{(1+k^2)}
+\sum_{k=1}^\infty\frac{2k\,\sin(k\,x)}{(1+k^2)}\;,
\end{align}
so
\begin{subequations}
\begin{align}
\re p(x)&=\sum_{k=1}^\infty\frac{2k\,\sin(k\,x)}{(1+k^2)}\;,\\
\im p(x)&=-1-\sum_{k=1}^\infty\frac{2\,\cos(k\,x)}{(1+k^2)}\;.
\end{align}
\end{subequations}
\begin{figure}[htb]
\centering
\begin{tikzpicture}[declare function={imp(\k,\x)=-2*cos(\k*\x)/(1+\k*\k);
rep(\k,\x)=2*\k*sin(\k*\x)/(1+\k*\k);},/pgfplots/trig format plots=rad]
\begin{axis}[xlabel=$x$, ylabel={},
domain=1:40,
samples=51,
no markers,
smooth,
]
\addplot+[summand=rep] {sum(100,\x)};
\addplot+[summand=imp] {-1+sum(100,\x)};
\legend{$\re p(x)$,$\im p(x)$}
\end{axis}
\end{tikzpicture}
\end{figure}
\end{document}