পি i = = 3। 2


37

অনন্ত সিরিজের এই ভিডিওটি দ্বারা অনুপ্রাণিত ।

ভূমিকা

পাইটিকে একটি বৃত্তের ব্যাসের পরিধির অনুপাত হিসাবে সংজ্ঞায়িত করা হয়। তবে একটি বৃত্ত কীভাবে সংজ্ঞায়িত হয়? সাধারণত একটি বৃত্তকে কেন্দ্রবিন্দুতে ধ্রুবক দূরত্ব সহ পয়েন্ট হিসাবে সংজ্ঞায়িত করা হয় (আসুন আমরা ধরে নিই যে কেন্দ্রটি রয়েছে (0,0))। পরবর্তী প্রশ্নটি হবে: আমরা কীভাবে দূরত্বটি সংজ্ঞায়িত করব ? নিম্নলিখিতগুলিতে আমরা দূরত্বের বিভিন্ন ধারণা বিবেচনা করছি ( Lp-Norms দ্বারা প্ররোচিত):

একটি আদর্শ দেওয়া হয়েছে (= এমন কিছু যা দৈর্ঘ্যের পরিমাণকে পরিমাপ করে ) আমরা সহজেই নীচে একটি দূরত্ব (= দুটি পয়েন্টের মধ্যে দূরত্ব ) তৈরি করতে পারি :

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

ইউক্যালিডিয়ান আদর্শটি প্রদান করেছেন:

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

একে এল 2-আদর্শও বলা হয় । অন্যান্য এলপি-নীতিগুলি2 উপরের সূত্রে 1 এবং অনন্তের মধ্যে অন্যান্য মানের দ্বারা প্রতিস্থাপন করে নির্মিত হয়:

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

এই বিভিন্ন নিয়মের ইউনিট চেনাশোনাগুলির বেশ স্বতন্ত্র আকার রয়েছে:

চ্যালেঞ্জ

একটি প্রদত্ত p >= 1একটি ব্যাস করার পরিধি অনুপাত গণনা করা LP-বৃত্ত থেকে সম্মান সঙ্গে Lpচার উল্লেখযোগ্য পরিসংখ্যান একটি সঠিকতা সঙ্গে -norm।

Testcases

আমরা ব্যবহার করতে পারি যে জন্য 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 < পি <1 এর জন্যও বিদ্যমান, যদিও আদর্শ নিজেই তা করে না (কারণ এটি ত্রিভুজ বৈষম্য লঙ্ঘন করে)। সুপ্রেলিপসের উইকিপিডিয়া নিবন্ধটিতে এই অঞ্চলের জন্য একটি বন্ধ ফর্ম রয়েছে includes
নীল

@ নীল যদিও আমাদের পরিধিটি বিবেচনা করা দরকার তবে ক্ষেত্রটি নয়, যা আমি জানি - কেবল একটি চাপ দৈর্ঘ্যের অবিচ্ছেদ্য মাধ্যমে গণনা করা যায়।
flawr

7
দুঃখিত, আমি তাদের উপর পড়া শেষ করার পরে আমি প্রশ্নটি যা চেয়েছিলাম তা ভুলে গিয়েছি।
নীল

2
সুন্দর চ্যালেঞ্জ!
লুইস মেন্ডো

1
এটি আকর্ষণীয় যে অঞ্চল সূত্রটি ( A = πr²) ধরে রাখে নাp ≠ 2
মেগো

উত্তর:


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, এককতার কারণে আপনার জমাটি কীভাবে কাজ করে?
flawr

স্কিপি পাইথন স্ট্যান্ডার্ড লাইব্রেরির অংশ নয়। সেজে যেতে পারে?
বুসুকসুয়ান

2
@ বুসুকক্সুয়ান পিপিসিজিতে এমন কোনও প্রয়োজন নেই যা আপনাকে কেবল স্ট্যান্ডার্ড লাইব্রেরি ব্যবহার করতে দেয়। তবে আমি যেভাবেই হোক শিরোনামে এটি উল্লেখ করব।
orlp

1
@ ক্রিশ্চিয়িয়ানসিভারের কারও বন্ধ থাকা সূত্রটি ব্যবহার করার জন্য খারাপ লাগা এড়াতে আমি আমার নিজস্ব ইন্টিগ্রেশন করেছি :
লুইস মেন্ডো

1
@ ক্রিশ্চিয়িয়ানসিভারস আমি আসলে আপনার আগ্রহের ক্ষেত্রে স্যান্ডবক্সে আরও একটি ফর্মেলা অন্তর্ভুক্ত করেছি =)
ফ্ল্যাওয়ার

10

এমএটিএল , 31 বাইট

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

এটি অনলাইন চেষ্টা করুন! বা সমস্ত পরীক্ষার কেস যাচাই করুন

ব্যাখ্যা

এই উত্পন্ন এক্স , Y ইউনিট বৃত্তে 0.001 ধাপ 1001 বিন্দুতে নমুনা এক চতুর্থাংশ এর স্থানাঙ্ক এক্স । বৃত্তের চতুর্থাংশের দৈর্ঘ্য বহুভুজীয় রেখার মধ্য দিয়ে প্রায় ima পয়েন্টগুলির মধ্য দিয়ে যায়; অর্থাৎ, 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

গণিত, 49 46 বাইট

আলেফালফার কারণে 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 বাইট

@ অর্ল্প সূত্রটি খুঁজে পাওয়ার পরে এটি সহজ, এবং @ আলেফাল্ফার সংস্করণটি 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 সংস্করণ এবং bit৪ বিট (যা একটি উচ্চতর ডিফল্ট নির্ভুলতা বোঝায়) সহ একটি পৃথক কম্পিউটারে পরিবর্তন করেছি।

pমানটির উন্নত গণনা এখানে দেওয়া হল Pi=3.2এবং আসল পাইটির দিকে একবার নজর দেওয়া যাক:

? 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

জাভাস্ক্রিপ্ট (ES7), 80 বাইট

Orlp এর উত্তরের ভিত্তিতে । এই জেএস বাস্তবায়ন বেশ ধীর। আপনি i=1e-7আরও দ্রুত প্রায় অনুমানের জন্য চেষ্টা করতে পারেন (বা আরও উচ্চতর)।

দ্রষ্টব্য : এটি মূলত কেবল ক্রোম এবং এজের জন্য intended Math.pow()ফায়ারফক্স 50.1 এ ব্যবহার করে সমতুল্য ES6 সংস্করণটি অনেক ধীর বলে মনে হচ্ছে ।

সম্পাদনা করুন : নীলের মতে, এটি ফায়ারফক্স ৫২ এও দুর্দান্ত কাজ করা উচিত।

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 সংস্করণটি খুব স্পষ্টভাবে মনে হয়েছিল (আমি এটি বৈজ্ঞানিকভাবে পরিমাপ করিনি, তবে এটি ক্রোমের মতোই গতি সম্পর্কে অনুভূত হয়েছিল; এজ আমার উপর হিমায়িত হয়েছে)।
নিল

@ নীল আপনার মতামতের জন্য ধন্যবাদ সেই অনুযায়ী আপডেট হয়েছে।
আরনাউল্ড
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.