2011-09-16 4 views
0

J'essaie de calculer une valeur dans mysql en utilisant une distribution normale où les moyennes peuvent être nulles ou quelque chose d'autre.Calcul d'une distribution de normes dans MySQL

EDIT trouvé cela, mais ne savez pas comment changer ne

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

Félicitations! Qu'avez-vous essayé jusqu'à présent? – CanSpice

+0

Cela a déjà été répondu ici: http://stackoverflow.com/questions/2360180/how-to-generate-a-gaussian-distribution-using-mysql-user-defined-function – diagonalbatman

Répondre

1

Converti 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

Votre erreur est probable délimiteurs. Veuillez consulter la documentation de MySQL concernant la syntaxe à utiliser pour la création de fonction.