현재 위치: > 최신 기사 목록> lcg_value () 분포 함수와 함께 간단한 확률 모델을 만드는 방법은 무엇입니까? 실용적인 예시 설명

lcg_value () 분포 함수와 함께 간단한 확률 모델을 만드는 방법은 무엇입니까? 실용적인 예시 설명

gitbox 2025-06-17

확률 이론 및 통계에서, 시뮬레이션 된 임의의 이벤트는 종종 특정 분포와 일치하는 임의 숫자의 생성을 요구합니다. PHP가 제공하는 LCG_VALUE () 함수는 간격 [0,1) 내에 균등하게 분포되는 의사 랜덤 부동 소수점 번호를 생성 할 수 있습니다. 이 기사는 분포 함수와 결합 된 LCG_VALUE ()를 사용하여 간단한 확률 모델을 생성하고 예제를 통해 유용한 방법을 보여주는 방법을 소개합니다.


LCG_VALUE 란 무엇입니까 ()

LCG_VALUE () 는 PHP에서 내장 된 의사 랜덤 수 생성 기능입니다. 선형 합동 발전기를 기반으로하며 [0, 1) 간격으로 골고루 분포 된 부동 소수점 번호를 반환합니다. 이 기능을 사용하면 균일 한 임의의 이벤트를 시뮬레이션 한 다음 변환을 통해보다 복잡한 분포를 달성 할 수 있습니다.

 <?php
$randNum = lcg_value();
echo $randNum; // 산출 0 도착하다 1 사이의 부동 소수점 번호
?>

분포 함수를 사용하여 확률 모델을 만듭니다

확률 모델은 종종 랜덤 변수의 누적 분포 함수 (CDF)를 정의합니다. 대상 분포가있는 CDF가있는 경우 F ( x ) F(x) , 균일 랜덤 변수가 주어지면 U U n i f o r m ( 0 , 1 ) U \sim \mathrm{Uniform}(0,1) , 계산에 의해 X = F ? 1 ( U ) X = F^{-1}(U) (즉, 역 함수 변환) 대상 분포와 일치하는 랜덤 변수를 얻을 수 있습니다.

간단히 말하면 :

  • lcg_value ()를 사용하여 균일 랜덤 숫자를 생성하십시오 U U

  • 대상 분포를 사용한 역 CDF 기능 F ? 1 ( U ) F^{-1}(U) 대상 분포의 랜덤 숫자로 변환됩니다.


실제 예 : 이산 확률 분포의 랜덤 숫자를 생성합니다

간단한 이산 랜덤 변수가 있다고 가정합니다 X X 의 값은 {a, b, c}이고 해당 확률은 각각 {0.2, 0.5, 0.3}입니다. 이 랜덤 변수를 시뮬레이션하기 위해 lcg_value ()를 사용하는 방법은 무엇입니까?

아이디어는 :

  1. 이산 분포 (CDF)의 누적 분포 함수 구성

  2. 균일 한 랜덤 번호 생성 u = \ text {lcg_value} ()

  3. ~에 따르면 u u 출력 할 이벤트를 결정하는 간격

 <?php
function sampleDiscrete() {
    $u = lcg_value();

    if ($u < 0.2) {
        return 'A'; // 0 <= u < 0.2
    } elseif ($u < 0.7) { // 0.2 <= u < 0.7 (0.2 + 0.5)
        return 'B';
    } else { // 0.7 <= u < 1
        return 'C';
    }
}

// 테스트를 실행하십시오
$results = ['A' => 0, 'B' => 0, 'C' => 0];
for ($i = 0; $i < 10000; $i++) {
    $sample = sampleDiscrete();
    $results[$sample]++;
}

print_r($results);
?>

실행 후 통계 결과는 확률 {0.2, 0.5, 0.3}에 근사합니다.


실제 예 : 기하 급수적으로 분산 된 랜덤 숫자를 생성합니다

연속 분포의 경우 항 -CDF 방법도 적용됩니다. 예를 들어 지수 분포는 다음과 같습니다 λ \lambda , CDF는 다음과 같습니다.

F ( x ) = 1 ? e ? λ x F(x) = 1 - e^{-\lambda x}

역 CDF는 다음과 같습니다.

F ? 1 ( u ) = ? ln ? ( 1 ? u ) λ F^{-1}(u) = -\frac{\ln(1-u)}{\lambda}

기하 급수적으로 분산 된 랜덤 숫자를 생성하기 위해 lcg_value ()를 사용하는 예 :

 <?php
function sampleExponential($lambda) {
    $u = lcg_value();
    return -log(1 - $u) / $lambda;
}

// 测试산출
for ($i = 0; $i < 5; $i++) {
    echo sampleExponential(2) . "\n"; // lambda = 2
}
?>

요약

  • lcg_value ()는 확률 시뮬레이션의 기초 인 균일하게 분산 된 랜덤 숫자를 생성합니다.

  • 대상 분포 또는 역 함수의 누적 분포 함수 (CDF)와 결합하면 임의 분포를 생성하는 임의 변수가 변환 될 수 있습니다.

  • 개별 분포는 간격으로 나누어지고 역 CDF 변환을 통해 연속 분포가 달성됩니다.

이 방법은 간단하고 실용적이며 확률 모델과 시뮬레이션 된 임의의 이벤트를 빠르게 구현하는 데 적합합니다.

보다 자세한 사용은 공식 PHP 문서를 참조하십시오 : https://gitbox.net/manual/en/function.lcg-value.php .