मोंटे कार्लो द्वारा का अनुमान लगाने का सरल और सुरुचिपूर्ण तरीका इस पेपर में वर्णित है । कागज वास्तव में ई शिक्षण के बारे में है । इसलिए, दृष्टिकोण आपके लक्ष्य के लिए पूरी तरह से उपयुक्त है। Gnedenko द्वारा संभावना सिद्धांत पर एक लोकप्रिय रूसी पाठ्यपुस्तक के एक अभ्यास पर आधारित विचार । पी .१ .३ पर देखें। २ee
यह इतना है कि , जहां ξ एक यादृच्छिक चर कि इस प्रकार के रूप में परिभाषित किया जाता है। यह की न्यूनतम संख्या है n ऐसा है कि Σ n मैं = 1 आर मैं > 1 और आर मैं पर समान वितरण से यादृच्छिक संख्या रहे हैं [ 0 , 1 ] । सुंदर, है ना ?!E[ξ]=eξn∑ni=1ri>1ri[0,1]
चूंकि यह एक व्यायाम है, मुझे यकीन नहीं है कि अगर मेरे लिए समाधान (प्रमाण) को यहां पोस्ट करना अच्छा है :) अगर आप इसे खुद को साबित करना चाहते हैं, तो यहां एक टिप है: अध्याय को "क्षण" कहा जाता है, जिसे इंगित करना चाहिए आप सही दिशा में
यदि आप इसे स्वयं लागू करना चाहते हैं, तो आगे न पढ़ें!
यह मोंटे कार्लो सिमुलेशन के लिए एक सरल एल्गोरिथ्म है। एक समान रैंडम ड्रा करें, फिर दूसरा एक और इसी तरह जब तक योग 1 से अधिक न हो जाए। तैयार किए गए रैंडम की संख्या आपका पहला परीक्षण है। मान लीजिये आपको मिल गया:
0.0180
0.4596
0.7920
फिर आपका पहला परीक्षण 3 प्रस्तुत किया गया। इन परीक्षणों को करते रहें, और आप देखेंगे कि औसत में आपको मिलता है ।e
MATLAB कोड, सिमुलेशन परिणाम और हिस्टोग्राम का पालन करें।
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)
परिणाम और हिस्टोग्राम:
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
अद्यतन: मैंने परीक्षण परिणामों की सरणी से छुटकारा पाने के लिए अपना कोड अपडेट किया ताकि वह RAM न ले। मैंने पीएमएफ अनुमान भी छापा।
अद्यतन 2: यहाँ मेरा एक्सेल समाधान है। एक्सेल में एक बटन लगाएं और उसे निम्नलिखित VBA मैक्रो से लिंक करें:
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
सेल D1 में 1000, जैसे परीक्षणों की संख्या दर्ज करें, और बटन पर क्लिक करें। पहले रन के बाद स्क्रीन कैसी दिखनी चाहिए:
अद्यतन 3: सिल्वरफ़िश ने मुझे दूसरे तरीके से प्रेरित किया, पहले की तरह सुरुचिपूर्ण नहीं, लेकिन अभी भी शांत। यह का उपयोग कर एन-simplexes की मात्रा की गणना 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
संयोग से उन्होंने मोंटे कार्लो विधि पर पहली पुस्तक लिखी जो मैंने हाई स्कूल में पढ़ी। यह मेरी राय में विधि का सबसे अच्छा परिचय है।
अद्यतन 4:
टिप्पणियों में सिल्वरफ़िश ने एक सरल एक्सेल फॉर्मूला कार्यान्वयन का सुझाव दिया। लगभग 1 मिलियन यादृच्छिक संख्याओं और 185K परीक्षणों के बाद आपको इस तरह का परिणाम मिलता है:
जाहिर है, यह एक्सेल वीबीए कार्यान्वयन की तुलना में बहुत धीमा है। विशेष रूप से, यदि आप लूप के अंदर सेल वैल्यू को अपडेट नहीं करने के लिए मेरे VBA कोड को संशोधित करते हैं, और सभी आँकड़े एकत्र किए जाने के बाद ही इसे करते हैं।
अद्यतन 5
शीआन का समाधान # 3 बारीकी से संबंधित है (या थ्रेड में jwg की टिप्पणी के अनुसार कुछ अर्थों में भी ऐसा ही है)। यह कहना मुश्किल है कि सबसे पहले Forsythe या Gnedenko को इस विचार के साथ कौन आया था। रूसी में गेदेंको के मूल 1950 संस्करण में अध्याय में समस्याएं नहीं हैं। इसलिए, मुझे यह समस्या पहली नज़र में नहीं मिली, जहाँ यह बाद के संस्करणों में है। शायद इसे बाद में जोड़ा गया या पाठ में दफन किया गया।
जैसा कि मैंने शीआन के जवाब में टिप्पणी की, फोर्सिथ का दृष्टिकोण एक और दिलचस्प क्षेत्र से जुड़ा हुआ है: यादृच्छिक (आईआईडी) अनुक्रमों में चोटियों (एक्स्ट्रेमा) के बीच की दूरी का वितरण। औसत दूरी 3. होती है। फोर्सिथे के दृष्टिकोण में नीचे अनुक्रम नीचे के साथ समाप्त होता है, इसलिए यदि आप नमूना जारी रखते हैं तो आपको किसी और बिंदु पर एक और तल मिलेगा, फिर दूसरा आदि आप उनके बीच की दूरी को ट्रैक कर सकते हैं और वितरण का निर्माण कर सकते हैं।
R
कमांड क्या2 + mean(exp(-lgamma(ceiling(1/runif(1e5))-1)))
करता है , इस पर विचार करके स्पष्ट हो सकता है। (यदि लॉग गामा फ़ंक्शन का उपयोग करना आपको परेशान2 + mean(1/factorial(ceiling(1/runif(1e5))-2))
करता है , तो इसे बदलें , जो केवल जोड़, गुणा, भाग और छंटनी का उपयोग करता है, और अतिप्रवाह चेतावनी को अनदेखा करता है।) अधिक से अधिक ब्याज क्या हो सकता है कुशल सिमुलेशन: क्या आप संख्या को कम कर सकते हैं। किसी भी सटीकता के लिए का अनुमान लगाने के लिए कम्प्यूटेशनल चरणों की आवश्यकता है ?