在PHP中实现ERF功能

时间:2014-08-21 07:29:26

标签: php math

我想在PHP中实现一个ERF函数。我从维基百科得到了它的公式

P_Value = 1-  (  ERF ( ABS ( Residual –mean ) )/(√2*SD )

我没有想到如何在PHP中实现它。

2 个答案:

答案 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变量中。

修改 我们假设你的意思是这个公式:

enter image description here

所以,它应该是:

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算法和技术。