Perkiraan

35

Saya telah melihat simulasi Monte Carlo baru-baru ini, dan telah menggunakannya untuk memperkirakan konstanta seperti (lingkaran di dalam persegi panjang, area proporsional).π

Namun, saya tidak dapat memikirkan metode yang sesuai untuk memperkirakan nilai [angka Euler] menggunakan integrasi Monte Carlo.e

Apakah Anda memiliki petunjuk tentang bagaimana hal ini dapat dilakukan?

statistiknewbie12345
sumber
7
Ada banyak, banyak, banyak cara untuk melakukan ini. Agar hal ini dapat menjadi jelas dengan merenungkan apa yang dilakukan Rperintah 2 + mean(exp(-lgamma(ceiling(1/runif(1e5))-1))). (Jika menggunakan fungsi Gamma log mengganggu Anda, gantikan dengan 2 + mean(1/factorial(ceiling(1/runif(1e5))-2)), yang hanya menggunakan penambahan, perkalian, pembagian, dan pemotongan, dan abaikan peringatan luapan.) Apa yang mungkin lebih menarik adalah simulasi yang efisien : dapatkah Anda meminimalkan jumlah langkah-langkah komputasi yang diperlukan untuk memperkirakan sampai akurasi tertentu? e
whuber
4
Pertanyaan yang sangat menyenangkan! Saya berharap dapat membaca jawaban orang lain. Salah satu cara Anda dapat benar-benar menarik perhatian pada pertanyaan ini - mungkin setengah lusin jawaban lainnya - adalah merevisi pertanyaan dan meminta jawaban yang efisien , seperti yang disarankan oleh Whuber. Itu seperti catnip untuk pengguna CV.
Sycorax berkata Reinstate Monica
1
@ EngrStudent Saya tidak yakin analog geometrik ada untuk . Ini bukan kuantitas geometris yang alami (pun intended) seperti . eπ
Aksakal
6
@ Akakal adalah kuantitas yang sangat geometris. Pada tingkat paling dasar, ia muncul secara alami dalam ekspresi untuk area yang terkait dengan hiperbola. Pada tingkat yang sedikit lebih maju itu terhubung erat dengan semua fungsi periodik, termasuk fungsi trigonometri, yang kandungan geometrisnya jelas. Tantangan sebenarnya di sini adalah begitu mudahnya mensimulasikan nilai yang terkait dengan ! ee
whuber
2
@StatsStudent: dengan sendirinya tidak menarik. Namun, jika ini mengarah ke pendugaan yang tidak bias dari jumlah seperti ini mungkin terbukti paling berguna untuk algoritma MCMC. e
exp{0xf(y)dG(y)}
Xi'an

Jawaban:

34

Cara sederhana dan elegan untuk memperkirakan oleh Monte Carlo dijelaskan dalam makalah ini . Makalah ini sebenarnya tentang pengajaran . Karenanya, pendekatan tersebut tampaknya sangat sesuai untuk tujuan Anda. Idenya didasarkan pada latihan dari buku teks Rusia populer tentang teori probabilitas oleh Gnedenko. Lihat contoh.22 di hlm.183eee

Itu terjadi sehingga , di mana adalah variabel acak yang didefinisikan sebagai berikut. Ini adalah jumlah minimum sehingga dan adalah angka acak dari distribusi seragam pada . Cantik bukan ?!ξ n n i = 1 r i > 1 r i [ 0 , 1 ]E[ξ]=eξni=1nri>1ri[0,1]

Karena ini adalah latihan, saya tidak yakin apakah itu keren bagi saya untuk mengirim solusi (bukti) di sini :) Jika Anda ingin membuktikannya sendiri, inilah tipnya: bab ini disebut "Momen", yang seharusnya menunjukkan Anda ke arah yang benar.

Jika Anda ingin menerapkannya sendiri, maka jangan membaca lebih lanjut!

Ini adalah algoritma sederhana untuk simulasi Monte Carlo. Gambarlah seragam acak, lalu yang lain dan seterusnya sampai jumlahnya melebihi 1. Jumlah tebusan yang ditarik adalah percobaan pertama Anda. Katakanlah Anda mendapat:

 0.0180
 0.4596
 0.7920

Kemudian sidang pertama Anda diberikan 3. Jauhkan melakukan percobaan ini, dan Anda akan melihat bahwa rata-rata Anda mendapatkan .e

Kode MATLAB, hasil simulasi dan histogram mengikuti.

N = 10000000;
n = N;
s = 0;
i = 0;
maxl = 0;
f = 0;
while n > 0
    s = s + rand;
    i = i + 1;
    if s > 1
        if i > maxl
            f(i) = 1;
            maxl = i;
        else
            f(i) = f(i) + 1;
        end
        i = 0;
        s = 0;
        n = n - 1;
    end
end

disp ((1:maxl)*f'/sum(f))
bar(f/sum(f))
grid on

f/sum(f)

Hasil dan histogram:

2.7183


ans =

  Columns 1 through 8

         0    0.5000    0.3332    0.1250    0.0334    0.0070    0.0012    0.0002

  Columns 9 through 11

    0.0000    0.0000    0.0000

masukkan deskripsi gambar di sini

UPDATE: Saya memperbarui kode saya untuk menyingkirkan berbagai hasil uji coba sehingga tidak memerlukan RAM. Saya juga mencetak estimasi PMF.

Pembaruan 2: Inilah solusi Excel saya. Masukkan tombol di Excel dan tautkan ke makro VBA berikut:

Private Sub CommandButton1_Click()
n = Cells(1, 4).Value
Range("A:B").Value = ""
n = n
s = 0
i = 0
maxl = 0
Cells(1, 2).Value = "Frequency"
Cells(1, 1).Value = "n"
Cells(1, 3).Value = "# of trials"
Cells(2, 3).Value = "simulated e"
While n > 0
    s = s + Rnd()
    i = i + 1
    If s > 1 Then
        If i > maxl Then
            Cells(i, 1).Value = i
            Cells(i, 2).Value = 1
            maxl = i
        Else
            Cells(i, 1).Value = i
            Cells(i, 2).Value = Cells(i, 2).Value + 1
        End If
        i = 0
        s = 0
        n = n - 1
    End If
Wend


s = 0
For i = 2 To maxl
    s = s + Cells(i, 1) * Cells(i, 2)
Next


Cells(2, 4).Value = s / Cells(1, 4).Value

Rem bar (f / Sum(f))
Rem grid on

Rem f/sum(f)

End Sub

Masukkan jumlah uji coba, seperti 1000, di sel D1, dan klik tombol. Di sini bagaimana tampilan layar setelah menjalankan pertama:

masukkan deskripsi gambar di sini

UPDATE 3: Silverfish menginspirasi saya ke cara lain, tidak seanggun yang pertama tapi masih keren. Ini menghitung volume n-simpleks menggunakan urutan Sobol .

s = 2;
for i=2:10
    p=sobolset(i);
    N = 10000;
    X=net(p,N)';
    s = s + (sum(sum(X)<1)/N);
end
disp(s)

2.712800000000001

Secara kebetulan dia menulis buku pertama tentang metode Monte Carlo yang saya baca di sekolah menengah. Ini pengantar metode terbaik menurut saya.

PEMBARUAN 4:

Silverfish dalam komentar menyarankan implementasi rumus Excel sederhana. Ini adalah jenis hasil yang Anda dapatkan dengan pendekatannya setelah sekitar 1 juta angka acak dan uji coba 185 ribu:

masukkan deskripsi gambar di sini

Jelas, ini jauh lebih lambat daripada implementasi Excel VBA. Terutama, jika Anda mengubah kode VBA saya untuk tidak memperbarui nilai sel di dalam loop, dan hanya lakukan setelah semua statistik dikumpulkan.

PEMBARUAN 5

Solusi Xi'an # 3 terkait erat (atau bahkan sama dalam arti sesuai komentar jwg di utas). Sulit untuk mengatakan siapa yang datang dengan gagasan pertama Forsythe atau Gnedenko. Edisi 1950 asli Gnedenko dalam bahasa Rusia tidak memiliki bagian Masalah di Bab. Jadi, saya tidak dapat menemukan masalah ini pada pandangan pertama di mana ia berada di edisi selanjutnya. Mungkin ditambahkan kemudian atau dikubur dalam teks.

Seperti yang saya komentari dalam jawaban Xi'an, pendekatan Forsythe terkait dengan bidang menarik lainnya: distribusi jarak antara puncak (ekstrem) dalam urutan acak (IID). Jarak rata-rata adalah 3. Urutan ke bawah dalam pendekatan Forsythe berakhir dengan dasar, jadi jika Anda melanjutkan pengambilan sampel Anda akan mendapatkan bagian bawah lainnya di beberapa titik, lalu di titik lainnya. Anda dapat melacak jarak antara mereka dan membangun distribusi.

Aksakal
sumber
Wow, itu keren! Bisakah Anda menambahkan satu atau dua paragraf yang menjelaskan mengapa ini berfungsi?
Sycorax berkata Reinstate Monica
7
(+1) Cemerlang! Jawabannya layak mendapat nilai tertinggi karena hanya bergantung pada simulasi yang seragam. Dan tidak menggunakan pendekatan apa pun kecuali yang disebabkan oleh Monte Carlo. Itu menghubungkan kembali ke Gnedenko adalah merembes lebih lanjut.
Xi'an
2
Keren! Berikut adalah kode Mathematica untuk yang sama, sebagai satu-liner:
Mean[Table[ Length[NestWhileList[(Random[]+#) &, Random[], #<1&]], {10^6}]]
serigala
4
@ serigala Terjemahan langsung berikut dari Rsolusi yang saya posting di jawaban Xi'an adalah dua puluh kali lebih cepat:n=10^6; 1. / Mean[UnitStep[Differences[Sort[RandomReal[{0, n}, n + 1]]] - 1]]
whuber
1
Saya telah memposting "mengapa mean ?" pertanyaan sebagai pertanyaan dalam dirinya sendiri ; Saya menduga solusi sketsa saya (yang segera terlintas dalam pikiran sebagai visualisasi masalah yang "jelas") belum tentu cara siswa Rusia seharusnya melakukannya! Jadi solusi alternatif akan sangat disambut. e
Silverfish
19

Saya menyarankan untuk tidak memilih jawaban Aksakal. Ini tidak bias dan hanya bergantung pada metode menghasilkan penyimpangan seragam unit.

Jawaban saya dapat dibuat tepat secara sewenang-wenang, tetapi masih bias dari nilai sebenarnya dari .e

Jawaban Xi'an benar, tetapi saya pikir ketergantungannya pada fungsi atau cara menghasilkan penyimpangan Poisson acak agak melingkar ketika tujuannya adalah untuk memperkirakan e .loge

Memperkirakan dengan Bootstrappinge

Sebagai gantinya, pertimbangkan prosedur bootstrap. Satu memiliki sejumlah besar objek yang ditarik dengan penggantian ke ukuran sampel n . Pada setiap undian, probabilitas untuk tidak menggambar objek i tertentu adalah 1 - n - 1 , dan ada n gambar seperti itu. Probabilitas bahwa objek tertentu dihilangkan dari semua undian adalah p = ( 1 - 1nni1n1np=(11n)n.

exp(1)=limn(11n)n

jadi kita juga dapat menulis

exp(1)p^=i=1mIiBjm

Yaitu, estimasi ditemukan dengan memperkirakan probabilitas bahwa pengamatan khusus dihilangkan dari bootstrap mereplikasi melintasi banyak ulangan seperti itu - yaitu fraksi kemunculan objek dalam bootstraps.m B jpmBji

Ada dua sumber kesalahan dalam perkiraan ini. Hingga akan selalu berarti bahwa hasilnya adalah perkiraan, yaitu estimasi bias. Selain itu, akan berfluktuasi di sekitar nilai sebenarnya karena ini adalah simulasi.pnp^

Saya menemukan pendekatan ini agak menarik karena sarjana atau orang lain dengan cukup sedikit untuk melakukan bisa perkiraan menggunakan setumpuk kartu, tumpukan batu-batu kecil, atau item lainnya di tangan, di vena sama seperti seseorang bisa memperkirakan menggunakan kompas, tepi lurus dan beberapa butir pasir. Saya pikir itu rapi ketika matematika dapat dipisahkan dari kenyamanan modern seperti komputer.πeπ

Hasil

Saya melakukan beberapa simulasi untuk berbagai jumlah replikasi bootstrap. Kesalahan standar diperkirakan menggunakan interval normal.

Perhatikan bahwa pilihan jumlah objek yang sedang bootstrap menetapkan batas atas mutlak pada keakuratan hasil karena prosedur Monte Carlo memperkirakan dan hanya bergantung pada . Pengaturan menjadi terlalu besar hanya akan membebani komputer Anda, baik karena Anda hanya memerlukan perkiraan "kasar" ke atau karena bias akan dibanjiri oleh varians karena Monte Carlo. Hasil ini untuk dan akurat untuk desimal ketiga.p p n n e n = 10 3 p - 1enppnnen=103p1e

Plot ini menunjukkan bahwa pilihan memiliki konsekuensi langsung dan mendalam bagi stabilitas di . Garis putus-putus biru menunjukkan dan garis merah menunjukkan . Seperti yang diharapkan, meningkatkan ukuran sampel menghasilkan perkiraan yang lebih akurat . p p e pmp^pep^masukkan deskripsi gambar di sini

Saya menulis naskah R yang panjang dan memalukan untuk ini. Saran untuk perbaikan dapat diajukan di belakang tagihan $ 20.

library(boot)
library(plotrix)
n <- 1e3

## if p_hat is estimated with 0 variance (in the limit of infinite bootstraps), then the best estimate we can come up with is biased by exactly this much:
approx <- 1/((1-1/n)^n)

dat <- c("A", rep("B", n-1))
indicator <- function(x, ndx)   xor("A"%in%x[ndx], TRUE) ## Because we want to count when "A" is *not* in the bootstrap sample

p_hat <- function(dat, m=1e3){
    foo <- boot(data=dat, statistic=indicator, R=m) 
    1/mean(foo$t)
} 

reps <- replicate(100, p_hat(dat))

boxplot(reps)
abline(h=exp(1),col="red")

p_mean <- NULL
p_var <- NULL
for(i in 1:10){
    reps <- replicate(2^i, p_hat(dat))
    p_mean[i] <- mean(reps)
    p_var[i] <- sd(reps)
}
plotCI(2^(1:10), p_mean, uiw=qnorm(0.975)*p_var/sqrt(2^(1:10)),xlab="m", log="x", ylab=expression(hat(p)), main=expression(paste("Monte Carlo Estimates of ", tilde(e))))
abline(h=approx, col='red')
Sycorax berkata Reinstate Monica
sumber
4
+1 Sangat masuk akal. Adakah peluang Anda dapat membagikan kode Anda jika Anda menulisnya?
Antoni Parellada
2
Meskipun ini bisa akurat sembarang, pada akhirnya itu tidak memuaskan karena hanya mensimulasikan perkiraan untuk daripada itu sendiri. eee
whuber
1
Yakin. Anda hanya akan berakhir dengan satu panggilan replikasi di dalam yang lain, yang pada dasarnya sama seperti yang kita miliki sekarang
Sycorax berkata Reinstate Monica
1
@whuber Saya tidak benar-benar melihat perbedaan antara perkiraan akurat sewenang-wenang untuk perkiraan akurat sewenang-wenang untuk , dan perkiraan akurat sewenang-wenang untuk itu sendiri. eee
jwg
1
@ jwg Selain menjadi penting secara konseptual, ini juga praktis penting karena menerapkan perkiraan ke perkiraan memerlukan melacak seberapa akurat masing-masing dari dua perkiraan itu. Tetapi saya harus setuju bahwa ketika kedua pendekatan tersebut dapat diterima baik, maka pendekatan keseluruhan memang baik-baik saja.
whuber
14

Solusi 1:

Untuk distribusi Poisson , Oleh karena itu, jika , yang berarti Anda dapat memperkirakan oleh simulasi Poisson. Dan simulasi Poisson dapat diturunkan dari generator distribusi eksponensial (jika tidak dengan cara yang paling efisien).P ( X = k ) = λ kP(λ) X P ( 1 ) P ( X = 0 ) = P ( X = 1 ) = e - 1 e - 1

P(X=k)=λkk!eλ
XP(1)
P(X=0)=P(X=1)=e1
e1

Catatan 1: Sebagaimana dibahas dalam komentar, ini adalah argumen yang agak berbelit-belit karena mensimulasikan dari distribusi Poisson atau ekuivalen distribusi Eksponensial mungkin sulit dibayangkan tanpa melibatkan log atau fungsi exp ... Tapi kemudian W. Huber datang ke selamatkan jawaban ini dengan solusi paling elegan berdasarkan seragam yang dipesan. Namun yang merupakan perkiraan , karena distribusi spasi seragam adalah Beta , menyiratkan bahwa yang konvergen ke sebagaiU(i:n)U(i1:n)B(1,n)

P(n{U(i:n)U(i1:n)}1)=(11n)n
e1ntumbuh hingga tak terbatas. Sebagai samping lain yang menjawab komentar, generator eksponensial tahun 1951 von Neumann hanya menggunakan generasi yang seragam.

Solusi 2:

Cara lain untuk mencapai representasi konstanta sebagai integral adalah dengan mengingat bahwa, ketika lalu yang juga merupakan distribusi . Oleh karena itu, Pendekatan kedua untuk mendekati oleh Monte Carlo dengan demikian mensimulasikan pasangan normal dan memantau frekuensi kali . Dalam arti itu adalah kebalikan dari perkiraan Monte Carlo dari terkait dengan frekuensi kali ...e

X1,X2iidN(0,1)
(X12+X22)χ12
E(1/2)
P(X12+X222)=1{1exp(2/2)}=e1
e(X1,X2)X12+X222πX12+X22<1

Solusi 3:

Rekan saya dari Universitas Warwick, M. Pollock, menunjukkan perkiraan lain dari Monte Carlo yang disebut metode Forsythe : idenya adalah menjalankan serangkaian generasi yang seragam sampai . Ekspektasi aturan pemberhentian yang sesuai, , yang merupakan jumlah waktu urutan seragam turun maka sedangkan probabilitas bahwa ganjil adalah ! ( Metode Forsythe sebenarnya bertujuan mensimulasikan dari setiap kepadatan bentuk , maka lebih umum daripada mendekati dan .)kamu1,kamu2,...kamun+1>kamunNeNe-1expG(x)ee-1

Ini sangat paralel dengan pendekatan Gnedenko yang digunakan dalam jawaban Aksakal , jadi saya ingin tahu apakah yang satu dapat berasal dari yang lain. Paling tidak, keduanya memiliki distribusi yang sama dengan massa probabilitasuntuk nilai .1/n!n

Implementasi R cepat dari metode Forsythe adalah untuk tidak mengikuti dengan tepat urutan seragam yang mendukung blok yang lebih besar, yang memungkinkan untuk pemrosesan paralel:

use=runif(n)
band=max(diff((1:(n-1))[diff(use)>0]))+1
bends=apply(apply((apply(matrix(use[1:((n%/%band)*band)],nrow=band),
2,diff)<0),2,cumprod),2,sum)
Xi'an
sumber
12
Selama kita tahu bagaimana melakukan simulasi Poisson tanpa mengetahui . e
Glen_b -Reinstate Monica
5
Jika saya memanggil R rpoiss () generator, saya bisa berpura-pura tidak tahu . Lebih serius lagi, Anda dapat membuat variasi eksponensial [menggunakan fungsi daripada ] hingga jumlahnya melebihi dan jumlah yang dihasilkan dikurangi satu adalah Poisson . eE(1)loge1P(1)
Xi'an
5
Komputasi sama dengan menghitung , karena itu invers. Anda dapat menghindari penghitungan fungsi semacam itu dengan berbagai cara. Berikut adalah satu solusi berdasarkan jawaban pertama Anda: Hanya menggunakan aritmatika dasar. logexpn <- 1e5; 1/mean(n*diff(sort(runif(n+1))) > 1)
whuber
3
Saya percaya bahwa metode Forsythe sama dengan metode Gnedenko. Memilih seragam sehingga kurang dari 1 sama dengan memilih lebih kecil dari , dan jika kita berhasil, didistribusikan secara kondisional antara dan 0.xnnxsayaxn1-n-1xsaya1-nxsaya1-n-1xsaya
jwg
3
Saya tidak menyadari pendekatan Forsythe. Namun, ini terkait dengan hal lain yang sangat menarik. Jika alih-alih berhenti di Anda terus mengambil sampel, maka harapan jarak dari ke bawah berikutnya adalah tepat 3.n+1n
Aksakal
7

Bukan solusi ... hanya komentar cepat yang terlalu panjang untuk kotak komentar.

Aksakal

Aksakal memposting solusi di mana kami menghitung jumlah yang diharapkan dari gambar Seragam standar yang harus diambil, sehingga jumlahnya akan melebihi 1. Dalam Mathematica , formulasi pertama saya adalah:

mrM := NestWhileList[(Random[] + #) &, Random[], #<1 &]

Mean[Table[Length[mrM], {10^6}]] 

EDIT: Baru saja bermain cepat dengan ini, dan kode berikut (metode yang sama - juga di Mma - kode yang berbeda) sekitar 10 kali lebih cepat:

Mean[Table[Module[{u=Random[], t=1},  While[u<1, u=Random[]+u; t++]; t] , {10^6}]]

Xian / Whuber

Whuber telah menyarankan kode keren cepat untuk mensimulasikan solusi Xian 1:

Versi R: n <- 1e5; 1/mean(n*diff(sort(runif(n+1))) > 1)

Versi mma: n=10^6; 1. / Mean[UnitStep[Differences[Sort[RandomReal[{0, n}, n + 1]]] - 1]]

yang dia catat adalah 20 kali lebih cepat kode pertama (atau sekitar dua kali lebih cepat dari kode baru di atas).

Hanya untuk bersenang-senang, saya pikir akan menarik untuk melihat apakah kedua pendekatan sama efisiennya (dalam arti statistik). Untuk melakukannya, saya menghasilkan 2000 perkiraan e menggunakan:

  • Metode Aksakal: dataA
  • Metode 1 Xian menggunakan kode whuber: dataB

... keduanya dalam Mathematica . Diagram berikut kontras estimasi kerapatan kernel nonparametrik dari data yang dihasilkan dan dataB set data.

masukkan deskripsi gambar di sini

Jadi, sementara kode whuber (kurva merah) sekitar dua kali lebih cepat, metode ini tampaknya tidak dapat diandalkan.

serigala
sumber
Garis vertikal di lokasi nilai sebenarnya akan sangat meningkatkan gambar ini.
Sycorax berkata Reinstate Monica
1
Ini pengamatan yang sangat menarik, terima kasih. Karena setengah lebar akan berskala kuadratik dengan ukuran simulasi dan setengah lebar metode Xi'an adalah sekitar dua kali lipat dari Aksakal, kemudian menjalankan empat kali lebih banyak iterasi akan membuat mereka sama-sama akurat. Pertanyaan tentang berapa banyak upaya yang diperlukan dalam setiap iterasi tetap: jika satu iterasi dari metode Xi'an membutuhkan kurang dari seperempat upaya, maka metode itu masih akan lebih efisien.
whuber
1
Saya percaya situasinya menjadi jelas ketika Anda membandingkan jumlah realisasi variabel acak yang diperlukan dalam kedua metode dan bukan nilai nominal . n
whuber
1
running four times as many iterations will make them equally accurate106106
1
Dilakukan dengan baik dengan kode - akan sulit untuk meningkatkan banyak hal.
whuber
2

Metode yang membutuhkan jumlah sampel yang tidak saleh

f(x)=exx¯12n˙N(0,1)e

N(0,1)ex

N(0,1)ϕ^(x)ϕ((2))=(2π)1/2e1e=ϕ^(2)2π

Jika Anda ingin benar-benar gila, Anda bahkan dapat memperkirakan dan menggunakan metode yang Anda bahas sebelumnya.22π

Metode yang membutuhkan sampel sangat sedikit, tetapi menyebabkan jumlah kesalahan numerik yang tidak baik

Jawaban yang benar-benar konyol, tetapi sangat efisien, berdasarkan komentar yang saya buat:

Biarkan . Tentukan. Definisikan .Y n = | ( ˉ x ) n | E = ( 1 - Y n ) - 1 / Y nXseragam(-1,1)Yn=|(x¯)n|e^=(1-Yn)-1/Yn

Ini akan menyatu sangat cepat, tetapi juga mengalami kesalahan numerik ekstrem.

1 / Y n n Y n Y n = 0Yn1/YnnYnYn=0e

Cliff AB
sumber
2
e
1
@whuber: Saya tidak menggunakan Box-Muller karena transformasi log yang diperlukan terlalu langsung ke eksponensial dalam buku saya. Secara refleks saya akan membiarkan dosa dan dosa, tetapi itu hanya karena saya telah melupakan analisis kompleks untuk sesaat, poin yang sangat bagus.
Cliff AB
1
n1n2ϕ(2)n1n2en2n1
2

Berikut cara lain yang bisa dilakukan, meskipun cukup lambat. Saya tidak mengklaim efisiensi, tetapi menawarkan alternatif ini dalam semangat kelengkapan.

nU1,,UnIID U(0,1)e

E(saya(Usaya1/e)Usaya)=1/e1dkamukamu=1.

ekamu(1)kamu(n)

Sn(k)1nsaya=1k1kamu(saya)untuk semua k=1,..,n.

mmin{k|S(k)1}1/ee

e^2kamu(m)+kamu(m+1).

1/eee

Implementasi dalam R: Metode ini dapat diterapkan dalam Rmenggunakan runifuntuk menghasilkan nilai yang seragam. Kode tersebut adalah sebagai berikut:

EST_EULER <- function(n) { U <- sort(runif(n), decreasing = TRUE);
                           S <- cumsum(1/U)/n;
                           m <- min(which(S >= 1));
                           2/(U[m-1]+U[m]); }

e

set.seed(1234);

EST_EULER(10^3);
[1] 2.715426

EST_EULER(10^4);
[1] 2.678373

EST_EULER(10^5);
[1] 2.722868

EST_EULER(10^6); 
[1] 2.722207

EST_EULER(10^7);
[1] 2.718775

EST_EULER(10^8);
[1] 2.718434

> exp(1)
[1] 2.718282

e

Pasang kembali Monica
sumber