我想计算从1到MAX的对数范围,数字的总数大致为TOTAL。
非对数示例可能是:
$max = 3600;
$total = 100;
$range = array();
for($i = $total; $i > 0; $i--){
$range[] = round($max/$i);
}
然而,这会产生大致相等的分布范围。我希望范围在开始时具有大部分数字,并且在结束时通过对数刻度得到的数字越少。值的总数不是严格限制,只是估计值。
答案 0 :(得分:2)
关于对数刻度的有趣之处在于$range
数组的元素(那些是您可能用于计算函数值x
的值fct(x)
)实际上具有指数行为,而不是对数行为。如果你看一下这个Wikipedia image,你可以看到轴刻度是10 ^ 1,10 ^ 2,10 ^ 3等 - 这是指数增长(我说的是轴刻度,而不是函数本身!)。
要生成此内容,请使用
$max = 3600;
$total = 100;
$range = array();
for($i = 0; $i < $total; $i++) {
$range[] = pow($max,$i/($total - 1));
}
答案 1 :(得分:0)
使用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);
希望有帮助...