如何绘制函数 f(x) = sin(1/x)

如何绘制函数 f(x) = sin(1/x)

我尝试绘制函数f(x)= \sin(1/x)(0,1)这是我的试验

\begin{tikzpicture}
\draw[blue, domain=1:2] plot({\x}, {sin(1/(\x)) r)});
\end{tikzpicture}

但是输出结果很奇怪,我不知道为什么。输出结果为

在此处输入图片描述

有人能帮我解决这个问题吗?!提前谢谢

答案1

我假设您希望获得如下内容:

在此处输入图片描述

您的代码仅给出垂直虚线之间的部分,因此您的代码没有任何错误,只有选定的域没有显示sin(1/x)x --> 0 出现的频率如何。

\documentclass[border=3mm,tikz]{standalone}

\begin{document}
    \begin{tikzpicture}
\draw[->]       (-0.1, 0) -- + (5,0) node[below left] {$x$};
\draw[->]       (0,-1.1) -- + (0,2.7) node[below left] {$\sin(1/x)$};
\draw[dashed]   (1,-1) -- + (0,2) (2,-1) -- + (0,2);
\foreach \i in {0.5, 1,...,4}
{
\draw (\i,0) -- + (0,-0.1) node[below,font=\scriptsize,fill=white] {\i};
}
\draw[blue,     samples=1000, domain=0.01:0.2] plot(\x, {sin(1/\x r)});
\draw[blue,smooth,samples=50, domain=0.2:5]    plot(\x, {sin(1/\x r)});
    \end{tikzpicture}
\end{document}

函数分为两部分绘制,因为这样可以节省样本数量并缩短计算时间。

附录: 如果您也想为负参数绘制此函数,则需要相应地采用域。我建议将函数分为两部分绘制:域中的样本数量较少$|x|>0.2$,域 $|x|<0.2$ 中的样本数量较多。

如果您希望将函数域限制为 (-1,1) 并获得更大的图像,则可以按下面的 MWE 所示缩放它。

在此处输入图片描述

您还可以使用此功能进行绘制pgfplots

在此处输入图片描述

在这种情况下,您无需关心图像大小。它由图像宽度决定。但是,这里也可以像在纯 TikZ 中一样将函数分为两部分绘制。这样,您就可以节省绘制此函数所需的时间。

附录中图片的 MWE 为:

\documentclass[border=3mm,tikz]{standalone}
\usepackage{pgfplots}

\begin{document}
%with tikz
    \begin{tikzpicture}[xscale=2.5]
\draw[->]       (-1.1,0) -- + (2.2,0) node[below left] {$x$};
\draw[->]       (0,-1.1) -- + (0,2.7) node[below left] {$\sin(1/x)$};
\foreach \i in  {-1, -0.5,0.5,1}
{
\draw (\i,0.1) -- + (0,-0.2) node[below,font=\scriptsize,fill=white] {\i};
}
\draw[blue,samples=50,domain=-1:-0.2,smooth] plot(\x, {sin(1/(\x) r)});
\draw[blue,samples=1000,domain=-0.2:-0.01]   plot(\x, {sin(1/(\x) r)});
\draw[blue,samples=1000,domain=0.01: 0.2]    plot(\x, {sin(1/(\x) r)});
\draw[blue,samples=50,domain= 0.2: 1,smooth] plot(\x, {sin(1/(\x) r)});
    \end{tikzpicture}

% with pgfplots
    \begin{tikzpicture}
\begin{axis}[
    width=6cm,
 axis lines=middle,
 ticklabel style={fill=white},
 xmin=-1.2,xmax=1.2,
 ymin=-1.2,ymax=1.5,,
 xlabel=$x$,ylabel=$\sin(1/x)$,
        ]
\addplot[blue,samples=50,domain=-1:-0.2,smooth] {sin(1/\x r)};
\addplot[blue,samples=1000,domain=-0.2:-0.02]   {sin(1/\x r)};
\addplot[blue,samples=1000,domain=0.02: 0.20]   {sin(1/\x r)};
\addplot[blue,samples=50,domain= 0.2: 1,smooth] {sin(1/\x r)};
\end{axis}
    \end{tikzpicture}
\end{document}

相关内容