以下 MWE 导致错误Dimension too large
。将域的上限更改为较小的值(如120
gets)可使此错误消失。
\documentclass{article}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis} [
domain=-20:150,
]
\addplot+ {exp(-x*x)};
\end{axis}
\end{tikzpicture}
\end{document}
但我无法理解为什么。计算中应涉及的最大数字是150^2
,这完全在pgfplots
' 范围内(实际上绘图x*x
工作得很好)。我的猜测是,这与 的实现有关,exp
这使得在计算 的过程中pgfplots
尝试计算。但是,绘图仍然显示得很好,所以我不确定。exp(150^2)
exp(-150^2)
造成此错误的原因是什么?我该如何避免它?
(当然,我想要绘制的真正函数要复杂一些,所以仅仅手动绘制y = 0
或x > 50
类似的方法是行不通的。我需要解决/规避潜在的问题。)
答案1
正如我上面评论的那样,鼠尾草是处理更复杂数学的好工具。因为它可以让你访问 CAS 和 Python 编程语言。下面是一个快速sagetex
实现:
\documentclass[11pt,border=1mm]{standalone}
\usepackage{sagetex}
\usepackage[usenames,dvipsnames]{xcolor}
\usepackage{pgfplots}
\pgfplotsset{compat=1.16}
\begin{document}
\begin{sagesilent}
LowerX = -20
UpperX = 150
LowerY = -.1
UpperY = 1.1
step = .13
t = var('t')
g(x)= e^(-x^2)
x_coords = [t for t in srange(LowerX,UpperX,step)]
y_coords = [g(t).n(digits=6) for t in srange(LowerX,UpperX,step)]
output = r"\begin{tikzpicture}"
output += r"\begin{axis}[xmin=%f,xmax=%f,ymin= %f,ymax=%f,"%(LowerX,UpperX,LowerY, UpperY)
output += r"xlabel=$x$,ylabel=$y$,axis x line=middle,axis y line=middle,"
output += r"grid style=dashed]"
output += r"\addplot[thin, blue, unbounded coords=jump] coordinates {"
for i in range(0,len(x_coords)-1):
if (y_coords[i])<LowerY or (y_coords[i])>UpperY:
output += r"(%f , inf) "%(x_coords[i])
else:
output += r"(%f , %f) "%(x_coords[i],y_coords[i])
output += r"};"
output += r"\end{axis}"
output += r"\end{tikzpicture}"
\end{sagesilent}
\sagestr{output}
\end{document}
答案2
- 没有答案。
- 只是为了确保没有误解。
- 我在 MS Excel 中绘制了您的示例(请注意小数点分隔符是逗号,德语设置)。
- 我的截图是否符合你的预期(或者我犯了一个错误)?
更新 1
- 对版本/编译器有某种依赖性。
- 以下面的代码为例。
\documentclass{article}
\usepackage{pgfplots}
\pgfplotsset{compat=1.17}
\begin{document}
\begin{tikzpicture}
\begin{axis} [
domain = 120:130, % 120:121 works
samples = 10,
]
\addplot+ {exp(-x*x)};
\end{axis}
\end{tikzpicture}
\end{document}
- TeXLive 2020,pdfLaTeX:错误
- TeXLive 2020、LuaLaTeX:作品
- TeXLive 2021,pdfLaTeX:错误
- TeXLive 2021,LuaLaTeX:作品
- TeXLive 2021,LuaLaTeX:使用时出错
\pgfplotsset{compat=1.10}
!
更新 2
150^2
似乎有效!
\documentclass{article}
\usepackage{pgfplots}
\pgfplotsset{compat=1.18}
\begin{document}
\begin{tikzpicture}
\begin{axis} [
domain = 140:150,
samples = 10,
]
\addplot+ {x^2};
\end{axis}
\end{tikzpicture}
\end{document}
答案3
当我正确理解你的问题时,答案是:这种类型的问题在 TeX.SX 上很常见。这里一可能的解决方案来规避问题。有关详细信息,请查看代码中的注释。
这里列出了我回答过的类似问题,以及一些(最有可能)解决该问题的其他可能性。
- https://tex.stackexchange.com/a/561246/95441
- https://tex.stackexchange.com/a/611646/95441
- https://tex.stackexchange.com/a/470199/95441
% used PGFPlots v1.18.1
\documentclass[border=5pt]{standalone}
\usepackage{pgfplots}
\pgfplotsset{
% When using `compat` level 1.11 or lower TeX will be used as
% calculation engine. This includes not stating `compat` at all.
% Stating a `compat` level 1.12 or higher *and* compiling/TeXing with
% LuaLaTeX uses Lua as calculation engine (when the equation satisfies
% some requirements)
% --> using 1.11 results in a "Dimension too large" error
% --> using 1.12 and compiling with LuaLaTeX works just fine
compat=1.12,
}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
domain=-20:150,
]
\addplot {exp(-x^2)};
\end{axis}
\end{tikzpicture}
\end{document}