2011-09-16 40 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文檔,瞭解用於函數創建的正確語法。