泊松分布(Poisson distribution)是一种统计学中的离散概率分布,由法国数学家西莫恩·德尼·泊松在19世纪发现并以其名字命名。这种分布用于描述在给定时间间隔或给定空间内,事件发生的次数的概率分布。
一个使用泊松分布估计茶叶蛋销售的例子如下:
假设你每天早上在市场上卖茶叶蛋。你可以使用泊松分布来预测每天能够卖出多少茶叶蛋。首先,你需要确定每天平均能够卖出多少茶叶蛋,这个数字可以作为泊松分布的参数λ。然后,你可以将时间段(例如一天、一周或一个月)作为时间单位,并使用泊松分布计算出在给定时间段内预期的茶叶蛋销售数量。
通过柏松分布你可以确切地知道:
“当前值”相对于“平均值”
所对应的“具体数学概率”
这就是意义!

使用POISSON函数,需要输入三个参数:事件发生的次数,每个事件发生的平均数,以及一个布尔值,用于指定函数是返回概率质量函数(FALSE)还是累积分布函数(TRUE)。
现在要在通达信中使用该函数输入指标
TDXDLL3(6,MA(C,10),C,1);
1,代表累积概率
0,代表单独概率

复制粘贴,用C++语言汇编生成dll
#include <vector>
#include <cmath>
#include <algorithm>
std::vector<double> precomputeLogFactorials(int max) {
std::vector<double> logFactorials(max + 1);
logFactorials[0] = 0.0;
for (int i = 1; i <= max; i++) {
logFactorials[i] = logFactorials[i - 1] + std::log(static_cast<double>(i));
}
return logFactorials;
}
void POISSON(int DataLen, float* pfOUT, float* pfINa, float* pfINb, float* pfINc) {
int :max_element(pfINb, pfINb + DataLen);
std::vector<double> logFactorials = precomputeLogFactorials(maxB);
for (int i = 0; i < DataLen; i++) {
int a = static_cast<int>(pfINa[i]);
int b = static_cast<int>(pfINb[i]);
int cumulative = (*pfINc);
if (cumulative == 1) {
double cdf = 0.0;
for (int k = 0; k <= b; k++) {
double log_probability = -a + k * std::log(a) - logFactorials[k];
double probability = std::exp(log_probability);
cdf += probability;
}
pfOUT[i] = static_cast<float>(cdf);
}
else {
double log_probability = -a + b * std::log(a) - logFactorials[b];
float probability = std::exp(log_probability);
pfOUT[i] = probability;
}
}
}
效果与Excel的效果完全一致


成功
要证明泊松分布,我们可以按照以下步骤逐步推导:
第一步,设随机变量X表示在单位时间内随机事件的平均发生次数,即λ=E(X)。
第二步,根据概率论中的二项分布性质,
我们知道当n足够大且p足够小时,二项分布B(n,p)可以近似为泊松分布P(λ)。
第三步,根据泊松分布的性质,
我们知道泊松分布的概率函数为P(X=k)=λ^ke^(-λ)/k!,其中k为非负整数。
第四步,根据二项分布的性质,
我们知道当n足够大时,
二项分布B(n,p)的概率函数可以近似为P(X=k)=C(n,k)p^k(1-p)^(n-k),
其中C(n,k)表示组合数。
第五步,将第三步和第四步的结果结合起来,我们可以得到泊松分布的证明。
具体来说,当n足够大且p足够小时,
我们有λ=np,C(n,k)≈λ^k/k!,p≈λ/n。
将这些结果代入二项分布的概率函数中,
我们可以得到P(X=k)≈P(X=k)=λ^ke^(-λ)/k!,
这正是泊松分布的概率函数。
通过数学来炒股,通过数学精准刻画概率,因此我们证明了泊松分布的数学逻辑上正确性。