我正在尝试绘制$\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}
得出以下结果:
我这就是你所追求的?