![费米-狄拉克在 pgfplots 中,维度太大](https://linux22.com/image/313757/%E8%B4%B9%E7%B1%B3-%E7%8B%84%E6%8B%89%E5%85%8B%E5%9C%A8%20pgfplots%20%E4%B8%AD%EF%BC%8C%E7%BB%B4%E5%BA%A6%E5%A4%AA%E5%A4%A7.png)
我正在尝试绘制费米-狄拉克分布图,
我想显示几行不同的温度 (T)。我的代码可以解决这个问题,除了零温度,它会导致Dimension too large
pgfplots 出错。有没有办法解决这个问题,同时保持玻尔兹曼的实际值恒定,k_B
以电子伏特为单位?
梅威瑟:
\documentclass[tikz,border=5pt]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
xlabel=$\frac{mv^2}{2k_BT}$ (eV),
ylabel=$f(n)$,
legend entries={0 K,100 K,1000 K,10000 K},
x tick style={color=black},
y tick style={color=black},
xtick pos=left,
ytick pos=left,
xmin=-3,
xmax=3,
ymin=-0.1,
ymax=1.1
]
\addplot[samples=50,black] {(1/((exp((x)/(80.617e-5))+1))};
\addplot[samples=50,blue,dashed] {(1/((exp((x)/(8.617e-3))+1))};
\addplot[samples=50,red,dashed] {(1/((exp((x)/(8.617e-2))+1))};
\addplot[samples=50,green,dashed] {(1/((exp((x)/(8.617e-1))+1))};
\end{axis}
\end{tikzpicture}
\end{document}
此代码可以编译,但80.617e-5
应该是,8.617e-5
这会破坏代码。我尝试过改变/删除xmin
,xmax
但没有成功。我也读过一些与此相关的答案fpu
,但这似乎对我不起作用或不再需要? restrict x to domain
似乎没有帮助,尽管我可能用错了。
答案1
根本原因是 使用的基于 TeX 的浮点单元存在缺陷pgfplots
。中间结果需要计算
\begingroup
%\tracingmacros=2 \tracingcommands=2
\pgfkeys{/pgf/fpu}
\pgfmathparse{exp(-3.4814e4)}\pgfmathresult
\endgroup
这达到了一些内部限制。我接受它作为错误报告,并看看我是否可以修复它。
目前,您可以考虑使用以下方法编译您的示例
pgfplots
在 1.12 或更新版本中lualatex
。
这将立即生效(只要您修复第一个\addplot
表达式中的语法错误,其中的圆括号就太多了)。