문제는 상보 오차 함수에 관한 것입니다
erfc(x)=2π−−√∫∞xexp(−t2)dt
"대형"값 ( 원래 질문의 경우 ), 즉 100에서 700,000 사이입니다. (실제로, 약 6보다 큰 값은 "큰"으로 간주해야합니다.) 이것은 p- 값을 계산하는 데 사용되므로 3 자리 이상의 유효 (10 진) 숫자를 얻는 데는 가치가 거의 없습니다. .x=n/2–√
시작하려면 @Iterator가 제안한 근사를 고려하십시오.
f(x)=1−1−exp(−x2(4+ax2π+ax2))−−−−−−−−−−−−−−−−−−−−−−√,
어디
a=8(π−3)3(4−π)≈0.439862.
이것은 오류 함수 자체에 대한 근사치 대한 끔찍한 근사치 입니다. 그러나 체계적으로 수정하는 방법이 있습니다.erfc
큰 값과 관련된 p- 값의 경우 상대 오차 이 있습니다. 세 개의 유효 값에 대해 절대 값이 0.001보다 작기를 바랍니다. 정밀도 불행하게도이 식은 배정 밀도 계산의 언더 플로로 인해 큰 대해 연구하기가 어렵습니다 . 다음은 한 번의 시도로, 대한 상대 오류 대 를 표시합니다 .x f(x)/erfc(x)−1xx0≤x≤5.8
가 5.3을 초과하면 계산이 불안정 해지고 5.8을 초과하는 유효 숫자 하나를 전달할 수 없습니다. 이것은 놀라운 일이 아닙니다. 이 배정 밀도 산술의 한계를 밀고 있습니다. 가 클수록 상대 오차가 상당히 작다는 증거는 없기 때문에 더 잘해야합니다 .xexp(−5.82)≈10−14.6x
확장 된 산술 계산 ( Mathematica 사용 )을 수행하면 현재 상황에 대한 그림이 향상됩니다.
따라 오류가 급격히 증가 하며 수평이 해제되지 않습니다. 과거 정도 인이 근사값은 신뢰할 수있는 한 자리수의 정보조차 제공하지 않습니다!xx=10
그러나 줄거리는 선형으로 보이기 시작합니다. 상대 오차가 직접 비례한다고 추측 할 수 있습니다 . (이것은 이론적 근거에서 의미가있다 : 는 명백하게 홀수 함수이고 는 명백하게 짝수이므로 비율은 홀수 함수 여야한다. 따라서 상대 오차가 증가하면 의 입니다.) 이로 인해 상대 오차를 로 나눈 값 을 연구하게 됩니다 . 마찬가지로, 나는 를 검사하기로 선택합니다. 희망적인 값은 일정한 제한 값을 가져야하기 때문입니다. 그래프는 다음과 같습니다.xerfcfx xx⋅erfc(x)/f(x)
우리의 추측은 널리 퍼져있는 것으로 보입니다 :이 비율은 약 8 정도의 한계에 근접한 것으로 보입니다. 요청하면 Mathematica 는 다음을 제공합니다.
a1 = Limit[x (Erfc[x]/f[x]), x -> \[Infinity]]
값은 입니다. 이를 통해 견적을 개선 할 수 있습니다.a1=2π√e3(−4+π)28(−3+π)≈7.94325
f1(x)=f(x)a1x
근사치의 첫 세분화로 때 정말 큰 -보다 몇 천 -이 근사는 괜찮습니다. 에서 사이의 흥미로운 논쟁 범위에 대해서는 여전히 충분하지 않기 때문에 절차를 반복합시다. 이번에는 역 상대 오류 (특히, 표현 는 큰 처럼 동작해야합니다 (이전 패리티 고려 사항으로 인해). . 따라서 곱하고 다음 한계를 찾습니다.x5.320001−erfc(x)/f1(x)1/x2xx2
a2 = Limit[x^2 (a1 - x (Erfc[x]/f[x])), x -> \[Infinity]]
값은
a2=132π−−√e3(−4+π)28(−3+π)(32−9(−4+π)3π(−3+π)2)≈114.687.
이 프로세스는 원하는만큼 진행될 수 있습니다. 한 걸음 더 나아가서
a3 = Limit[x^2 (a2 - x^2 (a1 - x (Erfc[x]/f[x]))), x -> \[Infinity]]
대략 1623.67의 값으로. (전체 표현은 의 8도 합리적 함수를 포함하며 여기서 너무 길어서 유용하지 않습니다.)π
이러한 연산을 풀면 최종 근사치가 산출됩니다.
f3(x)=f(x)(a1−a2/x2+a3/x4)/x.
오류는 비례합니다 . 수입은 비례 상수이므로 .x−6x6(1−erfc(x)/f3(x))
약 2660.59의 한계 값에 빠르게 접근합니다. 근사값 사용하여 모든 대해 상대 정확도가 보다 나은 추정값을 얻습니다 . 일단 20 정도 초과 (로, 또는 훨씬 더, 우리는 우리의 세 개의 유효 숫자가 커진다). 점검으로, 올바른 값을 과 사이의 에 대한 근사치와 비교 한 표가 있습니다 .f3erfc(x)2661/x6x>0xxx1020
x Erfc Approximation
10 2.088*10^-45 2.094*10^-45
11 1.441*10^-54 1.443*10^-54
12 1.356*10^-64 1.357*10^-64
13 1.740*10^-75 1.741*10^-75
14 3.037*10^-87 3.038*10^-87
15 7.213*10^-100 7.215*10^-100
16 2.328*10^-113 2.329*10^-113
17 1.021*10^-127 1.021*10^-127
18 6.082*10^-143 6.083*10^-143
19 4.918*10^-159 4.918*10^-159
20 5.396*10^-176 5.396*10^-176
실제로이 근사값은 에 대해 적어도 두 개의 유효 정밀도를 제공 하는데, 이는 보행자 계산 (예 : Excel의 함수)이 거의 끝나가는 부분입니다.x=8NormSDist
마지막으로 초기 근사값 를 계산하는 능력에 대해 걱정할 수 있습니다 . 그러나, 어렵지는 않습니다. 가 지수에서 언더 플로를 유발할만큼 충분히 크면 제곱근은 지수의 절반만큼 근사합니다.fx
f(x)≈12exp(−x2(4+ax2π+ax2)).
이것의 대수를 계산하는 것은 간단하며, 원하는 결과를 쉽게 얻을 수 있습니다. 예를 들어, 이라고하자 . 이 근사의 일반적인 로그는x=1000
log10(f(x))≈(−10002(4+a⋅10002π+a⋅10002)−log(2))/log(10)∼−434295.63047.
지수 산출
f(1000)≈2.34169⋅10−434296.
수정을 적용하면 ( )f3
erfc(1000)≈1.86003 70486 32328⋅10−434298.
보정이 99 % 이상 일본어 근사 감소 (실제로, 참고 .) (마지막 자리에서 정확한 값에서이 근사 다르다. 다른 공지의 근사 , 와 6 자리 숫자가 잘못되었습니다. 동일한 기술을 사용하여 원했습니다.)a1/x≈1%exp(−x2)/(xπ−−√)1.860038⋅10−434298