Câu trả lời:
Nó phụ thuộc vào chính xác những gì bạn đang tìm kiếm . Dưới đây là một số chi tiết ngắn gọn và tài liệu tham khảo.
Hầu hết các tài liệu cho các trung tâm xấp xỉ xung quanh chức năng
cho . Điều này là do hàm bạn cung cấp có thể được phân tách thành một sự khác biệt đơn giản của hàm ở trên (có thể được điều chỉnh bởi một hằng số). Chức năng này được gọi bằng nhiều tên tuổi, trong đó có "trên đuôi của phân phối bình thường", "không thể thiếu bình thường đúng", và "Gaussian Q -function", đến tên một vài. Bạn cũng sẽ thấy tỷ lệ xấp xỉ với tỷ lệ của Miller , đó là R ( x ) = Q ( x ) nơiφ(x)=(2π)-1/2e-x2/2là pdf Gaussian.
Ở đây tôi liệt kê một số tài liệu tham khảo cho các mục đích khác nhau mà bạn có thể quan tâm.
Tính toán
Tiêu chuẩn thực tế để tính toán hàm hoặc hàm lỗi bổ sung có liên quan là
WJ Cody, các xấp xỉ Rational Ch Quashev cho hàm lỗi , Math. Comp. , 1969, trang 631--637.
Mỗi thực hiện (tự tôn trọng) sử dụng giấy này. (MATLAB, R, v.v.)
Xấp xỉ "đơn giản"
Abramowitz và Stegun có một dựa trên sự mở rộng đa thức của một phép biến đổi đầu vào. Một số người sử dụng nó như một xấp xỉ "độ chính xác cao". Tôi không thích nó cho mục đích đó vì nó cư xử không tốt. Ví dụ, xấp xỉ của họ không không mang lại Q ( 0 ) = 1 / 2 , mà tôi nghĩ là một không lớn không có. Đôi khi những điều xấu xảy ra vì điều này.
Borjesson và Sundberg đưa ra một xấp xỉ đơn giản, hoạt động khá tốt đối với hầu hết các ứng dụng trong đó người ta chỉ yêu cầu một vài chữ số chính xác. Các sai số tương đối tuyệt đối là không bao giờ tồi tệ hơn 1%, trong đó khá tốt xem xét đơn giản của nó. Xấp xỉ cơ bản là Q ( x ) = 1 và sự lựa chọn ưa thích của họ về hằng số làmột=0,339vàb=5,51. Tài liệu tham khảo đó là
PO Borjesson và CE Sundberg. Các xấp xỉ đơn giản của hàm lỗi Q (x) cho các ứng dụng truyền thông . IEEE Trans. Cộng đồng. , COM-27 (3): 639 Từ643, tháng 3 năm 1979.
Đây là một âm mưu của lỗi tương đối tuyệt đối của nó.
Các tài liệu kỹ thuật điện là tuyệt vời với các xấp xỉ khác nhau và dường như có một mối quan tâm quá mức đối với chúng. Nhiều người trong số họ nghèo mặc dù hoặc mở rộng thành những biểu hiện rất kỳ lạ và hỗn độn.
Bạn cũng có thể nhìn vào
W. Bryc. Một xấp xỉ thống nhất để tích phân bình thường bên phải . Toán ứng dụng và tính toán , 127 (2-3): 365 trừ374, tháng 4/2002.
Phần tiếp tục của Laplace
Laplace có một phần tiếp tục đẹp mang lại giới hạn trên và dưới liên tiếp cho mỗi giá trị . Đó là, về tỷ lệ của Miller,
trong đó ký hiệu tôi đã sử dụng khá chuẩn cho phân số tiếp tục , nghĩa là . Tuy nhiên, biểu thức này không hội tụ rất nhanh đối với x nhỏ và nó phân kỳ ở x = 0 .
Phần tiếp tục này thực sự mang lại nhiều giới hạn "đơn giản" trên đã được "khám phá lại" vào giữa những năm 1900 đến cuối những năm 1900. Thật dễ dàng để thấy rằng đối với một phân số tiếp tục ở dạng "tiêu chuẩn" (nghĩa là bao gồm các hệ số nguyên dương), việc cắt phân số ở các số lẻ (chẵn) cho giới hạn trên (dưới).
Do đó, Laplace cho chúng ta biết ngay rằng cả hai đều là giới hạn đã được "khám phá lại" vào giữa những năm 1900. Về mặtchức năng Q , điều này tương đương với x
Chú ý, đặc biệt, đó là sự bất bình đẳng trên ngay lập tức ngụ ý rằng . Thực tế này cũng có thể được thiết lập bằng cách sử dụng quy tắc của L'Hopital. Điều này cũng giúp giải thích sự lựa chọn hình thức chức năng của xấp xỉ Borjesson-Sundberg. Bất kỳ sự lựa chọn của một ∈ [ 0 , 1 ] duy trì sự tương đương tiệm cận như x → ∞ . Tham số b đóng vai trò là "hiệu chỉnh liên tục" gần bằng không.
Đây là một âm mưu của chức năng và hai giới hạn Laplace.
CI. C. Lee. Trên Laplace tiếp tục phân số cho tích phân bình thường . Ann. Inst. Thống kê. Môn Toán. , 44 (1): 107 trận120, tháng 3 năm 1992.
Hy vọng điều này sẽ giúp bạn bắt đầu. Nếu bạn có một sở thích cụ thể hơn, tôi có thể chỉ cho bạn một nơi nào đó.
Tôi cho rằng tôi đã quá muộn anh hùng, nhưng tôi muốn bình luận về bài đăng của hồng y, và nhận xét này trở nên quá lớn so với hộp dự định của nó.
Trên thực tế, có nhiều cách khác để tính toán hàm lỗi (bổ sung) ngoài việc sử dụng các xấp xỉ Ch Quashev. Do việc sử dụng một xấp xỉ Ch Quashev yêu cầu lưu trữ không ít hệ số, nên các phương thức này có thể có lợi thế nếu cấu trúc mảng hơi tốn kém trong môi trường máy tính của bạn (bạn có thể nội tuyến các hệ số, nhưng mã kết quả có thể trông giống như một baroque lộn xộn).
Lentz , Thompson và Barnett đã đưa ra một thuật toán để đánh giá số lượng một phần tiếp tục là một sản phẩm vô hạn, hiệu quả hơn so với cách tiếp cận thông thường của việc tính toán một phần tiếp tục "ngược". Thay vì hiển thị thuật toán chung, tôi sẽ chỉ ra cách nó chuyên về tính toán tỷ lệ của Miller:
CF rất hữu ích khi chuỗi được đề cập trước đó bắt đầu hội tụ chậm; bạn sẽ phải thử nghiệm xác định "điểm dừng" thích hợp để chuyển từ chuỗi sang CF trong môi trường máy tính của bạn. Ngoài ra còn có sự thay thế của việc sử dụng một loạt tiệm cận thay vì Laplacian CF, nhưng kinh nghiệm của tôi là Laplacian CF đủ tốt cho hầu hết các ứng dụng.
Cuối cùng, nếu bạn không cần tính toán hàm lỗi (bổ sung) rất chính xác (nghĩa là chỉ một vài chữ số có nghĩa), có các xấp xỉ nhỏ gọn do Serge Winitzki. Đây là một trong số chúng:
(Câu trả lời này ban đầu xuất hiện để trả lời cho một câu hỏi tương tự, sau đó đóng lại như một bản sao. OP chỉ muốn "thực hiện" tích phân Gaussian, không nhất thiết là "trạng thái của nghệ thuật." , thực hiện ngắn sẽ được ưu tiên.)
Phiên bản MatLab (có phân bổ phù hợp) có sẵn tại http://people.sc.fsu.edu/~jburkardt/m_src/asa005/alnorm.m . Một phiên bản hoàn toàn không có giấy tờ của mã Fortran gốc xuất hiện trên trang web "Tìm kiếm mã Koders" (sic).
Nhiều năm trước tôi đã chuyển cái này sang AWK. Phiên bản này có thể phù hợp hơn cho nhà phát triển hiện đại chuyển sang do cú pháp giống C (chứ không phải Fortran) và một số nhận xét bổ sung mà tôi đã chèn khi phát triển và thử nghiệm nó, bởi vì tôi cần tăng cường độ chính xác của nó. Nó xuất hiện bên dưới.
Đối với những người không có nhiều kinh nghiệm chuyển mã khoa học / toán học / thống kê, một số lời khuyên : một lỗi đánh máy duy nhất có thể tạo ra các lỗi nghiêm trọng có thể không dễ dàng phát hiện được. (Hãy tin tôi vào điều này, tôi đã thực hiện rất nhiều trong số chúng.) Luôn luôn, luôn tạo ra một bài kiểm tra cẩn thận và đầy đủ. Bởi vì hàm tích phân / lỗi tích phân / Gaussian bình thường có sẵn trong rất nhiều bảng và rất nhiều phần mềm, nên việc lập bảng một số lượng lớn các giá trị của hàm được chuyển của bạn và so sánh một cách có hệ thống (ví dụ, với máy tính, không phải bằng mắt) các giá trị để sửa. Bạn có thể thấy một thử nghiệm như vậy ở đầu mã của tôi: nó tạo ra một bảng các giá trị trong -8,5: 8,5 (bằng 0,1) có thể được chuyển (qua STDOUT) sang một chương trình khác để kiểm tra có hệ thống.
Một cách tiếp cận thử nghiệm khác - đối với những người có đủ nền tảng phân tích số để biết cách ước tính các lỗi dự kiến - sẽ là phân biệt số lượng các giá trị và so sánh chúng với PDF (có thể tính toán dễ dàng).
alnorm
alnorm
alnorm
alnorm[-6.0]
UPPER_TAIL_IS_ZERO
15.
16.
#----------------------------------------------------------------------#
# ALNORM.AWK
# Compute values of the cumulative normal probability function.
# From G. Dallal's STAT-SAK (Fortran code).
# Additional precision using asymptotic expression added 7/8/92.
#----------------------------------------------------------------------#
BEGIN {
for (i=-85; i<=85; i++) {
x = i/10
p = alnorm(x, 0)
printf("%3.1f %12.10f\n", x, p)
}
exit
}
function alnorm(z,up, y,aln,w) {
#
# ALGORITHM AS 66 APPL. STATIST. (1973) VOL.22, NO.3:
# Hill, I.D. (1973). Algorithm AS 66. The normal integral.
# Appl. Statist.,22,424-427.
#
# Evaluates the tail area of the standard normal curve from
# z to infinity if up, or from -infinity to z if not up.
#
# LOWER_TAIL_IS_ONE, UPPER_TAIL_IS_ZERO, and EXP_MIN_ARG
# must be set to suit this computer and compiler.
LOWER_TAIL_IS_ONE = 8.5 # I.e., alnorm(8.5,0) = .999999999999+
UPPER_TAIL_IS_ZERO = 16.0 # Changes to power series expression
FORMULA_BREAK = 1.28 # Changes cont. fraction coefficients
EXP_MIN_ARG = -708 # I.e., exp(-708) is essentially true 0
if (z < 0.0) {
up = !up
z = -z
}
if ((z <= LOWER_TAIL_IS_ONE) || (up && z <= UPPER_TAIL_IS_ZERO)) {
y = 0.5 * z * z
if (z > FORMULA_BREAK) {
if (-y > EXP_MIN_ARG) {
aln = .398942280385 * exp(-y) / \
(z - 3.8052E-8 + 1.00000615302 / \
(z + 3.98064794E-4 + 1.98615381364 / \
(z - 0.151679116635 + 5.29330324926 / \
(z + 4.8385912808 - 15.1508972451 / \
(z + 0.742380924027 + 30.789933034 / \
(z + 3.99019417011))))))
} else {
aln = 0.0
}
} else {
aln = 0.5 - z * (0.398942280444 - 0.399903438504 * y / \
(y + 5.75885480458 - 29.8213557808 / \
(y + 2.62433121679 + 48.6959930692 / \
(y + 5.92885724438))))
}
} else {
if (up) { # 7/8/92
# Uses asymptotic expansion for exp(-z*z/2)/alnorm(z)
# Agrees with continued fraction to 11 s.f. when z >= 15
# and coefficients through 706 are used.
y = -0.5*z*z
if (y > EXP_MIN_ARG) {
w = -0.5/y # 1/z^2
aln = 0.3989422804014327*exp(y)/ \
(z*(1 + w*(1 + w*(-2 + w*(10 + w*(-74 + w*706))))))
# Next coefficients would be -8162, 110410
} else {
aln = 0.0
}
} else {
aln = 0.0
}
}
return up ? aln : 1.0 - aln
}
### end of file ###