package main
import (
"fmt"
"gonum.org/v1/gonum/stat/distuv"
"math"
"math/rand"
"time"
)
func exponential(lambda float64) float64 {
randomValue := -1 / lambda * math.Log(rand.Float64())
return randomValue
}
func factorial(n int) int {
if n == 0 {
return 1
}
return n * factorial(n-1)
}
func poissonProbability(lambda float64, k int) float64 {
return (math.Pow(lambda, float64(k)) * math.Exp(-lambda)) / float64(factorial(k))
}
func gammaPDF(x, alpha, beta float64) float64 {
if x < 0 || alpha <= 0 || beta <= 0 {
return 0
}
gamma := math.Gamma(alpha)
return (math.Pow(beta, alpha) * math.Pow(x, alpha-1) * math.Exp(-x*beta)) / gamma
}
func betaFun() {
alpha := 2.0
beta := 5.0
betaDist := distuv.Beta{
Alpha: alpha,
Beta: beta,
}
randomValue := betaDist.Rand()
fmt.Printf("Generated random value from Beta distribution: %.4f\n", randomValue)
x := 0.6
pdf := betaDist.Prob(x)
fmt.Printf("PDF of x=%.2f in Beta distribution: %.4f\n", x, pdf)
}
func main() {
rand.Seed(time.Now().UnixNano())
fmt.Printf("生成的指数分布随机数: %f\n", exponential(0.5))
lambda := 2.5
k := 3
probability := poissonProbability(lambda, k)
fmt.Printf("P(X=%d) = %.4f\n", k, probability)
x := 2.0
alpha := 3.0
beta := 2.0
result := gammaPDF(x, alpha, beta)
fmt.Printf("伽马分布在 %.2f 处的概率密度是: %.4f\n", x, result)
betaFun()
}