سؤال

لقد جربت العديد من الخوارزميات للعثور على π باستخدام Monte Carlo. أحد الحلول (في بيثون) هو هذا:

def calc_PI():
    n_points = 1000000
    hits = 0

    for i in range(1, n_points):
        x, y = uniform(0.0, 1.0), uniform(0.0, 1.0)

        if (x**2 + y**2) <= 1.0:
            hits += 1

    print "Calc2: PI result", 4.0 * float(hits) / n_points

الجزء المحزن هو أنه حتى مع 1000000000 الدقة سيئة للغاية (3.141...).

هل هذا هو الدقة القصوى هذه الطريقة يمكن أن تقدمها؟ السبب في أنني اخترت مونت كارلو كان من السهل جدا كسرها في أجزاء متوازية. هل هناك خوارزمية أخرى ل π من السهل كسرها إلى قطع وحساب؟

هل كانت مفيدة؟

المحلول

هذا مثال كلاسيكي على مونت كارلو. ولكن إذا كنت تحاول كسر حساب PI في الأجزاء المتوازية، فلماذا لا تستخدم مجرد سلسلة لا حصر لها واترك كل أسرة تأخذ مجموعة، ثم قم بمجموعة النتائج كما تذهب؟

http://mathworld.wolfram.com/piformulas.html.

نصائح أخرى

خطأ كسري يمر sqrt(N)/N = 1/sqrt(N), ، لذلك هذه طريقة غير فعالة للغاية للحصول على تقدير دقيق. يتم تحديد هذا الحد من الطبيعة الإحصائية للقياس ولا يمكن التغلب عليه.

يجب أن تكون قادرا على الحصول عليها floor(log_10(N))/2-1 أرقام الدقة الجيدة ل N يلقي. يمكن -2 مجرد أن تكون آمنة...

حتى عند ذلك يفترض أنك تستخدم RNG حقيقي أو جيد بما فيه الكفاية PRNG.

استخدام مولد رقم عشوائي شبه (http://www.nag.co.uk/ المجالالمطبوعات/interroduction_to_quasi_random_numbers.pdf.) بدلا من الحادة الزائفة القياسية. تغطي أرقام Random Quasi منطقة التكامل (ما تفعله هو تكامل MC) بشكل متساو من أرقام عشوائية زائفة، مما يعطي تقارب أفضل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top