我想计算一个从 1 到 MAX 的对数范围,数字的近似总数为 TOTAL。
一个非对数的例子可能是:
$max = 3600;
$total = 100;
$range = array();
for($i = $total; $i > 0; $i--){
$range[] = round($max/$i);
}
然而,这会创建一个大致均匀分布的范围。我希望该范围在开始时拥有大部分数字,而在结束时数量较少 - 通过对数刻度。值的总数不是一个严格的限制,只是一个估计。
关于对数刻度的有趣之处在于,$range
数组的元素(这些是x
您以后可能用来计算函数值的值fct(x)
)实际上具有指数行为,而不是对数行为。如果您查看此Wikipedia 图像,您会看到轴刻度是 10^1、10^2、10^3 等 - 这是指数增长(我说的是轴刻度,而不是函数本身!) .
要生成它,请使用
$max = 3600;
$total = 100;
$range = array();
for($i = 0; $i < $total; $i++) {
$range[] = pow($max,$i/($total - 1));
}
在这里使用PDL似乎是你最好的选择:
require_once '../LognormalDistribution.php';
require_once 'make_table.php';
$mu = 0.0;
$sigma = 1.0;
$lognormal = new LognormalDistribution($mu, $sigma);
$Output1 = $lognormal->PDF(.2);
$Output2 = $lognormal->ICDF(0.95);
$Output3 = $lognormal->CDF(.50);
希望有帮助...