我想在PHP中实现一个ERF函数。我从维基百科得到了它的公式
P_Value = 1- ( ERF ( ABS ( Residual –mean ) )/(√2*SD )
我没有想到如何在PHP中实现它。
答案 0 :(得分:2)
有更好的方法来近似误差函数而不是通过简单的数值积分。 Wikipedia article about erf有一个数值近似公式。您可以在Abramowitz& amp; Stegun"数学函数手册"或者Digital Library of Mathematical Functions。
我在PHP中找到了一个实现:http://php.net/manual/en/function.stats-stat-percentile.php(查找术语"错误函数"在文中)。不确定这实现了哪个公式。
答案 1 :(得分:1)
根据您提供的公式,只有ERF(错误功能)部分应如下所示:
function ERF ($difference) {
return abs($difference);
}
现在从php脚本内的任何地方调用$value = ERF($residual - $mean);
,将ERF值存储在$value
变量中。
修改强> 我们假设你的意思是这个公式:
所以,它应该是:
function ERF ($ll, $ul, $t, $dt, $dx) {
$val = 0;
for($i = $ll; $i <= $ul; $i+=$dx){
$val += exp(-pow($t,2)) * $dt;
}
return (2/sqrt(pi())) * $val;
}
现在调用$value = ERF(0, $x, $t, $dt, $dx);
,其中$ x是上限,$ t是时间,$ dt是积分的dt部分,如时间间隔。
注意:我在这里添加了另一个参数$ dx因为它是连续域的积分而且$ dx,$ dt都应该非常接近0以获得更好的近似值。对于离散值,您可以将$ dx和$ dt都设置为1.而且这可以称为求和而不是积分。
为了更好地近似积分,请参阅Numerical integration算法和技术。