缩放到参数化区间的随机数

缩放到参数化区间的随机数

动机:用点阴影表示图表。点具有随机坐标。它们聚集在隐藏的用户输入坐标周围,具体位置或远或远取决于这些输入。

如何使用\pgfmathsetseed{\pdfuniformdeviate ...}(或使用不同的代码,如果 for 循环迭代时速度更快)来构造一个\graf{b,x}返回随机的实数 z同一数量级(参数化 b)作为控制输入的实数 x?

因此,如果 0 ≤ x < b^1,则 0 ≤ z ≤ b^1,如果 b^1 ≤ x < b^2,则 b^1 ≤ z ≤ b^2,... 近似值足够准确。

希望\graf能够定义成能够\graf{\B,{\X-\Y}}正确扩展,即使\M{\graf{\B,{\X-\Y}}}对于某些其他宏\M,也不会阻止编译或必须编译两次。

答案1

不确定这是否是您所需要的,但我将数字的顺序计算为其底数的对数的下限b,然后生成 0 和 1 之间的随机数并使用仿射变换重新缩放。

\documentclass{article}
\usepackage{tikz}

\newcommand{\graf}[2]{%
  \pgfmathparse{floor(ln(#2)/ln(#1))}%
  \pgfmathparse{#1^\pgfmathresult*(1+#1*rnd)}%
}

\newcommand{\showgraf}[2]{% to show
  \graf{#1}{#2}\pgfmathresult\par
}

\begin{document}

\ttfamily

\showgraf{3}{23.3}
\showgraf{10}{23.3}
\showgraf{10}{323.3}
\showgraf{10}{2333.3}
\showgraf{1.2}{1}
\showgraf{1.2}{10}
\showgraf{1.2}{100}

\end{document}

在此处输入图片描述

这是一个完全可扩展的版本,应该也可用于坐标计算。但它不适用于 XeTeX。

\documentclass{article}
\usepackage{xparse}
\usepackage{luatex85} % if using LuaTeX

\ExplSyntaxOn
\DeclareExpandableDocumentCommand{\graf}{mm}
 {
  \guido_graf:fnn { \pdfuniformdeviate 1000000 } { #1 } { #2 }
 }
\cs_new:Nn \guido_graf:nnn
 {
  \fp_eval:n
   {
    (#2**(floor(ln(#3)/ln(#2))))*(1+#2*(#1/1000000))
   }
 }
\cs_generate_variant:Nn \guido_graf:nnn { f }
\ExplSyntaxOff

\begin{document}

\ttfamily

\graf{3}{23.3}\par
\graf{10}{23.3}\par
\graf{10}{323.3}\par
\graf{10}{2333.3}\par
\graf{1.2}{1}\par
\graf{1.2}{10}\par
\graf{1.2}{100}\par

\end{document}

相关内容