编辑代码

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() {
	// 定义Beta分布的参数(α和β)
	alpha := 2.0
	beta := 5.0

	// 创建Beta分布的随机数生成器
	betaDist := distuv.Beta{
		Alpha: alpha,
		Beta:  beta,
	}

	// 生成随机数
	randomValue := betaDist.Rand()

	fmt.Printf("Generated random value from Beta distribution: %.4f\n", randomValue)

	// 计算概率密度函数(PDF)值
	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 // 泊松分布的参数 lambda
	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()
}