ट्रैक
/
Julia
Julia
/
अभ्यास
/
मुश्किल प्रायिकताएँ
मुश्किल प्रायिकताएँ

मुश्किल प्रायिकताएँ

सीखने का अभ्यास

परिचय

Rational numbers ऐसी भिन्न होती हैं जिनमें एक पूर्णांक अंश को एक पूर्णांक हर से विभाजित किया जाता है।

उदाहरण के लिए, हम 2//3 को अनुमानित Float64 वैल्यू 0.6666... के बजाय एक सटीक भिन्न के रूप में संग्रहीत कर सकते हैं।

इसका फायदा यह है कि (पूर्णांक ओवरफलो जैसी चरम स्थिति को छोड़कर) परिमेय संख्या सटीक बनी रहती है, और ऐसी राउंडिंग एरर से बच जाती है जो दशमलव संख्याओं के साथ अक्सर अपरिहार्य होती हैं।

परिमेय संख्याएँ काफी सरल संख्या टाइप हैं और इनका व्यवहार लगभग वैसा ही है जैसा आप उम्मीद करेंगे। चूँकि शुरुआती वर्ज़न से ही Julia में ये एक मानक टाइप रही हैं, इसलिए ज़्यादातर फंक्शन इन्हें इनपुट के रूप में पूर्णांकों और दशमलव संख्याओं की ही तरह स्वीकार करते हैं।

परिमेय संख्याएँ बनाना

बनाना उतना ही आसान है जितना दो पूर्णांकों के बीच // लगाना।

julia> 3//4
3//4

julia> a = 3; b = 4;

julia> a//b
3//4

सामान्य गुणनखंड अपने आप हट जाते हैं और भिन्न अपने "न्यूनतम रूप" में आ जाती है: यानी उस भिन्न को सटीक रूप से दर्शाने वाले सबसे छोटे पूर्णांक, जिनका हर ऋणात्मक न हो।

julia> 5//15
1//3

julia> 5//-15
-1//3

परिमेय संख्याओं के साथ अंकगणित

सामान्य arithmetic operators + - * / ^ % परिमेय संख्याओं के साथ काम करते हैं, लगभग उसी तरह जैसे अन्य संख्या टाइप के साथ।

पूर्णांक और दूसरी Rationals भी इसमें शामिल की जा सकती हैं, और परिणाम एक Rational ही मिलता है। एक्सप्रेशन में float शामिल करने पर आउटपुट भी float ही मिलता है, और इससे सटीकता में (संभवतः) कमी आ सकती है।

अगर float चाहिए, तो किसी परिमेय संख्या को बदलने के लिए बस float() फंक्शन इस्तेमाल कीजिए। यह काफी सामान्य बात है कि किसी लंबी गणना के दौरान सटीकता बनाए रखने के लिए परिमेय संख्याएँ इस्तेमाल की जाएँ, और अंत में उन्हें दशमलव संख्या में बदल दिया जाए।

julia> 3//4 + 1//3  # addition
13//12

julia> 3//4 * 1//3  # multiplication
1//4

julia> 3//4 / 1//3  # division
9//4

julia> 3//4 ^ 2  # exponentiation
3//16

julia> 3//4 + 5  # rational and int => rational
23//4

julia> 3//4 + 5.3  # rational and float => float
6.05

julia> float(3//4)  # casting
0.75

अन्य ऑपरेशन

Julia में परिमेय संख्याएँ बस संख्याएँ ही होती हैं। कंपाइलर ज़रूरत पड़ने पर टाइप आम तौर पर अपने आप बदल देता है।

लेकिन ध्यान रखिए कि तुलनाएँ उन भिन्नों के लिए ही ठीक से काम करती हैं जिनका दशमलव रूप सीमित होता है:

julia> 3//4 == 0.75
true

julia> 3//4 < 0.74
false

लेकिन बाकी मामलों में तुलना के लिए Rational को Float में बदलना चाहिए:

julia> 1//3 == 1/3
false

julia> float(1//3) == 1/3
true

गणितीय फंक्शन परिमेय संख्याएँ इनपुट के रूप में लेते हैं, पर परिणाम दशमलव संख्या के रूप में दे सकते हैं:

julia> sqrt(9//16)
0.75

निर्देश

एक शोध संस्था ने ध्यान दिया है कि उसके कुछ कनिष्ठ शोधकर्ता अपने विश्लेषण में उतने अच्छे तरीके नहीं अपना रहे जितने होने चाहिए। इनमें से एक तरीका यह है कि आगे की गणनाएँ करने से पहले असतत प्रायिकताओं को तुरंत दशमलव संख्याओं (यानी वास्तविक संख्याओं) में बदल दिया जाए।

वरिष्ठ शोधकर्ता गणनाओं में परिमेय संख्याएँ इस्तेमाल करना पसंद करते हैं, क्योंकि इससे ज़्यादा परिशुद्धता मिल सकती है। वे यह भी जानना चाहते हैं कि कनिष्ठ शोधकर्ताओं के कमज़ोर तरीकों ने अध्ययनों के परिणामों को प्रभावित किया है या नहीं।

अध्ययन दो तरह के किए गए थे:

  • बहुत सारे परीक्षण किए गए, जिनमें हर एक सफलता की एक असतत प्रायिकता देता था। फिर इन प्रायिकताओं का औसत निकाला गया।
  • कई स्वतंत्र घटनाओं का परीक्षण किया गया। सभी घटनाओं के होने की कुल प्रायिकता उन्हें आपस में गुणा करके निकाली गई।

वरिष्ठ शोधकर्ता आपसे कुछ फंक्शन लिखने को कह रहे हैं। ये फंक्शन उन्हें यह पता लगाने में मदद करेंगे कि दशमलव संख्याएँ इस्तेमाल करने से विश्लेषणों में राउंडिंग एरर आई हैं या नहीं। अगर एरर आई हों, तो आपको परिणाम के लिए एक सटीक परिमेय संख्या भी देनी है।

1. सफलताओं और परीक्षणों का अनुपात दीजिए

rationalize(successes, trials) फंक्शन दो ऐरे लेता है, successes और trials। किसी इंडेक्स i के लिए, successes[i] उन सफलताओं की संख्या बताता है जो trials[i] परीक्षणों में हुईं। यह फंक्शन सफलताओं को परीक्षणों की संख्या से भाग देने पर मिलने वाली परिमेय संख्याओं का एक ऐरे लौटाता है, और इनका क्रम इनपुट ऐरे के क्रम जैसा ही होता है।

julia> rationalize([1, 2, 3], [4, 5, 6])
3-element Vector{Rational{Int64}}:
 1//4
 2//5
 1//2

2. सफलताओं और परीक्षणों से जुड़ी दशमलव प्रायिकताएँ निकालिए

इसी तरह, probabilities(successes, trials) फंक्शन भी दो ऐरे लेता है, successes और trials। यह सफलताओं को परीक्षणों की संख्या से भाग देने पर मिलने वाली दशमलव संख्याओं का एक ऐरे लौटाता है, और इनका क्रम भी इनपुट ऐरे के क्रम जैसा ही होता है।

julia> probabilities([1, 2, 3], [4, 5, 6])
3-element Vector{Float64}:
 0.25
 0.4
 0.5

3. प्रायिकताओं के औसत की जाँच कीजिए

checkmean(successes, trials) फंक्शन दोनों ऐरे, successes और trials, लेता है। यह दशमलव प्रायिकताओं के औसत की तुलना परिमेय प्रायिकताओं के औसत से करता है।

  • अगर दोनों प्रायिकताएँ बराबर हों, तो checkmean true लौटाता है।
  • अगर दोनों प्रायिकताएँ अलग हों, तो checkmean परिमेय प्रायिकता लौटाता है।
julia> successes, trials = [9, 4, 7, 8, 6], [22, 22, 11, 17, 12];
julia> checkmean(successes, trials)
true

julia> successes, trials = [6, 5, 9, 8, 9], [21, 19, 13, 25, 22];
julia> checkmean(successes, trials)
1873629//4754750

4. स्वतंत्र प्रायिकता की जाँच कीजिए

checkprob(successes, trials) फंक्शन दोनों ऐरे, successes और trials, लेता है। यह दशमलव प्रायिकताओं की कुल प्रायिकता की तुलना परिमेय प्रायिकताओं की कुल प्रायिकता से करता है।

  • अगर दोनों प्रायिकताएँ बराबर हों, तो checkprob true लौटाता है।
  • अगर दोनों प्रायिकताएँ अलग हों, तो checkprob परिमेय प्रायिकता लौटाता है।
julia> successes, trials = [2, 9, 4, 4, 5], [15, 11, 17, 19, 15];
julia> checkprob(successes, trials)
true

julia> successes, trials = [9, 8, 5, 4, 3], [22, 14, 19, 25, 18];
julia> checkprob(sucesses, trials)
12//7315
GitHub के ज़रिए संपादित करें यह लिंक एक नई विंडो या टैब में खुलता है
Julia Exercism

मुश्किल प्रायिकताएँ शुरू करने के लिए तैयार हैं?

Exercism पर साइन अप कीजिए और Julia को 35 कॉन्सेप्ट128 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।