আনুমানিক ∫ ((e ^ x) / (x ^ x)) ডেক্স


24

আপনি আনুমানিক মান এর:

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

যেখানে আপনার ইনপুট I

বিধি

  • আপনি কোনও অন্তর্নির্মিত অবিচ্ছেদ্য ফাংশন ব্যবহার করতে পারবেন না।
  • আপনি কোনও অন্তর্নির্মিত অসীম সামিট ফাংশন ব্যবহার করতে পারবেন না।
  • আপনার কোড অবশ্যই যুক্তিসঙ্গত পরিমাণে কার্যকর করতে হবে (আমার মেশিনে <20 সেকেন্ড)
  • আপনি ধরে নিতে পারেন ইনপুটটি 0 এর চেয়ে বেশি তবে আপনার ভাষার উচ্চতর সীমা থেকে কম।
  • এটি স্ট্যান্ডার্ড রিটার্ন / আউটপুট কোনও ফর্ম হতে পারে।

আপনি ওল্ফ্রাম | এ আপনার ফলাফল যাচাই করতে পারেন আলফা (আপনি লিঙ্কযুক্ত ক্যোয়ারিতে নিজের উদ্দেশ্যযুক্ত ইনপুটটি সংযুক্ত করে যাচাই করতে পারেন)।

উদাহরণ

(আসুন ফাংশন কল f)

f(1) -> 2.18273
f(50) -> 6.39981
f(10000) -> 6.39981
f(2.71828) -> 5.58040
f(3.14159) -> 5.92228

আপনার উত্তরটি সঠিক হওয়া উচিত ±.0001


আপনার ভাষার জন্য @ থমাসকওয়া সর্বাধিক। আমি এটিকে প্রশ্নের সাথে যুক্ত করব।
অ্যাডিসন ক্রম্প

ওল্ফ্রাম আলফা সর্বশেষ এক রাউন্ডে বলেছেন5.92228
নীল

@ নীল oo ঠিক আছে, অবশ্যই ভুল টাইপ করা উচিত। ধন্যবাদ!
অ্যাডিসন ক্রম্প

7
আমি টিআই-বেসিকের সংক্ষিপ্ততম বৈধ উত্তরের জন্য 200 জনকে পুরস্কার দেব যা 100% গতিতে WabbitEmu তে <20 সেকেন্ডের মধ্যে কার্যকর করে।
lirtosiast

@ লিরিটোসিস্ট আপনি যদি এখনও এই অনুগ্রহটি অনুসরণ করতে চান তবে তার পরিবর্তে আপনার এটি এখানে পোস্ট করা উচিত ।
অ্যাডিসন ক্রম্প 0

উত্তর:


10

জুলিয়া, 79 77 38 বাইট

I->sum(x->(e/x)^x,0:1e-5:min(I,9))/1e5

এটি একটি বেনামে ফাংশন যা একটি সংখ্যার মান গ্রহণ করে এবং একটি ভাসা ফেরত দেয়। এটি কল করতে, এটি একটি ভেরিয়েবলের জন্য বরাদ্দ করুন।

নীচের সূত্রের দ্বারা প্রদত্ত আনুমানিক প্রায় অনুমানের জন্য এখানে একটি সঠিক রিমন যোগফল ব্যবহার করা হবে:

ক্ষীর

আমাদের ক্ষেত্রে, a = 0 এবং b = I , ইনপুট। আমরা একীকরণের অঞ্চলটিকে n = 10 5 বিযুক্ত অংশে বিভক্ত করি, তাই ∆ x = 1 / n = 10 -5 । যেহেতু এটি যোগফলের সাথে একটি ধ্রুবক সম্পর্কিত, আমরা এটি যোগফলের বাইরে টানতে পারি এবং প্রতিটি বিন্দুতে ফাংশন মূল্যায়নের যোগফল যোগ করতে পারি এবং n দ্বারা ভাগ করে নিতে পারি ।

ফাংশনটি আশ্চর্যজনকভাবে ভাল আচরণ করা হয়েছে (ম্যাথামেটিকার প্লট):

mathematicaplot

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

অবহেলিত কোড:

function g(I)
    # Define the range over which to sum. We truncate the input
    # at 9 and subdivide the region into 1e5 pieces.
    range = 0:1e-5:min(I,9)

    # Evaluate the function at each of the 1e5 points, sum the
    # results, and divide by the number of points.
    return sum(x -> (e / x)^x, range) / 1e5
end

ডেনিসের জন্য 39 বাইট সংরক্ষণ করা!


এটিও কি সমান নয়: $ rac frac {t \ Sum_ {k = 0} ^ {n} (f (a + কেটি) + f (a + (কে + 1) টি))} {2} $? এটি ব্যবহারের জন্য একটি অ্যালগরিদমকে কিছুটা সহজ বলে মনে হচ্ছে।
অ্যাডিসন ক্র্যাম্প

10^4হিসাবে লেখা যেতে পারে 1e4
রেনার পি।

@ ভোটটোক্লোজ একটি ভিন্ন পদ্ধতির গ্রহণ করে শেষ হয়েছে
অ্যালেক্স এ।

@RainerP। হেই, ঠিক আছে। ধন্যবাদ।
অ্যালেক্স এ।

ইন্টিগ্রালের অ্যাসিপটোটিক মান $ 6.39981 ... $ $ $ 6.39981 ... - 10 ^ {- 4} $ মানটি প্রথমে $ I = 7.91399 ... at এ অর্জন করেছে, যাতে আপনি অল্প সময় বাঁচাতে $ 9 $ এর পরিবর্তে $ 8 at এ ছাঁটাই করতে পারেন।
এরিক টাওয়ার

9

জেলি, 20 19 17 বাইট

ð«9×R÷øȷ5µØe÷*×ḢS

এটি @ অ্যালেক্সা এর উত্তর থেকে 9 টি ট্রিকের উপর চালাক ছাঁটাই ধার করে এবং সম্পর্কিত ইন্টিগ্রালটি অনুমান করার জন্য একটি সঠিক রিমন অঙ্ক ব্যবহার করে ।

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

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

ð«9×R÷øȷ5µØe÷*×ḢS  Main link. Input: I

      øȷ5          Niladic chain. Yields 1e5 = 100,000.

ð                  Dyadic chain. Left argument: I. Right argument: 1e5.
 «9                Compute min(I, 9).
   ×               Multiply the minimum with 1e5.
    R              Range; yield [1, 2, ..., min(I, 9) * 1e5] or [0] if I < 1e-5.
     ÷             Divide the range's items by 1e5.
                   This yields r := [1e-5, 2e-5, ... min(I, 9)] or [0] if I < 1e-5.

         µ         Monadic chain. Argument: r
          Øe÷      Divide e by each element of r.
             *     Elevate the resulting quotients to the corresponding elements,
                   mapping t -> (e/t) ** t over r.
                   For the special case of r = [0], this yields [1], since
                   (e/0) ** 0 = inf ** 0 = 1 in Jelly.
              ×Ḣ   Multiply each power by the first element of r, i.e., 1e-5 or 0.
                S  Add the resulting products.

আহ সব ঠিক আছে. বাম হাতের নিয়ম এটি এপি ক্যালকুলাস ক্লাসে কীভাবে উল্লেখ করা হয়। : পি কুলিও।
অ্যাডিসন ক্রম্প 0

আমি এই নামের সাথে পরিচিত নই, তবে বাম-হাতের নিয়মটি সম্ভবত বাম প্রান্তটি ব্যবহার করে। আমার কোডটি সঠিক ব্যবহার করে।
ডেনিস

2
(~ -.-) handed এটি হ্যান্ড রুলের কিছু রূপ। এক্সডি
অ্যাডিসন ক্রম্প 0

4

ES7, 78 বাইট

i=>[...Array(n=2e3)].reduce(r=>r+Math.exp(j+=i)/j**j,0,i>9?i=9:0,i/=n,j=-i/2)*i

এটি 2000 আয়তক্ষেত্রগুলির সাথে আয়তক্ষেত্র নিয়ম ব্যবহার করে, যা (কমপক্ষে উদাহরণগুলির জন্য) যথেষ্ট সঠিক উত্তর দেয় বলে মনে হয়, তবে প্রয়োজনে নির্ভুলতা সহজেই বাড়ানো যেতে পারে। এটি 9 টি ট্রিক ব্যবহার করতে হবে অন্যথায় নির্ভুলতা বড় মানগুলির জন্য বাদ যায় drops

73 বাইট সংস্করণ যা প্রস্থের আয়তক্ষেত্র ব্যবহার করে ~ 0.001 সুতরাং এটি it 700 এর উপরে কাজ করে না কারণ ম্যাথ.এক্সপি ইনফিনিটি হিট করে:

i=>[...Array(n=i*1e3|0)].reduce(r=>r+Math.exp(j+=i)/j**j,0,i/=n,j=-i/2)*i

2

গল্ফ্লুয়া , ৮৩ টি চর

আমি এটি স্বীকার করব: min(I,9)অ্যালেক্স যে কৌশলটি নির্ধারণ করেছিল তা নির্ধারণ করতে আমার কিছুটা সময় লেগেছিল ইচ্ছামত উচ্চতর সংখ্যার গণনা করার কারণ তখন অবিচ্ছেদ্য রূপান্তরিত হয়েছিল।

\f(x)~M.e(x)/x^x$b=M.mn(I.r(),9)n=1e6t=b/n g=0.5+f(b/2)~@k=1,n-1g=g+f(k*t)$I.w(t*g)

একটি অবারিত লুয়া সমতুল্য হবে

function f(x)
   return math.exp(x)/x^x
end

b=math.min(io.read("*n"),9)
n=1e6
t=b/n
g=0.5+f(b/2)

for k=1,n-1 do
   g=g+f(k*t)
end
io.write(t*g)

এবং "কিছুক্ষণ" এর অর্থ আমার প্রায় 10 মিনিট। এবং এটি সম্পূর্ণরূপে ছিল কারণ আমি আসলে অ্যালেক্সের মন্তব্যটি পড়িনি যা এটি ব্যাখ্যা করে, কেবল কোডটিতে দেখেছিল।
কাইল কানোস

2

পাইথন 2, 94 76 বাইট

আমাকে 18 বাইট বাঁচানোর জন্য @ ডেনিসকে ধন্যবাদ!

lambda I,x=1e5:sum((2.71828/i*x)**(i/x)/x for i in range(1,int(min(I,9)*x)))

টেস্টকেসগুলি দিয়ে এটি অনলাইনে ব্যবহার করে দেখুন!

আনুমানিক জন্য আয়তক্ষেত্র পদ্ধতি ব্যবহার করে। 0.0001 এর আয়তক্ষেত্র প্রস্থ ব্যবহার করা যা আমাকে দাবী করার যথাযথতা দেয়। খুব বড় ইনপুট সহ মেমরির ত্রুটিগুলি রোধ করতে আরও 9 টি ইনপুট কেটে ফেলা হয়।


2

পার্ল 6, 90 55 বাইট

{my \x=1e5;sum ((e/$_*x)**($_/x)/x for 1..min($_,9)*x)}

ব্যবহার

my &f = {my \x=1e5;sum ((e/$_*x)**($_/x)/x for 1..min($_,9)*x)}

f(1).say;       # 2.1827350239231
f(50).say;      # 6.39979602775846
f(10000).say;   # 6.39979602775846
f(2.71828).say; # 5.58039854392816
f(3.14159).say; # 5.92227602782184

এটা দেরি হয়ে গেছে এবং আমার ঘুমানো দরকার, আমি দেখতে পাচ্ছি যে আগামীকাল আমি এটিকে আরও ছোট করতে পারি কিনা।

সম্পাদনা: @ ডেনারএফির পদ্ধতিটি দেখার পরে এটি বেশ খানিকটা খাটো করার জন্য পরিচালিত।


1
আমি এটি এখানে কীভাবে বলি পছন্দ করি t : ডি
অ্যাডিসন ক্রম্প

2

পাইথ, 34 29 বাইট

@ ডেনিসের সাহায্যে 5 বাইট সংরক্ষণ করা হয়েছে!

J^T5smcc^.n1d^ddJmcdJU*hS,Q9J

এটি অনলাইন চেষ্টা করুন!

ব্যাখ্যা

আমার পাইথনের উত্তরের মতো একই অ্যালগরিদম ।

J ^ T5smcc ^ .n1d ^ ddJmcdJU * hS, Q9J # Q = ইনপুট
জে ^ টি 5 # সেট জে তাই আয়তক্ষেত্র প্রস্থ * 10 ^ 5
                       এইচএস, কিউ 9 # টি কাটা ইনপুট আরও 9
                 এমসিডিজেউ / জে # জে পদক্ষেপে শূন্য থেকে ইনপুট পর্যন্ত range
     mcc ^ .n1d ^ ddJ # তালিকার প্রতিটি উপাদানের জন্য ক্ষেত্রের গণনা করুন
    s # সমস্ত ক্ষেত্র এবং আউটপুট ফলাফলের যোগফল


আপনি অ্যাসাইন Jকরে ^T5এবং বিভাগ দ্বারা বিভাজন দ্বারা অদলবদল করে কয়েক বাইট সংরক্ষণ করতে পারেন J। এছাড়াও, কাটা কাটা দিয়েও করা যায় hS,Q9
ডেনিস

@ ডেনিস ধন্যবাদ, সে সম্পর্কে ভাবেননি। এছাড়াও বাছাইয়ের কৌশলটি দুর্দান্ত, আমি সবেমাত্র min^^
ডেনকার

2

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

9hX<t1e6XK:K/*ttZebb^/sK/*

এটি একটি রিমন যোগফল হিসাবে অবিচ্ছেদ্য প্রায়। অ্যালেক্সের যুক্তি অনুসারে, আমরা আনুমানিক 9 এ সংহতকরণের ব্যবধানটি কেটে ফেলতে পারি কারণ ফাংশনের মানগুলি এর বাইরে খুব ছোট।

ফাংশনের সর্বাধিক মান 3 এরও কম, সুতরাং প্রায় 1e-5 এর একটি পদক্ষেপ পছন্দসই নির্ভুলতা পেতে যথেষ্ট হওয়া উচিত। সুতরাং সর্বোচ্চ ইনপুট 9 এর জন্য আমাদের প্রায় 1e6 পয়েন্ট প্রয়োজন।

এটি কোনও ইনপুট মানের জন্য অনলাইন সংকলকটিতে প্রায় 1.5 সেকেন্ড সময় নেয়।

এটি অনলাইন চেষ্টা করুন !

9hX<         % input number, and limit to 9
t            % duplicate
1e6XK:       % generate vector [1,2,...,1e6]. Copy 1e6 to clipboard K
K/*          % divide by 1e6 and multiply by truncated input. This gives 
             % a vector with 1e6 values of x from 0 to truncated input
ttZe         % duplicate twice. Compute exp(x)
bb^          % rotate top three elements of stack twice. Compute x^x
/            % divide to compute exp(x)/x^x
s            % sum function values
K/*          % multiply by the step, which is the truncated input divided
             % by 1e6

2

ভিটসি, 39 বাইট

ভেবেছিলাম আমি নিজের অবদানও দিতে পারি। ¯ \ _ (ツ) _ / ¯ এটি ইন্টিগ্রালগুলির বাম-হাতের রিমন সামের অনুমান ব্যবহার করে।

D9/([X9]1a5^D{/V}*0v1{\[EvV+DDv{/}^+]V*

D9/([X9]               Truncation trick from Alex A.'s answer.
D                      Duplicate input.
 9/                    Divide it by 9.
   ([  ]               If the result is greater than 0
     X9                Remove the top item of the stack, and push 9.

1a5^D{/V}*0v0{         Setting up for the summation.
1                      Push 1.
 a5^                   Push 100000.
    D                  Duplicate the top item of the stack.
     {                 Push the top item of the stack to the back.
      /                Divide the top two items of the stack. (1/100000)
       V               Save it as a global variable.
                       Our global variable is ∆x.
        }              Push the bottom item of the stack to the top.
         *             Multiply the top two items.
                       input*100000 is now on the stack.
          0v           Save 0 as a temporary variable.
            0          Push 1.
             {         Push the bottom item of the stack to the top.
                       input*100000 is now the top of the stack.

\[EvV+DDv{/}^+]        Summation.
\[            ]        Loop over this top item of the stack times.
                       input*100000 times, to be exact.
  E                    Push Math.E to the stack.
   v                   Push the temporary variable to the stack.
                       This is the current value of x.
    V+                 Add ∆x.
      DD               Duplicate twice.
        v              Save the temporary variable again.
         {             Push the top item of the stack to the back.
          /            Divide the top two items.
                       e/x
           }           Push the top item back to the top of the stack.
            ^          Put the second to top item of the stack to the power of the top item.
                       (e/x)^x
             +         Add that to the current sum.

V*                     Multiply by ∆x

এটি স্ট্যাকের শীর্ষে যোগফল ছেড়ে যায়। Nআপনাকে ফলাফলটি দেখানোর জন্য নীচের অনলাইন লিঙ্কটির চেষ্টা করে দেখুন ।

অনলাইনে চেষ্টা করে দেখুন!

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