mysql normsinv_在MySQL中实现NORMSINV函数

我需要在MySQL中使用逆正态累积分布函数(Excel中的是NORMSINV函数),但是那里没有这样的函数.也许你们中的任何一个都为MysqL实现了它?

非常感谢您的宝贵时间.

最佳答案

好吧,我终于找到了这个.它不是完美的,但是很好的替代.该代码不是我的,其作者是Geoffrey C. Barnes.我刚刚将其从VB.NET转换为MysqL.

DROP FUNCTION IF EXISTS NORMSINV;

DELIMITER //

CREATE FUNCTION NORMSINV (p DOUBLE) RETURNS DOUBLE

BEGIN

DECLARE q,r DOUBLE;

DECLARE A1,A2,A3,A4,A5,A6 DOUBLE;

DECLARE B1,B2,B3,B4,B5 DOUBLE;

DECLARE C1,C2,C3,C4,C5,C6 DOUBLE;

DECLARE D1,D2,D3,D4 DOUBLE;

DECLARE P_LOW,P_HIGH DOUBLE;

/* coefficients in rational approximations */

SET A1 = -39.696830286653757;

SET A2 = 220.9460984245205;

SET A3 = -275.92851044696869;

SET A4 = 138.357751867269;

SET A5 = -30.66479806614716;

SET A6 = 2.5066282774592392;

SET B1 = -54.476098798224058;

SET B2 = 161.58583685804089;

SET B3 = -155.69897985988661;

SET B4 = 66.80131188771972;

SET B5 = -13.280681552885721;

SET C1 = -0.0077848940024302926;

SET C2 = -0.32239645804113648;

SET C3 = -2.4007582771618381;

SET C4 = -2.5497325393437338;

SET C5 = 4.3746641414649678;

SET C6 = 2.9381639826987831;

SET D1 = 0.0077846957090414622;

SET D2 = 0.32246712907003983;

SET D3 = 2.445134137142996;

SET D4 = 3.7544086619074162;

/* define break points */

SET P_LOW = 0.02425;

SET P_HIGH = 1 - P_LOW;

IF (p > 0 AND p < P_LOW) THEN

/* rational approximation for lower region */

SET q = SQRT(-2 * LOG(p));

RETURN (((((C1 * q + C2) * q + C3) * q + C4) * q + C5) * q + C6) /

((((D1 * q + D2) * q + D3) * q + D4) * q + 1);

ELSEIF (p >= P_LOW AND p <= P_HIGH) THEN

/* rational approximation for central region */

SET q = p - 0.5;

SET r = q * q;

RETURN (((((A1 * r + A2) * r + A3) * r + A4) * r + A5) * r + A6) * q /

(((((B1 * r + B2) * r + B3) * r + B4) * r + B5) * r + 1);

ELSEIF (p > P_HIGH AND p < 1) THEN

/* rational approximation for upper region */

SET q = SQRT(-2 * LOG(1 - p));

RETURN -(((((C1 * q + C2) * q + C3) * q + C4) * q + C5) * q + C6) /

((((D1 * q + D2) * q + D3) * q + D4) * q + 1);

/* on error returning 0 */

ELSE

RETURN 0;

END IF;

END//

DELIMITER ;

总结

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

如您喜欢交流学习经验,点击链接加入交流1群:1065694478(已满)交流2群:163560250

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值