pgfplots:绘制 (x*cos^2(x))/(sin(x)) 时输出奇怪的结果

pgfplots:绘制 (x*cos^2(x))/(sin(x)) 时输出奇怪的结果

试图策划(x * cos^2(x)) / (sin(x))

输出非常奇怪。只有视觉故障。有人知道如何修复吗?

分数维:

\documentclass{article}

\usepackage[utf8]{inputenc}
\usepackage{pgfplots}

% The next line does not change anything
% \pgfplotsset{compat=1.17}

\begin{document}
    \begin{tikzpicture}
    \begin{axis}[
        domain=-2*pi:2*pi,
        axis lines = middle,
        axis equal image,
        width=14cm,
        enlargelimits={abs=0.4},
        no markers,
        samples=200,
    ]
    \addplot[domain=-2*pi:2*pi]{(x*cos(deg( x ))^2)/( sin( deg( x) ) )};
    \end{axis}
    \end{tikzpicture}
\end{document}

答案1

您有一个dimension too large(在 x=0 附近除以零)。一种解决方案是像这样拆分:


\documentclass{article}

\usepackage[utf8]{inputenc}
\usepackage{pgfplots}\pgfplotsset{compat=1.16}

% The next line does not change anything
% \pgfplotsset{compat=1.17}

\begin{document}
    \begin{tikzpicture}
    \begin{axis}[
        domain=-2*pi:2*pi,
        ymin=-6, ymax=6,
        axis lines = middle,
        axis equal image,
        width=14cm,
        enlargelimits={abs=0.4},
        no markers,
        samples=199,
    ]
    \addplot[domain=0.2:2*pi]{(x*(cos(deg( x )))^2) /( sin( deg( x) ) )};
    \addplot[domain=-2*pi:-0.2]{(x*(cos(deg( x )))^2) /( sin( deg( x) ) )};
    \end{axis}
    \end{tikzpicture}
\end{document}

在此处输入图片描述

答案2

如果你尝试绘制该函数,没问题:

\documentclass{article}

\usepackage[utf8]{inputenc}
\usepackage{pgfplots}

% The next line does not change anything
 \pgfplotsset{compat=1.17}

\begin{document}
    \begin{tikzpicture}
    \begin{axis}[
%        domain=-2*pi:2*pi,
%        axis lines = middle,
%        axis equal image,
        width=14cm,
        enlargelimits={abs=0.4},
        no markers,
        samples=100,
    ]
    \addplot{(x*cos(deg( x ))^2)/( sin( deg( x) ) )};
    \end{axis}
    \end{tikzpicture}
\end{document}

函数图像

答案3

我无法将其作为评论,因为它太长了。给出的两个答案有些误导,因为那些几乎垂直的线不是图形的一部分。此外,该函数在 x=0 处没有定义。你的函数图应该更像这样: 在此处输入图片描述

这最接近接受的答案,但垂直线不是函数的一部分,并且在 (0,1) 处有一个洞。函数的定义域将是分母 sin(x) 不为 0 的所有 x 值。也就是说,x 不能是 pi 的倍数。当 pi 的倍数非零时,图像具有垂直渐近线。当 x=0 时,存在可移除的不连续性,因为极限定律以及著名的极限,即当 x 接近于 0 时 sin(x)/x 变为 1。所以在 (0,1) 处应该有一个洞来表示图像在那里没有定义。要生成的代码如下所示。它利用了 John Kormylo 关于 的评论restrict y to domain。这可以防止函数趋于无穷大从而破坏图像的问题。尝试删除该行并运行它。您将获得类似于您发布的代码的输出。错误dimension too large是由 x=pi 和 x=-pi 而不是 x=0 引起的。

\documentclass{standalone}
\usepackage[utf8]{inputenc}
\usepackage[dvipsnames]{xcolor}
\usepackage{pgfplots}
\pgfmathdeclarefunction{f}{1}{%
  \pgfmathparse{x*cos(deg(x))^2/sin(deg(x))}%
}
\tikzset{Line Style1/.style={smooth,thick, dashed,samples=400}}
\tikzset{Line Style2/.style={smooth,thick, samples=800}}
\pgfplotsset{holdot/.style={color=NavyBlue,fill=white,only marks,mark=*}}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
    restrict y to domain=-6.4:6.4,
    domain=-2*pi:2*pi,
    axis lines = middle,
    axis equal image,
    width=14cm,
    enlargelimits={abs=0.4},
    no markers,
    samples=200,
] 
\addplot[Line Style2, color=NavyBlue, domain=-6.4:6.4] (\x,{f(\x)}); 

\addplot[holdot] coordinates{(0,1)};
\end{axis}
\end{tikzpicture}
\end{document}

相关内容