पी i = = 3। 2


37

अनंत श्रृंखला के इस वीडियो से प्रेरित ।

परिचय

पाई को वृत्त के व्यास के परिधि के अनुपात के रूप में परिभाषित किया गया है। लेकिन एक सर्कल को कैसे परिभाषित किया गया है? आमतौर पर एक सर्कल को केंद्र बिंदु पर निरंतर दूरी के साथ अंक के रूप में परिभाषित किया जाता है (हमें मान लें कि केंद्र में है (0,0))। अगला सवाल होगा: हम दूरी को कैसे परिभाषित करते हैं ? निम्नलिखित में हम अलग-अलग धारणाओं पर विचार कर रहे हैं ( Lp-norms द्वारा प्रेरित ):

एक मानदंड (= कुछ ऐसा जो एक लंबाई को मापता है ) को देखते हुए हम आसानी से एक दूरी (= दो बिंदुओं के बीच की दूरी) का निर्माण कर सकते हैं :

dist(A,B) := norm (A-B)

यूक्लिडियन मानदंड इसके द्वारा दिया गया है:

norm((x,y)) = (x^2 + y^2)^(1/2)

इसे L2-norm भी कहा जाता है । अन्य एलपी-मानदंड2 1 और अनन्तता के बीच अन्य मूल्यों द्वारा उपरोक्त सूत्र में बदलकर बनाए गए हैं :

norm_p((x,y)) = (|x|^p + |y|^p)^(1/p)

उन विभिन्न मानदंडों के लिए यूनिट सर्कल में काफी अलग आकार हैं:

चुनौती

यह देखते हुए p >= 1, चार महत्वपूर्ण आंकड़ों की सटीकता के साथ -norm के संबंध में एक Lp- सर्कल के व्यास के परिधि के अनुपात की गणना करें Lp

परीक्षण के मामलों

हम उपयोग कर सकते हैं कि के लिए p,qके साथ 1 = 1/p + 1/qहम के लिए एक ही अनुपात मिलता Lpहै और साथ ही के रूप में Lqआदर्श। इसके अलावा p = q = 2अनुपात के लिए न्यूनतम है, और p = 1, q = infinityहम 4 का अनुपात प्राप्त करते हैं, इसलिए अनुपात हमेशा piऔर के बीच होते हैं 4

p   or  q            ratio
1       infinity     4
2       2            3.141592
1.623   2.60513      3.200
1.5     3            3.25976
4       1.33333      3.39693

2
आकृतियों को लेम कर्व्स या सुपरेलिप्स के रूप में जाना जाता है और 0 < p <1 के लिए भी मौजूद है, भले ही आदर्श स्वयं नहीं करता है (क्योंकि यह त्रिकोण असमानता का उल्लंघन करता है)। सुपरलीप के लिए विकिपीडिया लेख में क्षेत्र के लिए एक बंद रूप शामिल है।
नील

@ नील हमें परिधि पर विचार करने की आवश्यकता है, न कि उस क्षेत्र पर, जो - जहाँ तक मुझे पता है - केवल एक चाप लंबाई अभिन्न के माध्यम से गणना की जा सकती है।
दोष

7
क्षमा करें, जब तक मैंने उन पर पढ़ना समाप्त किया, तब तक मैं भूल गया था कि प्रश्न क्या पूछा था।
नील

2
लवली चुनौती!
लुइस मेंडो

1
यह नोट करना दिलचस्प है कि क्षेत्र सूत्र ( A = πr²) के लिए नहीं रखता हैp ≠ 2
Mego

जवाबों:


12

पायथन + स्किपी, 92 बाइट्स

from scipy.integrate import*
lambda p:2/p*quad(lambda x:(x/x**p+(1-x)**(1-p))**(1/p),0,1)[0]

फॉर्मूला इस गणित से है । प्रश्न


इस मूल्यांकन के साथ एक कार्यान्वयन का परीक्षण करते समय मुझे उस दृष्टिकोण के अभिसरण से परेशानी थी, जिस पर विलक्षणता के कारण x=1, यह कैसे प्रस्तुत करता है?
दोष

स्काइप पायथन मानक पुस्तकालय का हिस्सा नहीं है। शायद ऋषि पर स्विच करें?
बसुकक्सुआन

2
@busukxuan पीपीसीजी पर कोई आवश्यकता नहीं है जो आपको केवल मानक पुस्तकालयों का उपयोग करने की अनुमति देता है। लेकिन मैं इसका शीर्षक शीर्षक में उल्लेख करूंगा।
orlp

1
@ChristianSievers मैंने किसी और के बंद सूत्र का उपयोग करने के लिए बुरा महसूस करने से बचने के लिए अपना एकीकरण किया :-P
लुइस मेंडो

1
@ChristianSarios मैंने वास्तव में सैंडबॉक्स में एक और फॉर्मला भी शामिल किया है, यदि आप रुचि रखते हैं =)
त्रुटिपूर्ण

10

MATL , 31 बाइट्स

0:1e-3:1lyG^-lG/^v!d|G^!slG/^sE

इसे ऑनलाइन आज़माएं! या सभी परीक्षण मामलों को सत्यापित करें

व्याख्या

यह उत्पन्न करता है एक्स , वाई इकाई सर्कल में 0.001 कदम के साथ 1001 अंकों पर नमूना के एक चौथाई के निर्देशांक एक्स । सर्कल के क्वार्टर की लंबाई को उन बिंदुओं से गुजरने वाली बहुभुज रेखा द्वारा अनुमानित किया जाता है; वह है, 1000 खंडों की लंबाई का योग। लंबाई p-norm के अनुसार निश्चित रूप से गणना की जाती है । परिणाम को 2 से गुणा करने पर लगभग आधा चक्र, यानी, का अनुमानित भाग मिलता है।

0:1e-3:1   % Push [0 0.001 0.002 ... 0.999 1]. These are the x coordinates of
           % the vertices of the polygonal line that will approximate a quarter
           % of the unit circle
l          % Push 1
y          % Duplicate [0 0.001 0.002 ... 0.999 1] onto the top of the stack.
G          % Push input, p
^          % Element-wise power: gives [0^p 0.001^p ... 1^p]
-          % Element-wise subtract from 1: gives [1-0^p 1-0.001^p ... 1-1^p]
lG/        % Push 1, push p, divide: gives 1/p
^          % Element-wise power: gives [(1-0^p)^(1/p) (1-0.001^p)^(1/p) ...
           % ... (1-1^p)^(1/p)]. These are the y coordinates of the vertices
           % of the polygonal line
v          % Concatenate vertically into a 2×1001 matrix. The first row contains
           % the x coordinates and the second row contains the y coordinates
!          % Transpose
d|         % Compute consecutive differences down each column. This gives a
           % 1000×2 matrix with the x and y increments of each segment. These
           % increments will be referred to as Δx, Δy
G          % Push p
^          % Element-wise power
!          % Transpose
s          % Sum of each column. This gives a 1×1000 vector containing
           % (Δx)^p+(Δy)^p for each segment
lG/        % Push 1/p
^          % Element-wise power. This gives a 1×1000 vector containing 
           % ((Δx)^p+(Δy)^p)^(1/p) for each segment, that is, the length of 
           % each segment according to p-norm
s          % Sum the lenghts of all segments. This approximates the length of
           % a quarter of the unit circle
E          % Multiply by 2. This gives the length of half unit circle, that is,
           % pi. Implicitly display

8

मेथेमेटिका, ४ ९ ४६ बाइट्स

एलेफाल्फा के कारण 3 बाइट बच गईं

2NIntegrate[(1+(a^-#-1)^(1-#))^(1/#),{a,0,1}]&

अनाम फ़ंक्शन। नंबर को इनपुट के रूप में लेता है और आउटपुट के रूप में एक नंबर देता है।


1
2NIntegrate[(1+(a^-#-1)^(1-#))^(1/#),{a,0,1}]&
एलेफाल्फा

5

PARI / GP, 48 43 बाइट्स

@Orlp का फॉर्मूला देखने के बाद यह आसान है, और @ alephalpha का संस्करण 5 बाइट बचाता है:

p->2*intnum(u=0,1,(1+(u^-p-1)^(1-p))^(1/p))

थोड़ा उपयोगी कुछ जोड़ने के लिए, के की गणना करते हैं pजिसके लिए हम मिल 3.2:

? f=p->2*intnum(u=0,1,(1+(u^-p-1)^(1-p))^(1/p));
? solve(p=1,2,f(p)-3.2)
%2 = 1.623002382384469009676324702

सही उपयोग

हालांकि कोड ऐसे परिणाम देता है जो चुनौती की मांगों की तुलना में बहुत अधिक सटीक होते हैं, इसे आसानी से बहुत सुधार किया जा सकता है: यदि हम ऊपरी एकीकरण सीमा 1को प्रतिस्थापित करते हैं [1,1/p-1](यह बताकर कि मैनुअल क्या विलक्षणता को बुलाता है) तो सभी f(2)सहमत हुए अंकों को दर्शाते हैं Pi। यह तब भी सही है जब हम सटीकता को 100 (प्रकार \p100) तक बढ़ाते हैं ।

हालांकि, उस परिवर्तन के बाद solveगणना ने काम नहीं किया। मैंने मामले को स्पष्ट रूप से संभालने के लिए आंतरिक शब्द को बदल दियाu=0 बदल दिया और एक नए PARI संस्करण और 64 बिट (जो एक उच्च डिफ़ॉल्ट परिशुद्धता का अर्थ है) के साथ एक अलग कंप्यूटर में भी बदल गया।

यहाँ के लिए pमूल्य की बेहतर गणना है Pi=3.2, और चलिए वास्तविक Pi पर भी एक नजर डालते हैं:

? f=p->2*intnum(u=0,[1,1/p-1],if(u,(1+(u^-p-1)^(1-p))^(1/p),0));
? f(2)
%2 = 3.1415926535897932384626433832795028842
? Pi
%3 = 3.1415926535897932384626433832795028842
? solve(p=1,2,f(p)-3.2)
%4 = 1.6230023823844690096763253745604419761

p->2*intnum(u=0,1,(1+(u^-p-1)^(1-p))^(1/p))
एलेफाल्फा

0

जावास्क्रिप्ट (ईएस 7), 80 बाइट्स

Orlp के उत्तर के आधार पर । यह JS कार्यान्वयन काफी धीमा है। आप i=1e-7तेजी से सन्निकटन के लिए (या इससे भी अधिक) प्रयास करना चाह सकते हैं ।

नोट : यह मूल रूप से केवल क्रोम और एज के लिए है। Math.pow()फ़ायरफ़ॉक्स 50.1 का उपयोग करने वाला एक समतुल्य ES6 संस्करण बहुत धीमा प्रतीत होता है ।

संपादित करें : नील के अनुसार, यह फ़ायरफ़ॉक्स 52 पर भी ठीक काम करना चाहिए।

f=
p=>{for(i=5e-8,s=x=0;(x+=i)<1;)s+=i*(x**(1-p)+(1-x)**(1-p))**(1/p);return 2/p*s}

console.log(f(1).toFixed(3))
console.log(f(2).toFixed(3))
console.log(f(1.623).toFixed(3))


ES7 संस्करण काफी फुर्तीला लग रहा था जब मैंने फ़ायरफ़ॉक्स 52 का उपयोग करके इसे आज़माया था (मैंने इसे वैज्ञानिक रूप से नहीं मापा था, लेकिन यह क्रोम के समान गति के बारे में महसूस करता था; मुझ पर बढ़त जम गई)।
नील

@ आपकी प्रतिक्रिया के लिए धन्यवाद। तदनुसार अद्यतन किया गया।
अरनौलड
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.