স্থানীয় ম্যাক্সিমা এবং মিনিমা খুঁজুন


14

সংজ্ঞা

প্রদত্ত ফাংশনের ম্যাক্সিমা এবং মিনিমা হল প্রদত্ত পরিসরের মধ্যে অন্যথায় ফাংশনের পুরো ডোমেনের মধ্যে ফাংশনের বৃহত্তম এবং ক্ষুদ্রতম মান।

চ্যালেঞ্জ

চ্যালেঞ্জটি হ'ল আপনার পছন্দের যে কোনও পদ্ধতি ব্যবহার করে প্রদত্ত বহুপদী ফাংশনের স্থানীয় ম্যাক্সিমা এবং মিনিমা খুঁজে পাওয়া । চিন্তা করবেন না, আমি চ্যালেঞ্জটি ব্যাখ্যা করার এবং যথাসম্ভব সহজ রাখার জন্য যথাসাধ্য চেষ্টা করব।

পাওয়ার ইনপুট হ্রাস বা বর্ধমান ক্রমে ( ইনপুট ) একক ভেরিয়েবল বহুত্বরের সমস্ত সহগকে ইনপুটটিতে অন্তর্ভুক্ত করবে। উদাহরণ স্বরূপ,

  • [3,-7,1] উপস্থাপন করবে 3x2 - 7x + 1 = 0
  • [4,0,0,-3] উপস্থাপন করবে 4x3-3=0.

কীভাবে সমাধান করবেন (ডেরাইভেটিভস ব্যবহার করে)?

এখন, ধরা যাক আমাদের ইনপুটটি [1,-12,45,8]যা ফাংশন ছাড়া কিছুই নয় ।x3 - 12x2 + 45x + 8

  1. প্রথম কাজটি হ'ল সেই ফাংশনের ডেরাইভেটিভ সন্ধান করা। যেহেতু এটি একটি বহুপদী ফাংশন, তাই এটি করা সহজ কাজ।

    এর ডেরাইভেটিভ হয় । উপস্থিত কোন ধ্রুবক পদগুলি কেবল গুণিত হয়। এছাড়াও, যদি শর্তাদি যোগ / বিয়োগ করে থাকে তবে তাদের ডেরাইভেটিভগুলিও যথাক্রমে যুক্ত বা বিয়োগ করা হয়। মনে রাখবেন যে কোনও ধ্রুবক সংখ্যাসূচক মানের ডেরিভেটিভ শূন্য হয়। এখানে কিছু উদাহরণ আছে:xnn*xn-1xn

    • x3 -> 3x2
    • 9x4 -> 9*4*x3 = 36x3
    • -5x2 -> -5*2*x = - 10x
    • 2x3 - 3x2 + 7x -> 6x2 - 6x + 7
    • 4x2 - 3 -> 8x - 0 = 8x
  2. এখন নতুন বহুপদীকে শূন্যের সমান করে সমীকরণটি সমাধান করুন এবং কেবলমাত্র x এর অবিচ্ছেদ্য মানগুলি পান get

  3. এক্স এর সেই মানগুলি মূল ফাংশনে রাখুন এবং ফলাফলগুলি ফিরিয়ে দিন। যে আউটপুট করা উচিত

উদাহরণ

আসুন আমরা আগে উল্লিখিত উদাহরণটি গ্রহণ করি, অর্থাৎ [1,-12,45,8],।

  • ইনপুট: [1,-12,45,8]
  • ফাংশন: x3 - 12x2 + 45x + 8
  • ডেরাইভেটিভ -> 3x2 - 24x + 45 + 0 -> [3,-24,45]
  • সমীকরণ সমাধান করা , আমরা পাই বা পাই ।3x2 - 24x + 45 = 0x = 3x = 5
  • এখন ফাংশন লাগাতে x = 3এবং x = 5মধ্যে, আমরা মান পেতে (62,58)
  • আউটপুট -> [62,58]

অনুমিতি

  1. ধরে নিন যে সমস্ত ইনপুট সহগগুলি পূর্ণসংখ্যা হয় । তারা ক্ষমতার ক্রমবর্ধমান বা হ্রাস করতে পারে।

  2. ইনপুটটিকে কমপক্ষে একটি 2-ডিগ্রি বহুবচন হিসাবে ধরে নিন । যদি বহুপথের কোনও পূর্ণসংখ্যার সমাধান না থাকে তবে আপনি যে কোনও কিছু দিতে পারেন।

  3. ধরে নিন যে চূড়ান্ত ফলাফলটি কেবল পূর্ণসংখ্যা হবে।

  4. আপনি যে কোনও ক্রমে ফলাফল মুদ্রণ করতে পারেন। ইনপুট পলিনোমিয়ালের ডিগ্রি 5 এর বেশি হবে না, যাতে আপনার কোড এটি পরিচালনা করতে পারে।

  5. ইনপুটটি বৈধ হবে যাতে এক্স এর সমাধানগুলি স্যাডল পয়েন্ট না হয়।

এছাড়াও, আপনি ডেরাইভেটিভ পদ্ধতিতে এটি করতে বাধ্য হন না। আপনি নিজের পছন্দ মতো যে কোনও পদ্ধতি ব্যবহার করতে পারেন।

নমুনা ইনপুট এবং আউটপুট

[2,-8,0] -> (-8)
[2,3,-36,10] -> (91,-34)
[1,-8,22,-24,8] -> (-1,0,-1) 
[1,0,0] -> (0)

স্কোরিং

এটি তাই সংক্ষিপ্ততম কোড জিততে পারে।


1
যদি আমি সঠিকভাবে বুঝতে পারি: উদাহরণস্বরূপ " সমাধান সমীকরণ " পদক্ষেপটি আপনার এই পূর্ববর্তী চ্যালেঞ্জ আংশিক হবে ? এছাড়াও, পদক্ষেপ " এখন x = 3 এবং x = 5 ফাংশনে রাখার " অর্থ " ফাংশন " এ মূল ফাংশন এবং " ডেরিভেটিভ " এ ফাংশনটি নয় , তাই না?
কেভিন ক্রুইজসেন 16

1
আই / ও 3 নমুনার জন্য, আমি পাচ্ছি (-1, 0, 1), যা আমি বিশ্বাস করি যে আসল সঠিক উত্তর ... যদিও নিশ্চিত নয়। আপনি যদি আমার সাথে একমত নন তবে আমাকে আড্ডায় পিপ্স দিবেন।
হাইপারনিউটারিনো

1
The input will be valid so that the solutions of x are not saddle points, [1,0,0,3]কেসটি একটি স্যাডল পয়েন্ট দেয় বলে মনে হচ্ছে।
জংহওয়ান মিন

1
@ জাংহওয়ানমিন আহ নিয়মটি তৈরি হওয়ার আগে এই উদাহরণটি যুক্ত হয়েছিল। এখন সরানো হয়েছে।
মনিষ কুণ্ডু

1
x^3 - 12x^2 + 45x + + 8 = 0 , যদিও ব্যক্তিগতভাবে আমি পছন্দ যদি আপনি শব্দটি লিখতে f(x)=x^3-12x^2+45x+8ছাড়া =0কারণ =0জানার জন্য না যেহেতু আমরা একটি ফাংশন সাথে ডিল করা হয় একটি সমীকরণ সমাধানে না।
ওয়েজুন চাউ

উত্তর:


4

জেলি , 20 বাইট

ASŒRḅ@Ðḟ
J’U×µṖÇḅ@€³

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

ব্যাখ্যা

ASŒRḅ@Ðḟ     Helper Function; find all integer solutions to a polynomial
             All integer roots are within the symmetric range of the sum of the absolute values of the coefficients
A            Absolute Value (Of Each)
 S           Sum
  ŒR         Symmetric Range; `n -> [-n, n]`
      Ðḟ     Filter; keep elements where the result is falsy for:
    ḅ@       Base conversion, which acts like the application of the polynomial
J’U×µṖÇḅ@€³  Main Link
J                             Range of length
 ’                    Lowered
  U          Reversed
   ×         Multiplied with the original list (last value is 0)
    µ        Begin new monadic chain
     Ṗ       Pop; all but the last element
      Ç      Apply last link (get all integer solutions of the derivative)
       ḅ@€³  Base conversion of the polynomial into each of the solutions; apply polynomial to each solution of the derivative.

এই প্রোগ্রামে সাহায্যকারী ফাংশন জনাব Xcoder এর উত্তর থেকে নিয়ে যাওয়া হয় এখানে যা লুইস এর উত্তর বন্ধ ভিত্তি করে ছিল এখানে


@ জংহওয়ানমিন আমি ওপিকে এটি নির্দেশ করব। যে বিবৃতি যে কোন জিন পয়েন্ট হতে হবে কারণ এ বহুপদী ডেরিভেটিভ সরাসরি লঙ্ঘন এর 3হয় 0সম্পাদন করা উহু আপনি ইতিমধ্যে nvm শুধু মন্তব্য তারপর upvoted হয়নি
HyperNeutrino

3

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

পাওয়ার ক্রম বাড়ানোর ক্ষেত্রে সহগকে নিয়ে যায়।

a=>(g=x=>x+k?(A=g(x-1),h=e=>a.reduce((s,n,i)=>s+n*(e||i&&i--)*x**i,0))()?A:[h(1),...A]:[])(k=Math.max(...a.map(n=>n*n)))

পরীক্ষার মামলা

মন্তব্য

a => (                        // given the input array a[]
  g = x =>                    // g = recursive function checking whether x is a solution
    x + k ? (                 //   if x != -k:
      A = g(x - 1),           //     A[] = result of a recursive call with x - 1
      h = e =>                //     h = function evaluating the polynomial:
        a.reduce((s, n, i) => //       for each coefficient n at position i:
          s +                 //         add to s
          n                   //         the coefficient multiplied by
          * (e || i && i--)   //         either 1 (if e = 1) or i (if e is undefined)
          * x**i,             //         multiplied by x**i or x**(i-1)
          0                   //         initial value of s
        )                     //       end of reduce()
      )() ?                   //     if h() is non-zero:
        A                     //       just return A[]
      :                       //     else:
        [h(1), ...A]          //       prepend h(1) to A[]
    :                         //   else:
      []                      //     stop recursion
  )(k = Math.max(             // initial call to g() with x = k = maximum of
    ...a.map(n => n * n)      // the squared coefficients of the polynomial
  ))                          // (Math.abs would be more efficient, but longer)

1
0,0,1(x ^ 2 = 0) এর জন্য ব্যর্থ
17-18 এ betseg

@ বিটসেগ এই প্রতিবেদন করার জন্য ধন্যবাদ। সংশোধন করা হয়েছে।
আর্নল্ড

3

জুলিয়া 0.6 ( Polynomialsপ্যাকেজ সহ), 57 বাইট

using Polynomials
x->map(Poly(x),roots(polyder(Poly(x))))

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

ক্রমবর্ধমান ক্রমে সহগ গ্রহণ করে, অর্থাৎ প্রথম ইনপুটটি ধ্রুবক শব্দ।

উদাহরণ রান:

julia> using Polynomials

julia> g = x -> map(Poly(x), roots(polyder(Poly(x))))
(::#1) (generic function with 1 method)

julia> g([8,45,-12,1])
2-element Array{Float64,1}:
 58.0
 62.0

3

জাভা 8, 364 239 227 226 218 বাইট

a->{int l=a.length,A[]=a.clone(),s=0,i,r,f=l,p;for(;f>0;A[--f]*=f);for(int n:A)s+=n<0?-n:n;for(r=~s;r++<s;){for(p=0,i=f=1;i<l;f*=r)p+=A[i++]*f;if(p==0){for(f=i=0;i<l;f+=a[i++]*Math.pow(r,p++));System.out.println(f);}}}

আমার এই উত্তর থেকে একই কার্যকারিতা ব্যবহার করে।

-8 বাইটস @ অলিভিগ্রগ্রোয়ারকে ধন্যবাদ বিপরীত ক্রমে অ্যারে

ব্যাখ্যা:

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

a->{                  // Method with integer-varargs parameter and integer return-type
  int l=a.length,     //  The length of the input-array
      A[]=a.clone(),  //  Copy of the input-array
      s=0,            //  Sum-integer, starting at 0
      i,              //  Index-integer
      r,              //  Range-integer
      f=l,            //  Factor-integer, starting at `l`
      p;              //  Polynomial-integer
  for(;f>0;           //  Loop over the copy-array
    A[--f]*=f);       //   And multiply each value with it's index
                      //   (i.e. [8,45,-12,1] becomes [0,45,-24,3])
  for(int n:A)        //  Loop over this copy-array:
    s+=n<0?-n:n;      //   And sum their absolute values
  for(r=~s;r++<s;){   //  Loop `r` from `-s` up to `s` (inclusive) (where `s` is the sum)
    for(p=0,          //   Reset `p` to 0
        i=f=1;        //   and `f` to 1
                      //   (`i` is 1 to skip the first item in the copy-array)
        i<l;          //   Inner loop over the input again, this time with index (`i`)
        f*=r)         //     After every iteration: multiply `f` with the current `r`
      p+=             //    Sum the Polynomial-integer `p` with:
         A[i++]       //     The value of the input at index `i`,
               *f;}   //     multiplied with the current factor `f`
    if(p==0){         //   If `p` is now 0:
      for(f=i=0;      //    Use `f` as sum, and reset it to 0
          i<l;        //    Loop over the input-array
        f+=a[i++]*Math.pow(r,p++));
                      //     Fill in `r` in the parts of the input-function
      System.out.println(f);}}}
                      //    And print the sum

2
1,0,0(x ^ 2 = 0) এর জন্য ব্যর্থ
'17 এ বেটসেজ

@ বিটসেগ ধন্যবাদ! স্থির এবং গল্ফড
কেভিন ক্রুইজসেন

1
আপনি বিপরীত অনুক্রমে ইনপুট গ্রহণ করা উচিত (এটা স্পষ্টভাবে অনুমোদিত হয়) এই মত আপনার গণনা কমাতে: int... ,i, ...; for(;f>0;)A[--f]*=f;। আমি ভুল না হলে এটি আপনাকে কমপক্ষে 4 বাইট বাঁচাতে হবে। আপনি যদি এটি করেন তবে আপনার সমস্ত অ্যাক্সেসগুলি ইনপুটটিতে উল্টানো নিশ্চিত করুন।
অলিভিয়ের গ্রাগোয়ার

@ অলিভিয়ারগ্রোওয়ের ধন্যবাদ, 8 টি বাইট সংরক্ষিত!
কেভিন ক্রুইজসেন





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