Câu hỏi liên quan đến chức năng lỗi bổ sung
erfc(x)=2π−−√∫∞xexp(−t2)dt
cho các giá trị "lớn" của x ( =n/2–√ trong câu hỏi ban đầu) - nghĩa là, từ 100 đến 700.000 hoặc hơn. (Trong thực tế, bất kỳ giá trị nào lớn hơn khoảng 6 nên được coi là "lớn" như chúng ta sẽ thấy.) Lưu ý rằng vì điều này sẽ được sử dụng để tính giá trị p, nên có rất ít giá trị trong việc thu được nhiều hơn ba chữ số có nghĩa (thập phân) .
Để bắt đầu, hãy xem xét xấp xỉ được đề xuất bởi @Iterator,
f(x)=1−1−exp(−x2(4+ax2π+ax2))−−−−−−−−−−−−−−−−−−−−−−√,
Ở đâu
a=8(π−3)3(4−π)≈0.439862.
Mặc dù đây là một xấp xỉ tuyệt vời cho chính hàm lỗi, nhưng đó là một xấp xỉ khủng khiếp đối với erfc . Tuy nhiên, có một cách để khắc phục một cách có hệ thống.
Đối với các giá trị p được liên kết với các giá trị lớn như vậy của , chúng tôi quan tâm đến lỗi tương đối f ( x ) / erfc ( x ) - 1 : chúng tôi hy vọng giá trị tuyệt đối của nó sẽ nhỏ hơn 0,001 cho ba chữ số chính xác. Thật không may, biểu thức này rất khó nghiên cứu cho x lớn do dòng chảy trong tính toán chính xác kép. Đây là một lần thử, tính toán lỗi tương đối so với x với 0 ≤ x ≤ 5,8 :x f(x)/erfc(x)−1xx0≤x≤5.8
Tính toán trở nên không ổn định một lần vượt quá 5,3 hoặc hơn và không thể cung cấp một chữ số có nghĩa vượt quá 5,8. Đây không phải là ngạc nhiên: exp ( - 5,8 2 ) ≈ 10 - 14,6 đang đẩy các giới hạn của số học đúp chính xác. Bởi vì không có bằng chứng nào cho thấy lỗi tương đối sẽ nhỏ đến mức chấp nhận được đối với x lớn hơnxexp(−5.82)≈10−14.6x , chúng ta cần phải làm tốt hơn.
Việc thực hiện tính toán trong số học mở rộng (với Mathicala ) sẽ cải thiện bức tranh của chúng ta về những gì đang diễn ra:
Lỗi tăng nhanh với và không có dấu hiệu chững lại. Quá x = 10 hoặc hơn, phép tính gần đúng này thậm chí không cung cấp một chữ số thông tin đáng tin cậy!xx=10
Tuy nhiên, cốt truyện đang bắt đầu nhìn tuyến tính. Chúng tôi có thể đoán rằng lỗi tương đối tỷ lệ thuận với . (Điều này có ý nghĩa trên cơ sở lý thuyết: erfc rõ ràng là một hàm lẻ và f rõ ràng là chẵn, vì vậy tỷ lệ của chúng phải là một hàm lẻ. Vì vậy, chúng ta sẽ mong đợi lỗi tương đối, nếu tăng, sẽ hoạt động như một công suất lẻ của xxerfcfx .) Điều này dẫn chúng ta nghiên cứu lỗi tương đối chia cho . Tương đương, tôi chọn kiểm tra x ⋅ erfc ( x ) / f ( x )xx⋅erfc(x)/f(x), bởi vì hy vọng là điều này sẽ có một giá trị giới hạn không đổi. Đây là biểu đồ của nó:
Dự đoán của chúng tôi dường như được đưa ra: tỷ lệ này dường như đang tiến đến giới hạn khoảng 8 hoặc hơn. Khi được hỏi, Mathematica sẽ cung cấp cho nó:
a1 = Limit[x (Erfc[x]/f[x]), x -> \[Infinity]]
Giá trị là . Điều này cho phép chúng tôi cải thiện ước tính:chúng tôi thực hiệna1=2π√e3(−4+π)28(−3+π)≈7.94325
f1(x)=f(x)a1x
như sự sàng lọc đầu tiên của xấp xỉ. Khi thực sự lớn - lớn hơn vài nghìn - xấp xỉ này là tốt. Bởi vì nó vẫn sẽ không đủ tốt cho một loạt các đối số thú vị trong khoảng từ 5,3 đến 2000 hoặc lâu hơn, hãy lặp lại quy trình. Lần này, lỗi tương đối nghịch - cụ thể là biểu thức 1 - erfc ( x ) / f 1 ( x ) - nên hoạt động như 1 / x 2 cho x lớn (theo các cân nhắc tương đương trước đó). Theo đó, chúng tôi nhân với x 2x5.320001−erfc(x)/f1(x)1/x2xx2 và tìm giới hạn tiếp theo:
a2 = Limit[x^2 (a1 - x (Erfc[x]/f[x])), x -> \[Infinity]]
Giá trị là
a2=132π−−√e3(−4+π)28(−3+π)(32−9(−4+π)3π(−3+π)2)≈114.687.
Quá trình này có thể tiến hành miễn là chúng ta muốn. Tôi lấy nó ra thêm một bước nữa, tìm
a3 = Limit[x^2 (a2 - x^2 (a1 - x (Erfc[x]/f[x]))), x -> \[Infinity]]
với giá trị xấp xỉ 1623,67. (Biểu thức đầy đủ liên quan đến hàm hợp lý bậc tám của π và quá dài để có ích ở đây.)
Unwinding các hoạt động này mang lại xấp xỉ cuối cùng của chúng tôi
f3(x)=f(x)(a1−a2/x2+a3/x4)/x.
Sai số tỷ lệ với . Nhập khẩu là hằng số tỷ lệ, vì vậy chúng tôi vẽ x 6 ( 1 - erfc ( x ) / fx−6 :x6(1−erfc(x)/f3(x))
Nó nhanh chóng đạt đến giá trị giới hạn vào khoảng 2660,59. Sử dụng xấp xỉ , chúng tôi thu được ước tính erfc ( x ) có độ chính xác tương đối tốt hơn 2661 / x 6 cho tất cả x > 0 . Khi x vượt quá 20 hoặc hơn, chúng ta có ba chữ số có nghĩa (hoặc nhiều hơn nữa, vì x trở nên lớn hơn). Để kiểm tra, đây là bảng so sánh các giá trị chính xác với xấp xỉ cho x trong khoảng từ 10 đến 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
Trên thực tế, phép tính gần đúng này cung cấp ít nhất hai số liệu chính xác có ý nghĩa cho đi, đó chỉ là về cách tính toán của người đi bộ (chẳng hạn như chức năng của Excel ).x=8NormSDist
Cuối cùng, người ta có thể lo lắng về khả năng tính toán xấp xỉ ban đầu của chúng tôi . Tuy nhiên, điều đó không khó: khi x đủ lớn để gây ra dòng chảy theo cấp số nhân, căn bậc hai cũng xấp xỉ bằng một nửa số mũ,fx
f(x)≈12exp(−x2(4+ax2π+ax2)).
Việc tính toán logarit của điều này (trong cơ sở 10) là đơn giản và sẵn sàng cho kết quả mong muốn. Ví dụ: đặt . Logarit phổ biến của phép tính gần đúng này làx=1000
log10(f(x))≈(−10002(4+a⋅10002π+a⋅10002)−log(2))/log(10)∼−434295.63047.
Sản lượng lũy thừa
f(1000)≈2.34169⋅10−434296.
Áp dụng hiệu chỉnh (trong ) tạo raf3
erfc(1000)≈1.86003 70486 32328⋅10−434298.
(Và trên thực tế, lưu ý rằng việc sửa chữa làm giảm xấp xỉ ban đầu hơn 99% .). (Xấp xỉ này khác với giá trị chính xác chỉ trong chữ số cuối cùng Một xấp xỉ nổi tiếng, exp ( - x 2 ) / ( x √a1/x≈1%exp(−x2)/(xπ−−√)1.860038⋅10−434298