【问题标题】:Converting mathematica formula in PHP在 PHP 中转换数学公式
【发布时间】:2014-01-06 06:31:27
【问题描述】:

我有这个基于mathematica的公式:

2*CDF[BinomialDistribution[100, 1/2], 30] // N

但我不知道如何在 PHP 中转换它.. 这是原始问题:

https://math.stackexchange.com/questions/619136/calculate-the-probabilities-of-appearing-even-or-odd-numbers-in-a-predefined-set

任何人都可以帮助我将上述公式转换为有效的 PHP 函数吗? 这可能吗?

谢谢

【问题讨论】:

  • 我假设您想更改其中一些数字并计算结果。 CDF[BinomialDistribution[a, b], c]==(Beta[1-b, a-Floor[c], 1+Floor[c]] Gamma[1+a])/(Gamma[a-Floor[c] ]] Gamma[1+Floor[c]]) when 0

标签: php wolfram-mathematica


【解决方案1】:

您必须从头开始实施它。不幸的是我不知道 PHP 语法,我给你写了 C 代码,你可以很容易地引用自己:

double cdfBinomial(int n ,double p ,int k){
    double sum = 0;
    for(int i = 0; i <= k; i++){
        sum+=combinations(n,i)*pow((double)p,(double)i)*pow((double)(1-p),(double)(n-i));
    }
    return sum;
}

您还必须实现combinations 功能,如完成here

【讨论】:

  • n,p 和 k 代表什么?对不起,我有点困惑:D
  • n 和 p 是二项式函数的参数,而 k 是你的“30”,试试看这里:en.wikipedia.org/wiki/…
  • 我相信你在for循环中需要i &lt;= k
【解决方案2】:

这是一个使用通用 Mathematica 形式的 HAL9000 代码的演示。

首先是CFD版本:

2*CDF[BinomialDistribution[100, 0.5], 30]

0.0000785014

现在带有辅助combinations 函数的通用形式:

combinations[n0_, k_] := Module[{n = n0},
  If[k > n, 0,
   r = 1; For[d = 1, d <= k, ++d,
    r *= n--;
    r /= d];
   r]]

n = 100; p = 0.5; k = 30;

sum = 0; For[i = 0, i <= k, i++,
 sum += combinations[n, i]*p^i*(1 - p)^(n - i)];

2*sum

0.0000785014

这个页面对写这篇文章很有用:The Binomial Distribution

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多