चतुर्भुज वर्गमूल


11

पृष्ठभूमि

क्वाटरनियन एक संख्या प्रणाली है जो जटिल संख्याओं का विस्तार करती है। एक चतुर्भुज का निम्नलिखित रूप है

a+bi+cj+dk

जहाँ वास्तविक संख्या हैं और तीन मूलभूत चतुष्कोणीय इकाइयाँ हैं । इकाइयों में निम्नलिखित गुण हैं:a,b,c,di,j,k

i2=j2=k2=1
ij=k,jk=i,ki=j
ji=k,kj=i,ik=j

ध्यान दें कि चतुर्भुज गुणन सराहनीय नहीं है

कार्य

एक गैर-वास्तविक quaternion को देखते हुए , इसकी कम से कम एक वर्ग जड़ों की गणना करें।

कैसे?

इस गणित के अनुसार। उत्तर के अनुसार , हम निम्नलिखित रूप में किसी भी गैर-वास्तविक उद्धरण को व्यक्त कर सकते हैं:

q=a+bu

जहाँ वास्तविक संख्याएँ हैं और साथ के रूप में काल्पनिक इकाई वेक्टर है । किसी भी ऐसे की संपत्ति , इसलिए इसे काल्पनिक इकाई के रूप में देखा जा सकता है।a,uxi+yj+zkx2+y2+z2=1uu2=1

तब का वर्ग इस तरह दिखता है:q

q2=(a2b2)+2abu

इसके विपरीत, एक quaternion , हम निम्नलिखित समीकरणों को हल करके का वर्गमूल कर सकते हैं।q=x+yuq

x=a2b2,y=2ab

जो एक जटिल संख्या के वर्गमूल को खोजने की प्रक्रिया के समान है।

ध्यान दें कि एक नकारात्मक वास्तविक संख्या में कई चतुर्धातुक वर्ग की जड़ें होती हैं, लेकिन एक गैर-वास्तविक चतुर्भुज में केवल दो वर्गमूल होते हैं

इनपुट और आउटपुट

इनपुट एक गैर-वास्तविक quaternion है। आप इसे अपनी पसंद के किसी भी क्रम और संरचना में चार वास्तविक (फ्लोटिंग-पॉइंट) संख्याओं के रूप में ले सकते हैं। गैर-वास्तविक का मतलब है कि में से कम से कम एक शून्य है।b,c,d

आउटपुट एक या दो चतुर्धातुक होते हैं, जो जब चुकता होते हैं, तो इनपुट के बराबर होते हैं।

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

   Input (a, b, c, d)  =>  Output (a, b, c, d) rounded to 6 digits

 0.0,  1.0,  0.0,  0.0 =>  0.707107,  0.707107,  0.000000,  0.000000
 1.0,  1.0,  0.0,  0.0 =>  1.098684,  0.455090,  0.000000,  0.000000
 1.0, -1.0,  1.0,  0.0 =>  1.168771, -0.427800,  0.427800,  0.000000
 2.0,  0.0, -2.0, -1.0 =>  1.581139,  0.000000, -0.632456, -0.316228
 1.0,  1.0,  1.0,  1.0 =>  1.224745,  0.408248,  0.408248,  0.408248
 0.1,  0.2,  0.3,  0.4 =>  0.569088,  0.175720,  0.263580,  0.351439
99.0,  0.0,  0.0,  0.1 =>  9.949876,  0.000000,  0.000000,  0.005025

इस पायथन लिपि का उपयोग करके बनाया गया । प्रत्येक परीक्षण मामले के लिए दो सही उत्तरों में से केवल एक निर्दिष्ट है; अन्य सभी चार मूल्यों को नकार दिया गया है।

स्कोरिंग और जीतने की कसौटी

मानक नियम लागू होते हैं। प्रत्येक भाषा में बाइट्स में सबसे छोटा प्रोग्राम या फ़ंक्शन जीतता है।


हम के रूप में चतुर्धातुक ले जा सकते हैं a, (b, c, d)?
nwellnhof

@nwellnhof ज़रूर। यहां तक ​​कि कुछ भी a,[b,[c,[d]]]ठीक है, अगर आप किसी तरह इसके साथ बाइट्स बचा सकते हैं :)
बुबलर

जवाबों:


29

एपीएल (एनएआरएस) , 2 बाइट्स

एनएआरएस ने चतुर्धातुक के लिए अंतर्निहित समर्थन किया है। ¯ \ _ (⍨) _ / ¯


4
मैं इसकी मदद नहीं कर सकता: आपको अपने उत्तर में "help_ (_) _ /" "शामिल करना चाहिए
बैरनका

7
आप इस \ गिरा दिया
एंड्रयू

@ बरणका हो गया।
Adám

@ एंड्रॉइड ऐप पर इसे दोष दिया ... इसे लेने के लिए धन्यवाद :)
Barranka

2
यह बेहतर होगा यदि यह है¯\_(⍨)√¯
Zacharý

8

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

def f(a,b,c,d):s=((a+(a*a+b*b+c*c+d*d)**.5)*2)**.5;print s/2,b/s,c/s,d/s

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

कमोबेश कच्चा फार्मूला। मुझे लगा कि मैं सूची समझ का उपयोग कर सकता हूं b,c,d, लेकिन यह अधिक लंबा लगता है। विशेष रूप से स्केलिंग और मानदंड में वेक्टर संचालन की कमी से पायथन वास्तव में यहां आहत है।

पायथन 3 , 77 बाइट्स

def f(a,*l):r=a+sum(x*x for x in[a,*l])**.5;return[x/(r*2)**.5for x in[r,*l]]

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

क्वाड्रैटिक को सीधे हल करना भी पाइथन के जटिल-संख्या वर्गमूल का उपयोग करने से कम था, जैसा कि समस्या कथन में इसे हल करने के लिए।


"इनपुट एक गैर-वास्तविक quaternion है। आप इसे अपनी पसंद के किसी भी क्रम और संरचना में चार वास्तविक (फ्लोटिंग-पॉइंट) संख्याओं के रूप में ले सकते हैं।" तो आप इसे एक पंडों की श्रृंखला या सुन्न सरणी मान सकते हैं। श्रृंखला में सरल गुणन के साथ स्केलिंग है, और मानक प्राप्त करने के विभिन्न तरीके हैं, जैसे कि (s*s).sum()**.5
संचय

6

वोल्फ्राम भाषा (गणितज्ञ) , 19 बाइट्स

Sqrt
<<Quaternions`

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

Mathematica में Quaternion बिल्ट-इन भी है, लेकिन अधिक वर्बोज़ है।


हालांकि बिल्ट-इन कूल दिखते हैं, ऐसे सॉल्यूशन करें जो बिल्ट-इन का भी इस्तेमाल न करें! मैं नहीं चाहता कि HNQ तक पहुँचने वाले सवालों पर तिरछा हो।


4

जावास्क्रिप्ट (ईएस 7), 55 53 बाइट्स

Xnor द्वारा उपयोग किए गए प्रत्यक्ष सूत्र के आधार पर ।

एक सरणी के रूप में इनपुट लेता है।

q=>q.map(v=>1/q?v/2/q:q=((v+Math.hypot(...q))/2)**.5)

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

कैसे?

क्ष=[,,सी,]

एक्स=+2+2+सी2+22

और रिटर्न:

[एक्स,2एक्स,सी2एक्स,2एक्स]

q =>                            // q[] = input array
  q.map(v =>                    // for each value v in q[]:
    1 / q ?                     //   if q is numeric (2nd to 4th iteration):
      v / 2 / q                 //     yield v / 2q
    :                           //   else (1st iteration, with v = a):
      q = (                     //     compute x (as defined above) and store it in q
        (v + Math.hypot(...q))  //     we use Math.hypot(...q) to compute:
        / 2                     //       (q[0]**2 + q[1]**2 + q[2]**2 + q[3]**2) ** 0.5
      ) ** .5                   //     yield x
  )                             // end of map()

3

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

f(a:l)|r<-a+sqrt(sum$(^2)<$>a:l)=(/sqrt(r*2))<$>r:l

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

एक सीधा सूत्र। r/sqrt(r*2)काल्पनिक भाग अभिव्यक्ति को समानांतर करने के लिए आउटपुट के वास्तविक भाग को व्यक्त करने की मुख्य चाल , जो कुछ बाइट्स को बचाता है:

54 बाइट्स

f(a:l)|s<-sqrt$2*(a+sqrt(sum$(^2)<$>a:l))=s/2:map(/s)l

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


3

चारकोल , 32 बाइट्स

≔X⊗⁺§θ⁰XΣEθ×ιι·⁵¦·⁵η≧∕ηθ§≔θ⁰⊘ηIθ

इसे ऑनलाइन आज़माएं! लिंक कोड के वर्बोज़ संस्करण के लिए है। @ Xnor के पायथन उत्तर का पोर्ट। स्पष्टीकरण:

≔X⊗⁺§θ⁰XΣEθ×ιι·⁵¦·⁵η

|एक्स+yयू|=एक्स2+y2=(2-2)2+(2)2=2+2एक्स222

≧∕ηθ

y=22

§≔θ⁰⊘η

2

Iθ

मूल्यों को स्ट्रिंग और अंतर्निहित रूप से प्रिंट करने के लिए कास्ट करें।


3

जावा 8, 84 बाइट्स

(a,b,c,d)->(a=Math.sqrt(2*(a+Math.sqrt(a*a+b*b+c*c+d*d))))/2+" "+b/a+" "+c/a+" "+d/a

पोर्ट ऑफ @xnor पायथन 2 उत्तर

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

स्पष्टीकरण:

(a,b,c,d)->           // Method with four double parameters and String return-type
  (a=                 //  Change `a` to:
     Math.sqrt(       //   The square root of:
       2*             //    Two times:
         (a+          //     `a` plus,
          Math.sqrt(  //     the square-root of:
            a*a       //      `a`  squared,
            +b*b      //      `b` squared,
            +c*c      //      `c` squared,
            +d*d))))  //      And `d` squared summed together
  /2                  //  Then return this modified `a` divided by 2
  +" "+b/a            //  `b` divided by the modified `a`
  +" "+c/a            //  `c` divided by the modified `a`
  +" "+d/a            //  And `d` divided by the modified `a`, with space delimiters

2

05AB1E , 14 बाइट्स

nOtsн+·t©/¦®;š

पोर्ट ऑफ @xnor पायथन 2 उत्तर

इसे ऑनलाइन आज़माएं या सभी परीक्षण मामलों को सत्यापित करें

स्पष्टीकरण:

n                 # Square each number in the (implicit) input-list
 O                # Sum them
  t               # Take the square-root of that
   sн+            # Add the first item of the input-list
      ·           # Double it
       t          # Take the square-root of it
        ©         # Store it in the register (without popping)
         /        # Divide each value in the (implicit) input with it
          ¦       # Remove the first item
           ®;     # Push the value from the register again, and halve it
             š    # Prepend it to the list (and output implicitly)


2

C # .NET, 88 बाइट्स

(a,b,c,d)=>((a=System.Math.Sqrt(2*(a+System.Math.Sqrt(a*a+b*b+c*c+d*d))))/2,b/a,c/a,d/a)

मेरे जावा 8 पोर्ट का जवाब है , लेकिन एक स्ट्रिंग के बजाय एक टपल लौटाता है। मैंने सोचा था कि कम होगा, लेकिन दुर्भाग्य से C # .NET में -import की Math.Sqrtआवश्यकता होती है System, 10 बाइट्स के बजाय 4 बाइट्स पर समाप्त होता है ..>।>

लैंबडा घोषणा बहुत अजीब लग रही है, हालांकि:

System.Func<double, double, double, double, (double, double, double, double)> f =

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


1

पर्ल 6 , 49 बाइट्स

{;(*+@^b>>².sum**.5*i).sqrt.&{.re,(@b X/2*.re)}}

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

के रूप में इनपुट लेने वाली करी फ़ंक्शन f(b,c,d)(a)। के रूप में चतुर्भुज देता है a,(b,c,d)

व्याख्या

{;                                             }  # Block returning WhateverCode
     @^b>>².sum**.5     # Compute B of quaternion written as q = a + B*u
                        # (length of vector (b,c,d))
  (*+              *i)  # Complex number a + B*i
                      .sqrt  # Square root of complex number
                           .&{                }  # Return
                              .re,  # Real part of square root
                                  (@b X/2*.re)  # b,c,d divided by 2* real part
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.