情节无限系列

情节无限系列

我想使用 pgfplots 绘制一个定义为无限序列的函数。这可能吗?如何实现?该函数由以下公式给出

\[u(t,x)=\sum_{n=1}^{+\infty}\frac{\sin(2nt)\sin(nx)}{n^2}.\]

我们可以给出t一些固定值,比如t=0.1, 0.2, 1, 4,并尝试绘制仅的函数x,但仍然被无限和所阻止。

事实上,我能做的是使用单个函数,比如 n=2 或 3 或 N 中的任何固定值。但对于无限和,我不知道。这是一个 mwe。

\documentclass{article}
\usepackage{xcolor,pgfplots}
\pgfplotsset{compat=1.18}
\begin{document}

\begin{tikzpicture}
\begin{axis}
\addplot3 [surf,domain=0:pi,domain y=0:1] {sin(4*deg(y))*sin(2*deg(x))/4};
\end{axis}
\end{tikzpicture}

\begin{tikzpicture}
\begin{axis}[
axis lines=center,
enlargelimits=true,]
\addplot[thick, red, domain=0:pi, smooth, samples=300]  {sin(4)*sin(2*deg(x))/4};
\addplot[thick, green ,domain=0:pi, smooth, samples=300]  {sin(8)*sin(2*deg(x))/4};
\addplot[thick, blue, domain=0:pi, smooth, samples=300]  {sin(12)*sin(2*deg(x))/4};
\legend{$t=1$,  $t=2$, $t=3$};  
\end{axis}
\end{tikzpicture}
\end{document}

答案1

您可以通过将无穷级数截断为一定数量的项来近似无穷级数。实际上,您应该选择合理的高项数以获得良好的近似值。在这种情况下,我将向您展示如何将级数截断为 10 个项。您可以根据需要轻松调整项数。

为了使代码更简洁,您可以使用循环来生成总和中的项。以下是使用 t=0.1、0.2、1 和 4 的函数的示例:

\documentclass[margin=3mm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.18}

\ExplSyntaxOn
\NewExpandableDocumentCommand{\RepeatFunction}{mm}{\int_step_function:nnN{#1}{#2}\RepeatFunction:n}
\pgfplotsset{repeatable~function/.code=\DeclareExpandableDocumentCommand{\RepeatFunction:n}{m}{#1}}
\ExplSyntaxOff
\pgfplotsset{
    /pgf/declare function={sinsin(\n,\t,\x)=sin(2*\n*\t)*sin(\n*\x)/(\n*\n);},
    repeatable function={+sinsin(#1,\t,x)},
    sinsin terms/.initial=10,
    sinsin terms/.code={\pgfplotsset{sinsin terms/.initial=#1}}
}

\begin{document}
    \foreach \t in {0.1, 0.2, 1, 4}{
        \begin{tikzpicture}
            \begin{axis}[
                trig format plots=rad,
                axis lines=center,
                enlargelimits,
                xtick = {0, pi/4, pi/2, 3*pi/4, pi},
                xticklabels = {0, $\pi/4$, $\pi/2$, $3\pi/4$, $\pi$},
                domain=0:pi,
                samples=201,
                no marks,
                title={t = $\t$},
                legend pos={outer north east},
                sinsin terms=10 % Set the number of terms here
                ]
                \addplot[blue] {\RepeatFunction{1}{\pgfkeysvalueof{/pgfplots/sinsin terms}}};
            \end{axis}
        \end{tikzpicture}
    }
\end{document}

在此处输入图片描述

答案2

1/N这个无穷和收敛得非常慢,因为如果使用项,你预计绝对误差为 阶N。这大致意味着如果你想要多一位小数,你需要十倍的项。对于假设1地图为 的图形1cm,你应该瞄准 的精度0.1mm,但要知道如果连续的最终绘图将使用贝塞尔曲线应用一些插值(使用直线段将显示明显的斜率变化)。这意味着(我没有太认真地估计)你开始知道你需要大约 100 个项。由于隐含常数很重要,也许 20 个项就足够了。然后,注意计算的数值精度。

正如其他答案所解释的那样,您似乎需要使用 TikZ 做一些工作,并且没有简单的类型语法add(sin(2n*t)sin(n*x)/n^2, n from 1 to N)

u(t,x) = (v(2t-x)-v(2t+x))/2后台部门的一位同事曾指出,他有一定程度的弦理论经验,在这种情况下,你可以用一个精确的公式来表达和(显然数学家并不总是能够做到这一点)。首先

v(y) = \sum_{n=1}^\infty \frac{\cos(n y)}{n^2}

我们都知道v(2\pi u)是由一个因子决定的,该因子在区间上[0,1]有值,B_2(u)其中B_2是第二个伯努利多项式,B_2(u) = u^2 - u + 1/6。准确地说

\sum_{n=1}^\infty \frac{\cos(2\pi n u)}{n^2} = \pi^2B_2(\{u\})

其中\{u\}是分数部分。这实际上是基于欧拉求值的傅里叶级数的著名证明之一,\sum 1/n^2 = \pi^2/6我们可以通过代入 看到u=0

在此处输入图片描述

总结

\sum_{n=1}^\infty \frac{\sin(2n t)\sin(nx)}{n^2} =
\frac{\pi^2}2\left(B_2(\{\frac{2t-x}{2\pi}\})-
  B_2(\{\frac{2t+x}{2\pi}\})\right)

三角级数和

左边\pi在 中是 -周期的,在 中是 -周期的,t并且是奇数的。所以我将假设和。还设使得和。我将在这里简化以与其他图片中的图进行比较,并假设 不仅如此并且并且 的第二个贡献是。(人们可以使用 中的奇数来始终简化为这种情况)。所以2\pix0<x<\pi0<t<\pix'=x/2\pi0<x'<1/2t' = t/2\pi0<t'<1/20<t'<1/40<2t'+x' < 1B_2B_2(2t'+x')t0<t<\pi/2

  • 0<x'<2t'<1/2:我们得到(2t'-x')^2 - (2t'-x') + 1/6 - (x'+2t')^2 + (x'+2t') - 1/6 = -8x't'+2x' = (2 - 8t') x',我们不要忘记乘法因子\pi^2/2。因此线性增长达到 处2\pi^2(1 - 4t')t'的值x'=2t'。由于t'=t/2\pi,这是t(\pi - 2t)。例如对于t=0.1我们得到0.294159...。希望我计算正确,如果不是以后,我会改正并悔改,但这超出了我的 TeX 知识范围。

  • 2t'<x'<1/2:现在2t'-x'<0我们使用的均匀度B_2(\{u\})并将其替换为,x'-2t'以便可以应用公式,我们得到(直到\pi^2/2(x'-2t')^2 - (x'-2t') + 1/6 - (x'+2t')^2 + (x'+2t') - 1/6 = -8t'x' +4t' = 4t'(1 - 2x')它是线性减少的,朝着0在的值x'= 0.5并且从x'=2t'4t'(1-4t')(倍)开始\pi^2/2,所以t(\pi-2t)(在它应该)是与之前找到的值相同的值。

因此,我们可以用无穷多项式来解释极限图的确切形状:它在(0,\pi)(对于t<\pi/2)上由两条直线段组成,它们在笛卡尔坐标的点处相交,并在和(2t,(\pi - 2t)t处为零纵坐标。我试图从我的物理学博士同事那里重新构建解释,所以不要在没有独立咨询的情况下将其用作家庭作业。x=0x=\pi

最大值为 t(pi-2t)

答案3

正如其他人所说,不,你无法计算无穷大的总和。

但是,您可以计算出直到特定点的总和。

宏应该可以帮到你。它只是对所有整数值重复给定的函数\RepeatFunction{s}{e}n之间。se

可以使用代表值的函数来指定repeatable function它应该使用的函数#1n

由于您的函数也是参数化的,因此我还添加了sinsin t可重复函数使用的值键。

如果你只想绘制此函数一次(对于给定的)你需要自己弄清楚n停止。

代码

\documentclass[tikz]{standalone}
\usepackage{pgfplots}\pgfplotsset{compat=1.18}
\usepgfplotslibrary{groupplots}
\ExplSyntaxOn
\NewExpandableDocumentCommand{\RepeatFunction}{mm}{\int_step_function:nnN{#1}{#2}\RepeatFunction:n}
\pgfplotsset{repeatable~function/.code=\DeclareExpandableDocumentCommand{\RepeatFunction:n}{m}{#1}}
\ExplSyntaxOff
\pgfplotsset{
  /pgf/declare function={sinsin(\n,\t,\x)=sin(2*\n*\t)*sin(\n*\x)/(\n*\n);},
  repeatable function={+sinsin(#1,\pgfkeysvalueof{/pgfplots/sinsin t},x)},
  sinsin t/.initial=1}
\begin{document}
\begin{tikzpicture}[
  mini legend/.style={at={(rel axis cs:.5,0)}, above, node contents={$t = #1$}}]
\begin{groupplot}[
  group style={group size = 2 by 2},
  %
  trig format plots=rad, axis lines=center, enlargelimits,
  xtick = {0, pi/4, pi/2, 3*pi/4, pi},
  xticklabels = {0, $\pi/4$, $\pi/2$, $3\pi/4$, $\pi$},
  domain=0:pi, samples=129, no marks,
  every axis legend/.append style={
    at={(1,1)}, anchor=north west, path only,
    /tikz/column 2/.append style={anchor=west}},
  style 10+/.style={path only},
  style 10/.style={thick, densely dashed, black}
]
\nextgroupplot
  \pgfplotsinvokeforeach{1,...,5,10}{
    \addplot+[style #1+/.try, forget plot, very thin] {sinsin(#1,1,x)};
    \addplot+[style #1/.try] {\RepeatFunction{1}{#1}};
  }
  \node[mini legend=1];
\nextgroupplot[sinsin t=2]
  \pgfplotsinvokeforeach{1,...,5,10}{
    \addplot+[style #1+/.try, forget plot, very thin] {sinsin(#1,2,x)};
    \addplot+[style #1/.try] {\RepeatFunction{1}{#1}};
    \addlegendentry{$n = #1$}
  }
  \node[mini legend=2];
\nextgroupplot[sinsin t=.2]
  \pgfplotsinvokeforeach{1,...,5,10}{
    \addplot+[style #1+/.try, forget plot, very thin] {sinsin(#1,.2,x)};
    \addplot+[style #1/.try] {\RepeatFunction{1}{#1}};
  }
  \node[mini legend=0.2];
\nextgroupplot[sinsin t=.5]
  \pgfplotsinvokeforeach{1,...,5,10}{
    \addplot+[style #1+/.try, forget plot, very thin] {sinsin(#1,.5,x)};
    \addplot+[style #1/.try] {\RepeatFunction{1}{#1}};
  }
  \node[mini legend=0.5];
\end{groupplot}
\end{tikzpicture}
\end{document}

输出

在此处输入图片描述

答案4

我发现你的问题很难解释,所以我需要进一步解释我的方法。首先,你的问题是“我想使用 pgfplots 绘制一个定义为无限级数的函数。这可能吗?怎么做?”。正如 Zarko 所指出的,答案必然涉及有限数量的项。它不会是精确的。所以我将解释如何在假设 的情况下绘制 1 个无限级数t=.1

当你开始研究更复杂的数学时,重要的是要意识到你的计算和绘图的准确性可能不正确;pgfplots毕竟不是计算机代数系统 (CAS)。我发现首先使用 CAS 确定答案应该是什么很有帮助。之后,使用 sagetex 包将 CAS 绘图/计算合并到你的 LaTeX 文档中。你谈到t首先修复一个值,所以我选择了t=.1并转到了一个Sage 单元服务器您可以在其中复制/粘贴以下代码:

def f(t,n):
     return (sin(2*n*t)*sin(n*x))/(n^2)

g(x)=sum(f(.1,n) for n in range(1,21))
h(x)=sum(f(.1,n) for n in range(1,201))
P1=plot(g(x),(x,0,3.14))
P2=plot(h(x),(x,0,3.14),color="red")
(P1+P2).show()

按下Enter按钮,您将获得以下输出:

在此处输入图片描述

从这个输出中,我看到绘制该系列的 20 个项可以给我一个相当不错的估计值,这就是我将在我的 LaTeX 文档中使用它。你应该尝试找到n你认为最有效的值。为什么我说 20 个项?因为range(1,21)是 Python,它不会运行最后一个值,所以我使用的图总结了前 20 个项。还要注意,我已经定义了 f(t,n) 的一般形式。你可以轻松地将其更改t为你想要的任何形式。我们pgfplots现在要绘制的是g(x)但由于我们不能相信这个复杂数学的数值准确性,我们将使用鼠尾草将 Sage CAS 计算链接到我们的文档。代码如下:

\documentclass{article}
\usepackage{sagetex,xcolor,pgfplots}
\pgfplotsset{compat=1.16}
\begin{document}
\begin{sagesilent}
def f(t,n):
     return (sin(2*n*t)*sin(n*x))/(n^2)

g(x)=sum(f(.1,n) for n in range(1,21))

x_coords = [x for x in srange(0,6.28,.01)]
y_coords = [g(x).n(digits=4) for x in x_coords]
output = r"\begin{tikzpicture}"
output += r"\begin{axis}[xmin=0,xmax=6.28,ymin= -.5,ymax=.5,"
output += r"xlabel=$x$,ylabel=$y$,axis x line=middle,axis y line=middle,"
output += r"grid style=dashed]"
output += r"\addplot[thin, blue] coordinates {"
for i in range(0,len(x_coords)-1):
    output += r"(%f , %f) "%(x_coords[i],y_coords[i])
output += r"};"
output += r"\end{axis}"
output += r"\end{tikzpicture}"
\end{sagesilent}
\sagestr{output}
\end{document}

在 Cocalc 中运行的输出如下所示:

在此处输入图片描述

注意,我更改了图表,使其约为 2pi(约 6.28)。该行将x_coords = [x for x in srange(0,6.28,.01)]设置要绘制的 x 值,即 0、.01、....、6.27。该行y_coords = [g(x).n(digits=4) for x in x_coords]表示,计算每个 x 值的 g(x),但我们强制将答案设为小数(有 4 个有效数字),以便 pgfplots 可以处理它。请注意,使用Sagealong withsagetex可以避免在 sin(2(1)(.1))*sin((1)x))/(1^2)+....+sin(2(20)(.1))*sin((20)x))/(20^2) 中输入 20 项。最后,将代码作为原始字符串插入似乎很奇怪;之所以这样做,是因为在幕后处理文档需要 3 步:首先,LaTeX 代码必须按原样运行,然后 Python/Sage 代码必须无错误运行,然后再处理文档一次,将 Python/Sage 输出放入 LaTeX 文档中。如果没有字符串,代码很可能在第一遍就无法在 LaTex 下运行。

智者是一款免费的 CAS,不属于 LaTeX。您可以将其下载到您的计算机并使其与 LaTeX 配合使用,但最简单的入门方法是打开一个免费的可钙帐户,在那里创建一个 LaTeX 文档,复制/粘贴代码,然后按Build

相关内容