2011-09-16 8 views
0

平均値が0または何か他の値になる正規分布を使って、mysqlの値を計算しようとしています。MySQLのノルム分布を計算する

EDITはこれを見つけたが、変更する方法がわからないでは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のマニュアルを参照してください。

関連する問題