📄 distributions.h
字号:
struct Cauchydist {
Doub mu, sig;
Cauchydist(Doub mmu = 0., Doub ssig = 1.) : mu(mmu), sig(ssig) {
if (sig <= 0.) throw("bad sig in Cauchydist");
}
Doub p(Doub x) {
return 0.318309886183790671/(sig*(1.+SQR((x-mu)/sig)));
}
Doub cdf(Doub x) {
return 0.5+0.318309886183790671*atan2(x-mu,sig);
}
Doub invcdf(Doub p) {
if (p <= 0. || p >= 1.) throw("bad p in Cauchydist");
return mu + sig*tan(3.14159265358979324*(p-0.5));
}
};
struct Expondist {
Doub bet;
Expondist(Doub bbet) : bet(bbet) {
if (bet <= 0.) throw("bad bet in Expondist");
}
Doub p(Doub x) {
if (x < 0.) throw("bad x in Expondist");
return bet*exp(-bet*x);
}
Doub cdf(Doub x) {
if (x < 0.) throw("bad x in Expondist");
return 1.-exp(-bet*x);
}
Doub invcdf(Doub p) {
if (p < 0. || p >= 1.) throw("bad p in Expondist");
return -log(1.-p)/bet;
}
};
struct Logisticdist {
Doub mu, sig;
Logisticdist(Doub mmu = 0., Doub ssig = 1.) : mu(mmu), sig(ssig) {
if (sig <= 0.) throw("bad sig in Logisticdist");
}
Doub p(Doub x) {
Doub e = exp(-abs(1.81379936423421785*(x-mu)/sig));
return 1.81379936423421785*e/(sig*SQR(1.+e));
}
Doub cdf(Doub x) {
Doub e = exp(-abs(1.81379936423421785*(x-mu)/sig));
if (x >= mu) return 1./(1.+e);
else return e/(1.+e);
}
Doub invcdf(Doub p) {
if (p <= 0. || p >= 1.) throw("bad p in Logisticdist");
return mu + 0.551328895421792049*sig*log(p/(1.-p));
}
};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -