কেচি লরেন [বন্ধ]


52

যেহেতু এটা সম্প্রতি পাই দিন ছিল, আমি করেছি খেয়াল একটি সংখ্যা এর চ্যালেঞ্জ যে আপনার পাই গণনা করতে বলুন।

অবশ্যই, একটি কোচ লোরেন যথেষ্ট পাই নয় (আপনি যদি শিরোনামের বাইরে চ্যালেঞ্জটি অনুমান করেন তবে আপনি +1 এর বোনাস স্কোর claim দাবি করতে পারেন)। যেমন, আপনার কাজটি এমন একটি অ্যালগরিদম বা পদ্ধতি লিখতে হবে যা দেখে মনে হয় এটি পাইকে প্রথম নজরে দেখায় তবে পাইয়ের দিকে রূপান্তর না করার গ্যারান্টিযুক্ত

এটি একটি অন্তর্নিহিত চ্যালেঞ্জ, সুতরাং এটি নিশ্চিত করুন যে এটি একটি সহজ পরীক্ষার ক্ষেত্রে 3.14 আউটপুট করবে ... যেমন আপনার অ্যালগরিদমের 10 টি পুনরাবৃত্তি সহ। এটিও একটি জনপ্রিয়তা চ্যালেঞ্জ, সুতরাং স্পষ্টত্বে echo(pi)গিয়ে বলবেন না যে আইইইই 754 ভাসমান পয়েন্টটি কিছু অঙ্ক উপরে বা নীচে ঘুরছে।

বিজয়ী একটি কোচ লোরেন পায় ²

Ning সতর্কতা: আসলে বোনাস স্কোর নয়। স্কোর দাবি করে, আপনি পাই পাই ডে, 2016 এর আগে আমাকে পাই বেক করতে রাজি হন

Ning সতর্কতা: আপনার উত্তরটি 'স্বীকৃত' হিসাবে চিহ্নিত করার জন্য কুইচ লোরেন রূপক হিসাবে ব্যবহৃত হয়


সম্পর্কিত: লিংক
Sp3000

2
আমি এই প্রশ্নটিকে অফ-টপিক হিসাবে বন্ধ করতে ভোট দিচ্ছি কারণ এখানে অন্তর্নিহিত চ্যালেঞ্জগুলি আর টপিকের নেই। meta.codegolf.stackexchange.com/a/8326/20469
বিড়াল

উত্তর:


77

অ্যালগরিদম

সুপরিচিত ফলাফল ব্যবহার:

এখানে চিত্র বর্ণনা লিখুন

আমরা পাইথন 3 এ সংজ্ঞায়িত করেছি:

from math import sin
from functools import reduce
from operator import mul

def integrate(f, a, b, n):
   h = (b-a)/n
   i = h * sum(f(a+i*h+h/2) for i in range(n))
   return i

def sinc(x):
   return sin(x)/x

def borwein(n):
   def f(x):
     g = lambda i: sinc(x/(2*i+1))
     return reduce(mul, map(g, range(n)), 1)
   return f

পরীক্ষামূলক

>>> for i in range(1,10):
...   pi = 2 * integrate(borwein(i), 0, 1000, 1000)
...   print("x[{}] = {}".format(i, pi))
x[1] = 3.140418050361841
x[2] = 3.141593078648859
x[3] = 3.1415926534611547
x[4] = 3.1415926535957164
x[5] = 3.1415926535895786
x[6] = 3.1415926535897953
x[7] = 3.1415926535897936
x[8] = 3.1415926535435896 # ???
x[9] = 3.141592616140805  # ?!!

ভক্ষক

Borwein অবিচ্ছেদ্য একটি বাস্তব রসিকতা গণিত এর ধারণা। উপরের পরিচয়টি সিনক (x / 13) ধরে রাখার পরে, পরবর্তী মানটি আসলে:

এখানে চিত্র বর্ণনা লিখুন


12
সম্ভবত সাম্প্রতিক সময়ে একটি অন্তর্নিহিত প্রশ্নের সেরা উত্তর।
অপ্টিমাইজার

14
"ব্যবহারিক রসিকতার গণিতের ধারণা"। +1
চাচাবিহীন

16
এটা ভাল গুলোর একটি! আইআইআরসি, এই ইন্টিগ্রালের সাথে সর্বাধিক পরিচিত একটি রসিকতা ছিল যখন কেউ
ওল্ফ্রাম আলফায়

3
এই রেফারেন্সটি কী চলছে তার একটি ভাল ব্যাখ্যা দেয়।
টনিওএলগ্রিংগো

59

পাই খুঁজতে, আমরা এই সুপরিচিত ডিফারেনশিয়াল সমীকরণকে একীভূত করব:

> dy / dt = sin (y) * এক্সপ্রেস (টি)

প্রাথমিক অবস্থার সাথে

> 0 <y0 <2 * পাই

এটি সুপরিচিত যে এই প্রাথমিক মানের সমস্যাটি বিন্যাস ছাড়াই টি বৃদ্ধি পাওয়ায় π এ রূপান্তরিত করে। সুতরাং, আমাদের কেবল দরকার 0 থেকে 2π এর মধ্যে কোনও কিছুর জন্য যুক্তিসঙ্গত অনুমান দিয়ে শুরু করা এবং আমরা সংখ্যার একীকরণ করতে পারি। 3 π এর কাছাকাছি, সুতরাং আমরা শুরু করতে y = 3 বেছে নেব।

class PiEstimator {

    static final int numSteps = 100;
    static final double dt = 0.1, tMax = numSteps * dt;

    static double f(double y, double t){ return Math.sin(y) * Math.exp(t); }

    public static void main(String[] args){
        double y = 3;
        int n = 0;

        for(double t = 0; t < tMax; t+=dt){
            if(n%5 == 0) System.out.println(n + ": " + y);
            n++;
            y += f(y,t)*dt;
        }
    }
}

বিভিন্ন সংখ্যক পদক্ষেপের জন্য এখানে প্রতিটি ফলাফল রয়েছে:

0: 3.0
5: 3.0682513992369205
10: 3.11812938865782
15: 3.1385875952782825
20: 3.141543061526081
25: 3.141592653650948
30: 3.1415926535886047
35: 3.1415926535970526
40: 3.1415926517316737  // getting pretty close!
45: 3.1416034165087647  // uh oh
50: 2.0754887983317625  
55: 49.866227663669584
60: 64.66835482328707
65: 57.249212987256286
70: 9.980977494635624
75: 35.43035516640032
80: 51.984982646834
85: 503.8854575676292
90: 1901.3240821223753
95: 334.1514462091029
100: -1872.5333656701248

কিভাবে এটা কাজ করে:

এই ডিফারেনশিয়াল সমীকরণটি সুপরিচিত কারণ সঠিকভাবে সংহত করা অত্যন্ত কঠিন। ছোট টি মানগুলির জন্য নিখুঁত সংহতকরণ গ্রহণযোগ্য ফলাফল আনবে, তবে বেশিরভাগ সংহতকরণের পদ্ধতিগুলি চূড়ান্ত অস্থিতিশীলতা প্রদর্শন করে কারণ টি খুব বড় হয়।


4
: @UriZarfaty এই Wikipedia নিবন্ধটি এটা প্রশংসনীয় ভাল ব্যাখ্যা করে en.wikipedia.org/wiki/Stiff_equation
AJMansfield

1
কি n? ...
কোল জনসন

1
@ আজেমানসফিল্ড আমার অর্থ: এটি কোথাও ঘোষণা করা হয়নি। আপনার forক্ষয় ব্যবহার করে tতবে আপনার লুপ ব্যবহার করে n
কোল জনসন

1
@ কোল জনসন আমি সবেমাত্র এটি ঠিক করেছি।
এজেম্যানসফিল্ড

2
আমি মনে করি আপনার ডিফারেনশিয়াল সমীকরণটি dy / dt = sin (y) * exp (t) পড়া উচিত।
ডেভিড জাং

6

কোড:

var pi = function(m) {
  var s2 = 1, s1 = 1, s = 1;
  for (var i = 0; s >= 0; ++i) {
    s = s1 * 2 - s2 * (1 + m*m);
    s2 = s1;
    s1 = s;
  }
  return i*m*2;
};

আমি মূলত এই ক্রমটি দুর্ঘটনাক্রমে আবিষ্কার করেছি। এটি শুরু হয় 1, 1এবং এর পরে প্রতিটি শব্দ s(n)দেওয়া হয় s(n) = 2*s(n - 1) - s(n - 2) * (1 + m*m)। শেষ ফলাফলটি এমন ক্ষুদ্রতম nযা এর s(n) < 0দ্বারা গুণিত হয় 2m। হিসাবে mছোট পায়, এটি আরো এবং আরো সঠিক পাওয়া উচিত।

pi(1/100) --> 3.14
pi(1/1000) --> 3.14
pi(1/10000) --> 3.1414
pi(1/100000) --> 3.14158
pi(1/1000000) --> 3.141452 // what?
pi(1/10000000) --> 3.1426524 // .. further away from pi

আমি নিশ্চিত যে এগুলি ভাসমান পয়েন্টের ত্রুটিগুলির (1 + m*m)কাছাকাছি আসার সাথে সাথে রয়েছে তবে আমি নিশ্চিত নই। আমি যেমন বলেছিলাম, আমি দুর্ঘটনাক্রমে এটিকে হোঁচট খেয়েছি। আমি এর অফিসিয়াল নাম সম্পর্কে নিশ্চিত নই mএটি খুব ছোট দিয়ে চেষ্টা করবেন না বা এটি চিরকাল চলবে (যদি এত ছোট হওয়ার 1 + m*m == 1কারণে থাকে m)।

যদি এই ক্রমটির নাম বা এটি কেন এমন আচরণ করে তবে যদি কেউ জানেন তবে আমি এটির প্রশংসা করব।


আমি মনে করি এটি বাতিল হওয়ার কারণে হয়েছে, এটি প্রায় দুটি সমান সংখ্যাকে বিয়োগ করার সময় অঙ্কের ক্ষতি। এস 1 এবং এস 2 একটি পুনরাবৃত্তির পরে প্রায় সমান।
শানিশাইজ

1
এটি কীভাবে কাজ করে তা আমি এখনও খুঁজে পাচ্ছি না, তবে এটি আমার একবারের মতো করে এমন কিছু মনে করিয়ে দেয়: আমি বারবার শোরগোলের সংকেতের সমষ্টিগত পরিমাণ নিয়েছি এবং এটি 0, সর্বোচ্চ মান 1 হিসাবে সাধারণ করে তুলেছি এটি একটি সাইন ওয়েভকে রূপান্তরিত করবে, যেহেতু এটিই কেবলমাত্র একটি সংকেত যা তার নিজস্ব অ্যান্টি-ডেরিভেটিভ (একটি ফেজ অফসেট সহ)।
শানাইসাইজ

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