我正在尝试cos(ln(x))
使用绘图pgfplots
但是我得到了这个我无法弄清楚的奇怪错误。
以下是我的 MWE:
\documentclass{standalone}
\usepackage{tikz}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}[xmin = 1, xmax = 2]
\addplot[blue, samples=50]{ ln(x) };
\addplot[red, samples=50]{ cos(deg(x)) };
\addplot[green, samples=50]{ cos(deg(ln(x)) };
\end{axis}
\end{tikzpicture}
\end{document}
错误来自行:\addplot[green, samples=50]{ cos(deg(ln(x)) };
并且如下:
第 14 行:缺失数字,视为零。...ot[green, samples=50]{ cos(deg(ln(x)) };
第 14 行:非法测量单位(插入 pt)。...ot[green, samples=50]{ cos(deg(ln(x)) };
我很困惑,因为绘图ln(x)
并cos(deg(x))
没有返回任何错误。并且ln(x)
在 1 到 2 上表现得非常好...
答案1
出现错误是因为您尝试计算cos(deg(ln(x)))
的负值x
,其中 的解ln(x)
是复数,并且ln(0)
是 -∞ ( -inf
)。它似乎deg
可以处理这些值,但cos
实际上却不能,原因我不知道。
之所以不会出现问题,是ln(x)
因为pgfplots
的初始设置为unbounded coords=discard
,这意味着如果它的计算结果为 ±∞(+inf
或-inf
)或 为nan
(“不是数字”),它会丢弃该值。这对 不起作用cos(deg(ln(x)))
,因为您尝试计算cos(nan)
或cos(-inf)
,这就是为什么只在最后一个图中出现错误的原因。
发生这种情况是因为您没有domain
为绘图指定,这意味着它将使用默认域-5:5
。
domain=1:2
因此,通过在轴上指定(或仅限于最后一个图):
\documentclass{standalone}
\usepackage{tikz}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}[xmin = 1, xmax = 2,domain=1:2]
\addplot[blue, samples=50]{ ln(x) };
\addplot[red, samples=50]{ cos(deg(x)) };
\addplot[green, samples=50]{ cos(deg(ln(x))) };
\end{axis}
\end{tikzpicture}
\end{document}