在我之后发现为了提高精度fpu
,我尝试绘制一个包含大指数的图。我选择了月球对测试质量的引力图(以 SI 单位表示)作为示例。
我如何使以下代码处理大指数并自动获得合理的图表。
\documentclass[tikz]{standalone}
\usepackage{pgfplots}
\newcommand{\td}[2]{\pgfmathsetmacro{#1}{#2}}
\pgfkeys{/pgf/fpu,/pgf/fpu/output format=sci}
\begin{document}
\begin{tikzpicture}
\begin{axis}
%% Plot Gravitational force of the moon
\td{\mM}{7.36e22} % mass of the moon in kg
\td{\rM}{1.74e6} % radius of the moon in m
\td{\mK}{1}% test mass in kg
\td{\gG}{6.67e-11} % gravitational constant
\addplot[domain=0:10e6] gnuplot {\gG*\mK*\mM/(\rM + x)^2};
\end{axis}
\end{tikzpicture}
\end{document}
显然,人们可以为上面的例子选择更合理的单位,但我的观点是如何pgfplots
(有或没有gnuplot
)直接处理具有如此高指数的图。
答案1
轴pgfplots
无法处理 FPU 格式的值。您必须在环境内移动 FPU 指令axis
并对其进行范围限定。
\documentclass[tikz]{standalone}
\usepackage{pgfplots}
\newcommand{\td}[2]{\pgfmathsetmacro{#1}{#2}}
\begin{document}
\begin{tikzpicture}
\begin{axis}
%% Plot Gravitational force of the moon
{
\pgfkeys{/pgf/fpu,/pgf/fpu/output format=sci}
\td{\mM}{7.36e22} % mass of the moon in kg
\td{\rM}{1.74e6} % radius of the moon in m
\td{\mK}{1}% test mass in kg
\td{\gG}{6.67e-11} % gravitational constant
\addplot[domain=0:10e6] gnuplot {\gG*\mK*\mM/(\rM + x)^2};
}
\end{axis}
\end{tikzpicture}
\end{document}
要简单地将值设置为宏,您无需调用数学解析器(这也会稍微加快排版速度)。Gnuplot 可以处理大指数,因此无需先通过 PGF 消化它们。
\documentclass[tikz]{standalone}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}
%% Plot Gravitational force of the moon
\def\mM{7.36e22} % mass of the moon in kg
\def\rM{1.74e6} % radius of the moon in m
\def\mK{1}% test mass in kg
\def\gG{6.67e-11} % gravitational constant
\addplot[domain=0:10e6] gnuplot {\gG*\mK*\mM/(\rM + x)^2};
\end{axis}
\end{tikzpicture}
\end{document}