0

我认为这可能是数学正态分布问题,但我想用 php 编写代码。这就是问题。

在我的约会网站上,我想为每个男人介绍两个女人。存在年龄基础问题。男人就像-8 ~ +4 岁的女人。(当然,每个国家可能不同。但在中国,大多数夫妻都在这个范围内。)所以男人比女人大两岁(-2)时的匹配分数最高,并且年龄为-8~+4女性,匹配覆盖率必须为 98%。

$min = -8;
$max = 4;
$coverage_percent = 0.98f;

function matching_score($man_age, $woman_age)
{
  $score = <- some normal distribution function ->;
  return $score;
}

我会为每个男人挑选两个最高分的女人。

这种方法对所有夫妻都有 98% 的概率。

php中有没有快速的正态分布概率函数?

4

1 回答 1

1

我所知道的编程语言没有内置的正态分布函数,因此必须获取库或自己实现。像 Excel 和 Matlab 这样的高级环境提供了这种功能。我不知道 PHP,但下面是我在 C# 中使用的正常分发实现,所以想必你可以转换为 PHP。它同时具有 CDF(累积分布函数)和 PDF(概率分布函数)。

public class Normal {
    public const double INVRTP = .398942280401433; // INVerse of Root Two Pi  !!
    private const double    y0  = 0.2316419,
                            a0 = 0.31938153,
                            a1 = -0.356563782,
                            a2 = 1.781477937,
                            a3 = -1.821255978,
                            a4 = 1.330274429;
    public static double NormalCDF(double x) {
        double y = 1.0 / (1 + y0 * System.Math.Abs(x));
        y = 1.0 - NormalPDF(x) * (y * (a0 + y * (a1 + y * (a2 + y * (a3 + y * a4)))));
        return (x <= 0.0) ? 1.0 - y : y;
    }
    public static double NormalPDF(double x) {
        return INVRTP * System.Math.Exp(-x * x / 2.0);
    }
}
于 2013-05-31T09:06:33.360 回答