为什么这个图没有给我正确的结果?

为什么这个图没有给我正确的结果?

我正在尝试绘制$\sin(\pi x)$$\frac{2\pi}{\sin(\pi x)}$在范围内(1/2,3/2)

这是我正在使用的代码。

\documentclass[border=10pt]{standalone}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
  \begin{axis} [axis lines=center]
    \addplot [domain=1/2:3/2, smooth, thick] {(sin(deg(pi*x)) };
  \end{axis}
\end{tikzpicture}

\begin{tikzpicture}
  \begin{axis} [axis lines=center]
    \addplot [domain=1/2:3/2, smooth, thick] {(2*pi)/(sin(deg(pi*x)) };
  \end{axis}
\end{tikzpicture}
\end{document}

我对第一个情节理解正确,但对第二个情节理解错误。

我究竟做错了什么?

有没有更好的方法可以做到这一点?

附录:

我尝试将函数 Taylor 展开,$x=1$然后尝试绘图。同样,它没有给出正确的绘图,而在 Mathematica 中绘图时,此函数也能给出正确的绘图。

\begin{tikzpicture}
  \begin{axis} [axis lines=center]
    \addplot [domain=1/2:3/2, smooth, thick] {3.28987-3.28987*x+2/(x-1) };
  \end{axis}
\end{tikzpicture}

答案1

我认为有两个错误:你的域和你的泰勒展开。当你谈到 Mathematica 正确地绘制了第三张图,但没有给我们一张 Mathematica 正确绘图的图片时,我很难理解你对第三张图的解释。我注意到的问题是你说域是 1/2 到 3/2,但这是不正确的1 is not part of the domain since sin(pi)=0 . The solution is to break the plot into 2 pieces to avoid 1::

\documentclass[11pt]{article}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
  \begin{axis} [axis lines=center]
    \addplot [domain=1/2:.99, smooth, thick] {(2*pi)/(sin(deg(pi*x)) };
    \addplot [domain=1.01:3/2, smooth, thick] {(2*pi)/(sin(deg(pi*x)) };
  \end{axis}
\end{tikzpicture}
\begin{tikzpicture}
  \begin{axis} [axis lines=center]
    \addplot [domain=1/2:.99,, smooth, thick] {3.28987-3.28987*x+2/(x-1) };
    \addplot [domain=1.01:3/2, smooth, thick] {3.28987-3.28987*x+2/(x-1) };
  \end{axis}
\end{tikzpicture}
\end{document}

结果如下所示。 在此处输入图片描述

这两个图现在不一致,但它们看起来非常相似。所以我去了Sage 单元服务器并让它计算泰勒多项式。截图如下:

在此处输入图片描述

改变泰勒多项式的图并绘制它得到: 在此处输入图片描述

由于 1/sin(x)=csc(x) 且 csc(x) 的导数=-csc(x)cot(x),我怀疑您的泰勒展开式存在符号问题:您有 +2/(x-1) 而 Sage 给出 -2/(x-1)。

答案2

编辑:
您应该知道,pgfplots 不是像 Mathematica、Matlab 和其他程序那样的专用数学程序,但它是一个使用 (La)Tex 绘制图表的强大工具。

致反对者:我看不出我的答案有什么问题,为什么会这样。我漏掉了什么?欢迎任何人提供任何解释!

对于问题中的前两个图表,请尝试以下操作:

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

\begin{document}
\pgfplotsset{                       % common axis settings
    trig format=rad,                %  <--- added

    axis lines=center,
    enlarge x limits = {0.1, upper},% <--- added
    enlarge y limits = 0.1,         % <--- added
        xtick={4*pi/6,5*pi/6,...,9*pi/6},         % <--- added
        xticklabels={$4\pi/6$,$5\pi/6$,$\pi$, 
                     $7\pi/6$,$8\pi/6$,$4\pi/3$}, % <--- added
    %    xticklabels={120,150,180,210,240},
        xticklabel style={minimum height=3.3ex, 
                          font=\footnotesize},    % <--- added
    samples = 200,                  %   <------ increased number of sample
    no marks,
    restrict y to domain=-100:100,  %   <------
    every axis plot post/.append style={very thick},  % <--- added
            }

\begin{tikzpicture}[baseline]       % both pictures are aligned to baseline  \begin{axis}
    \addplot +[domain=pi/2:3*pi/2] { sin(x) };
  \end{axis}
\end{tikzpicture}

\begin{tikzpicture}[baseline]
  \begin{axis}[
        extra x ticks={pi},
        extra tick style={grid=major, densely dashed, xticklabel={\empty}},
              ]  
    \addplot +[domain=pi/2:3*pi/2] { 2*pi/sin(x) };
  \end{axis}
\end{tikzpicture}
\end{document}

与您的 MWE 代码相比,上述代码的主要变化是:

  • 已删除smooth选项。
  • 样本数量增加。这意味着函数计算的准确度提高。
  • 第二个图表的代码中添加了restrict y to domain=-100:100限制函数计算的功能,直到其值小于设置的 y 限值 (-100,+100)。这样,更接近的计算将x = 1被跳过。
  • 由于函数的计算以弧度为单位考虑参数,因此xtick标签也是以弧度为单位,但是您可以将它们更改为度(如下方注释的代码行所示xtickclabels = ...),只需取消注释代码行即可xticklabels={120,150,180,210,240}

在此处输入图片描述

对于问题附录中添加的图表,您并不完全清楚它的问题是什么以及您期望它应该呈现什么。它实际上是移位和倒置的第二张图。无论如何,以以下形式添加到提议的 MWE 中:

\begin{tikzpicture}[baseline]
  \begin{axis}[
        extra x ticks={1}, % for marking function pol
        %extra x ticks label={1}, 
        extra tick style={grid=major, densely dashed},
              ]
    \addplot +[domain=1/2:3/2] {3.28987-3.28987*x+2/(x-1) };
  \end{axis}
\end{tikzpicture}

得出以下结果:

在此处输入图片描述

我这就是你所追求的?

相关内容