Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

โปรแกรมหาค่าคาดหวังของสมการที่กำหนดสำหรับตัวเลขสุ่มใน Python


สมมติว่าเรามีตัวเลข n พิจารณา x =rand() mod n โดยที่ฟังก์ชัน rand() สร้างจำนวนเต็มระหว่าง 0 ถึง 10^100 (รวมทั้งสองอย่าง) อย่างสม่ำเสมอโดยสุ่ม และ

$$Y =\sqrt{x+\sqrt{x+\sqrt{x+\sqrt{x+...}}}$$

เราต้องหาค่าคาดหวังของ Y ค่าของ n จะอยู่ในช่วง 1 และ 5*10^6

ดังนั้น หากอินพุตเท่ากับ n =5 เอาต์พุตจะเป็น 1.696

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • ผิดพลาด:=2235.023971557617
  • max_n :=5 * 10^6
  • pref :=รายการเริ่มต้นมี 0 ตัวเดียว
  • สำหรับ i ในช่วง 1 ถึง 5 * 10^6 ทำ
    • แทรก (รายการสุดท้ายของข้อกำหนด + (1 +(4*i + 1)^0.5) * 0.5 ที่ส่วนท้ายของข้อกำหนด
  • ถ้า n
  • return pref[n - 1] / n
  • มิฉะนั้น
    • รวม :=(4 *(n - 1) + 5)^1.5 / 6 - 5^1.5 / 6 - ผิดพลาด
    • an :=0.5 + รวม /(2 * n)
    • คืนสินค้า
  • ตัวอย่าง

    ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

    def solve(n):
       err = 2235.023971557617
       max_n = 5 * 10**6
    
       pref = [0]
       for i in range(1, 5 * 10**6):
          pref.append(pref[-1] + (1 + (4 * i + 1)**0.5) * 0.5)
    
       if n < max_n:
          return pref[n - 1] / n
       else:
          total = (4 * (n - 1) + 5)**1.5 / 6 - 5**1.5 / 6 - err
          ans = 0.5 + total / (2 * n)
          return ans
    
    n = 5
    print(solve(n))

    อินพุต

    5

    ผลลัพธ์

    1.69647248786