अनुमानित आर्सेनिक


9

लक्ष्य सरल है: बाइट्स की सबसे कम संख्या में, xसमीकरण sin(x) = -mxको दिए गए इनपुट के लिए एक नॉनज़रो वास्तविक समाधान आउटपुट m

विशेष विवरण:

  • आपका उत्तर 3 महत्वपूर्ण आंकड़ों के लिए सही होना चाहिए।
  • आप तुच्छ समाधान के अलावा किसी भी वास्तविक समाधान का उत्पादन कर सकते हैं x=0। आप मान सकते हैं mकि कम से कम एक समाधान मौजूद है। आप भी मान सकते हैं m!=0

ढाल वंश का उपयोग करते हुए एक स्पष्ट रूप से उप-दांतेदार अजगर समाधान :

from math import *
from random import *
a=x=0.001
m = 5.
def dE(x):return 2*(sin(x)+m*x+1)*(cos(x)+m)
for i in xrange(1000): x-=dE(x)*a
print x

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

-0.25 -> ±2.4746
-0.1  -> ±2.8523 or ±7.0682 or ±8.4232
 0.2  -> ±4.1046 or ±4.9063 

1
यहां सबसे अच्छा तरीका एक निश्चित मूल्य प्रिंट करना है, हालांकि आपको यह निर्दिष्ट करना चाहिए कि कितने दशमलव स्थानों की आवश्यकता है। मैं एक इनपुट पैरामीटर सहित सुझाव देना चाहूंगा, जैसे aहल करना sin(x)=-ax। कृपया यह न कहें कि "आपको वास्तव में इसकी गणना करनी है", क्योंकि उस तरह की आवश्यकताएं काम करने के लिए बहुत अस्पष्ट हैं।
xnor

इसके अलावा, x=0एक तुच्छ समाधान है। आपको निर्दिष्ट करना चाहिए कि आपको कौन सा समाधान चाहिए।
xnor

नॉनज़रो सॉल्यूशन की गारंटी के लिए आपको मी पर कुछ सीमाएँ चाहिए।
xnor

m=0समाधान ( x=kπपूर्णांक के लिए k) है। जिन मूल्यों का mगैर-तुच्छ वास्तविक समाधान नहीं है, वे वे हैं जो बहुत दूर हैं 0
पीटर टेलर

1
क्या आप केवल वास्तविक-मूल्यवान समाधानों की तलाश कर रहे हैं या जटिल-मूल्यवान समाधानों की भी अनुमति है?
मीलों

जवाबों:


1

आइस्ड : 32 28 बाइट्स

न्यूटन के पुनरावृत्ति का उपयोग eration से शुरू करना:

{:x-{sinx+$1*x}/{cosx+$1}:}:::pi

इस तर्क को पारित किया जाता है $1, जिसे इस तरह से फ़ाइल से लिया जा सकता है:

ised --l inputfile.txt 'code'

थोड़ा कम स्थिर, लेकिन छोटा संस्करण:

{:{x-tanx}/{1+$1/cosx}:}:::pi

कभी-कभी यह पुनरावृत्ति सीमा को चेतावनी देता है लेकिन स्थितियों को देखते हुए सटीकता ठीक लगती है।

यूनिकोड संस्करण (एक ही बायटेकाउंट):

{λ{x-tanx}/{1+$1/cosx}}∙π

4 से शुरू होकर एक और बाइट काटता है और समान मूल्यों में परिवर्तित होता है

{λ{x-tanx}/{1+$1/cosx}}∙4

8

हास्केल, 34 बाइट्स

f m=until(\x->sin x< -m*x)(+1e-3)0

x0 से 0.001 तक गिनती होती है sin(x)< -m*x

ऊपुत उदाहरण

f -0.2 ->   2.595999999999825
f -0.1 ->   2.852999999999797
f  0.0 ->   3.141999999999765
f  0.1 ->   3.4999999999997256
f  0.2 ->   4.1049999999997056

किस बारे में m=-0.1?
पीटर टेलर

@PeterTaylor ध्यान दें कि यदि आवश्यक हो, लेकिन यह देता है 2.853, जो सही लगता है।
xnor

बेशक, वे दोनों अजीब कार्य कर रहे हैं तो अगर वहाँ एक समाधान है एक सकारात्मक समाधान है। रवींद्र।
पीटर टेलर

आप एक चुनौती का जवाब क्यों देंगे जो आप जानते हैं कि अस्पष्ट है?
मेगो

2

गणितज्ञ, 28 बाइट्स

x/.FindRoot[Sinc@x+#,{x,1}]&

प्रारंभिक अनुमान से एक संख्यात्मक जड़ की खोज करता है x=1। परीक्षण के मामलों:

% /@ {-0.25, -0.1, 0.2}
(* {2.47458, 2.85234, 4.10462} *)

1

सी, 99 बाइट्स

#include<math.h>
float f(float m){float x=1,y;do{x=(y=sin(x)+m*x)+x;}while(fabs(y)>1e-4);return x;}

ungolfed:

#include<math.h>
float f(float m){
 float x=1,y;
 do{x=(y=sin(x)+m*x)+x;}while(fabs(y)>1e-4);
 return x;
}

1

MATL , 17 बाइट्स

`@2e3/tY,wG_*>}4M

यह सकारात्मक वास्तविक अक्ष पर रैखिक खोज का उपयोग करता है, इसलिए यह धीमा है। सभी परीक्षण के मामले ऑनलाइन संकलक में 1 मिनट के भीतर समाप्त हो जाते हैं।

इसे ऑनलाइन आज़माएं!

व्याख्या

`         % Do...while
  @       %   Push iteration index, starting at 1
  2e3/    %   Divide by 2000
  t       %   Duplicate
  Y,      %   Sine
  w       %   Swap
  G_*     %   Multiply by minus the input
  >       %   Does the sine exceed that? If so, next iteration
}         % Finally (execute after last iteration, before exiting loop)
   4M     %   Push input of sine function again
          % Implicit end
          % Implicit display

1

सी ++ 11, 92 91 बाइट्स

-1 बाइट का उपयोग करने के लिए #import

#import<cmath>
using F=float;F f(F m,F x=1){F y=sin(x)+m*x;return fabs(y)>1e-4?f(m,x+y):x;}

0

पायथन 2, 81 78 बाइट्स

फ़िक्सपॉइंट पुनरावृत्ति

पुनरावर्ती लंबोदर के रूप में

from math import*
f=lambda m,x=1:abs(sin(x)+m*x)>1e-4and f(m,sin(x)+m*x+x)or x

लूप के रूप में (81 बाइट्स):

from math import*
m=input()
x=1
while abs(sin(x)+m*x)>1e-4:x=sin(x)+m*x+x
print x

0

गणितज्ञ, 52 बाइट्स

NSolve[Sin@x==-x#,x,Reals][[;;,1,2]]~DeleteCases~0.&

अनाम फ़ंक्शन। एक संख्या को इनपुट के रूप में लेता है, और आउटपुट के रूप में संख्याओं की एक सूची देता है। बस NSolveअनुमानित समीकरण को हल करने के लिए उपयोग करता है।


यदि आप के Sin@x==-x#साथ प्रतिस्थापित Sinc@x==-#करते हैं तो आप दूर कर सकते हैं~DeleteCases~0.

0

Axiom, 364 बाइट्स

bisezione(f,a,b)==(fa:=f(a);fb:=f(b);a>b or fa*fb>0=>"fail";e:=1/(10**(digits()-3));x1:=a;v:=x2:=b;i:=1;y:=f(v);if(abs(y)>e)then repeat(t:=(x2-x1)/2.0;v:=x1+t;y:=f(v);i:=i+1;if i>999 or t<=e or abs(y)<e then break;if fb*y<0 then(x1:=v;fa:=y)else if fa*y<0 then(x2:=v;fb:=y)else break);i>999 or abs(y)>e=>"fail";v)
macro g(m) == bisezione(x+->(sin(x)+m*x), 0.1, 4.3)

ungolf

bisezione(f,a,b)==
    fa:=f(a);fb:=f(b)
    a>b or fa*fb>0=>"fail"
    e:=1/(10**(digits()-3))
    x1:=a;v:=x2:=b;i:=1;y:=f(v)
    if(abs(y)>e) then
      repeat
        t:=(x2-x1)/2.0;v:=x1+t;y:=f(v);i:=i+1
        if i>999 or t<=e or abs(y)<e then break
        if      fb*y<0 then(x1:=v;fa:=y)
        else if fa*y<0 then(x2:=v;fb:=y)
        else break
    i>999 or abs(y)>e=>"fail"
    v

macro g(m) == bisezione(x+->(sin(x)+m*x), 0.1, 4.3)

परिणाम

(3) -> g(0.2)
   AXIOM will attempt to step through and interpret the code.
   (3)  4.1046198505 579058527
                                                              Type: Float
(4) -> g(-0.1)
   (4)  2.8523418944 500916556
                                                              Type: Float
(5) -> g(-0.25)
   (5)  2.4745767873 698290098
                                                              Type: Float

0

हास्केल, 50 बाइट्स

मैंने सिर्फ अपने कैल्क वर्ग में न्यूटन की विधि के बारे में सीखा है, इसलिए यहां haskellन्यूटन की विधि का उपयोग करने में जाता है ।

f m=foldl(\x _->x-(sin x+m*x)/(cos x+m))0[1..10]

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