2011-09-16 109 views
0

我试图用正态分布来计算mysql中的一个值,其中的意思可以是零或其他。在MySQL中计算规范分布

编辑发现这一点,但不知道怎么改并不MYSQL

create Function CND(@X float) 
returns float 
as 
begin 
declare @L float 
declare @K float 
declare @a1 float 
declare @a2 float 
declare @a3 float 
declare @a4 float 
declare @a5 float 
set @a1 = 0.31938153 
set @a2 = -0.356563782 
set @a3 = 1.781477937 
set @a4 = -1.821255978 
set @a5 = 1.330274429 
set @L = Abs(@X) 
set @K = 1/(1 + 0.2316419 * @L) 
declare @CND1 float 
set @CND1 = 1 - 1/Sqrt(2 * Pi()) * Exp(-power(@L,2)/2) * (@a1 * @K + 
@a2 * power(@K,2) + @a3 * power(@K,3) + @a4 * power(@K,4) + @a5 * 
power(@K,5)) 
If @X < 0 
begin 
    set @CND1 = 1 - @CND1 
End 
return @CND1 
End 
+4

恭喜!你试过什么了? – CanSpice

+0

这已经在这里得到解答: http://stackoverflow.com/questions/2360180/how-to-generate-a-gaussian-distribution-using-mysql-user-defined-function – diagonalbatman

回答

1

转换到MySQL:

delimiter // 
create Function CND (_X double) 
returns float 
begin 
    set @X = _X; 
    set @a1 = 0.31938153; 
    set @a2 = -0.356563782; 
    set @a3 = 1.781477937; 
    set @a4 = -1.821255978; 
    set @a5 = 1.330274429; 
    set @L = Abs(@X); 
    set @K = 1/(1 + 0.2316419 * @L); 
    set @CND1 = 1 - 1/Sqrt(2 * Pi()) * Exp(-power(@L,2)/2) * (@a1 * @K + 
     @a2 * power(@K,2) + @a3 * power(@K,3) + @a4 * power(@K,4) + @a5 * 
     power(@K,5)); 

    if @X < 0 then 
     set @CND1 = 1 - @CND1; 
    end if; 

    return @CND1; 
end // 
delimiter ; 
-1

你的错误可能在于分隔符。请参阅MySQL文档,了解用于函数创建的正确语法。