Julia 1.0 - Complex and Rational Numbers

जटिल और तर्कसंगत संख्या




julia

जटिल और तर्कसंगत संख्या

जूलिया जटिल और तर्कसंगत दोनों संख्याओं का प्रतिनिधित्व करने वाले पूर्वनिर्धारित प्रकारों के साथ, और उन पर सभी मानक गणितीय संचालन और प्राथमिक कार्यों का समर्थन करता है। रूपांतरण और संवर्धन को परिभाषित किया गया है ताकि पूर्वनिर्धारित संख्यात्मक प्रकारों के किसी भी संयोजन पर परिचालन, चाहे आदिम या समग्र हो, अपेक्षा के अनुरूप व्यवहार करें।

जटिल आंकड़े

वैश्विक स्थिर im जटिल संख्या i के लिए बाध्य है, -1 के प्रमुख वर्गमूल का प्रतिनिधित्व करता है। वैश्विक स्थिरांक के लिए i नाम का सह-चयन करना हानिकारक माना जाता था, क्योंकि यह इतना लोकप्रिय सूचकांक चर नाम है। चूंकि जूलिया गुणांक के रूप में पहचानकर्ताओं के साथ सांख्यिक शाब्दिक रूप से अलग-अलग होने की अनुमति देता है, यह बाध्यकारी पारंपरिक गणितीय संकेतन के समान जटिल संख्या के लिए सुविधाजनक वाक्यविन्यास प्रदान करने के लिए पर्याप्त है:

julia> 1 + 2im
1 + 2im

आप जटिल संख्याओं के साथ सभी मानक अंकगणितीय संचालन कर सकते हैं:

julia> (1 + 2im)*(2 - 3im)
8 + 1im

julia> (1 + 2im)/(1 - 2im)
-0.6 + 0.8im

julia> (1 + 2im) + (1 - 2im)
2 + 0im

julia> (-3 + 2im) - (5 - 1im)
-8 + 3im

julia> (-1 + 2im)^2
-3 - 4im

julia> (-1 + 2im)^2.5
2.729624464784009 - 6.9606644595719im

julia> (-1 + 2im)^(1 + 1im)
-0.27910381075826657 + 0.08708053414102428im

julia> 3(2 - 5im)
6 - 15im

julia> 3(2 - 5im)^2
-63 - 60im

julia> 3(2 - 5im)^-1.0
0.20689655172413796 + 0.5172413793103449im

प्रचार तंत्र यह सुनिश्चित करता है कि विभिन्न प्रकार के ऑपरेंडों के संयोजन बस काम करें:

julia> 2(1 - 1im)
2 - 2im

julia> (2 + 3im) - 1
1 + 3im

julia> (1 + 2im) + 0.5
1.5 + 2.0im

julia> (2 + 3im) - 0.5im
2.0 + 2.5im

julia> 0.75(1 + 2im)
0.75 + 1.5im

julia> (2 + 3im) / 2
1.0 + 1.5im

julia> (1 - 3im) / (2 + 2im)
-0.5 - 1.0im

julia> 2im^2
-2 + 0im

julia> 1 + 3/4im
1.0 - 0.75im

ध्यान दें कि 3/4im == 3/(4*im) == -(3/4*im) , क्योंकि एक शाब्दिक गुणांक विभाजन की तुलना में अधिक कसकर बांधता है।

जटिल मानों में हेरफेर करने के लिए मानक कार्य प्रदान किए जाते हैं:

julia> z = 1 + 2im
1 + 2im

julia> real(1 + 2im) # real part of z
1

julia> imag(1 + 2im) # imaginary part of z
2

julia> conj(1 + 2im) # complex conjugate of z
1 - 2im

julia> abs(1 + 2im) # absolute value of z
2.23606797749979

julia> abs2(1 + 2im) # squared absolute value
5

julia> angle(1 + 2im) # phase angle in radians
1.1071487177940904

हमेशा की तरह, एक जटिल संख्या का पूर्ण मान ( abs ) शून्य से इसकी दूरी है। abs2 पूर्ण मूल्य का वर्ग देता है, और जटिल संख्याओं के लिए विशेष रूप से उपयोग होता है जहां यह एक वर्गमूल लेने से बचता है। angle रेडियन में चरण angle लौटाता है (जिसे तर्क या अर्ग फ़ंक्शन के रूप में भी जाना जाता है)। अन्य प्राथमिक क्रियाओं का पूर्ण सरगम ​​भी जटिल संख्याओं के लिए परिभाषित किया गया है:

julia> sqrt(1im)
0.7071067811865476 + 0.7071067811865475im

julia> sqrt(1 + 2im)
1.272019649514069 + 0.7861513777574233im

julia> cos(1 + 2im)
2.0327230070196656 - 3.0518977991518im

julia> exp(1 + 2im)
-1.1312043837568135 + 2.4717266720048188im

julia> sinh(1 + 2im)
-0.4890562590412937 + 1.4031192506220405im

ध्यान दें कि गणितीय फ़ंक्शंस आम तौर पर वास्तविक मानों पर लौटते हैं जब वास्तविक संख्याओं पर लागू होते हैं और जटिल संख्याओं पर लागू होने पर जटिल मान। उदाहरण के लिए, -1 बनाम -1 + 0im लागू होने पर भी sqrt अलग तरह से व्यवहार करता है, हालांकि -1 == -1 + 0im :

julia> sqrt(-1)
ERROR: DomainError with -1.0:
sqrt will only return a complex result if called with a complex argument. Try sqrt(Complex(x)).
Stacktrace:
[...]

julia> sqrt(-1 + 0im)
0.0 + 1.0im

चर से जटिल संख्या का निर्माण करते समय शाब्दिक संख्यात्मक गुणांक अंकन काम नहीं करता है। इसके बजाय, गुणन को स्पष्ट रूप से लिखा जाना चाहिए:

julia> a = 1; b = 2; a + b*im
1 + 2im

हालांकि, यह अनुशंसित नहीं है ; इसके वास्तविक और काल्पनिक भागों से सीधे एक जटिल मूल्य का निर्माण करने के बजाय sqrt फ़ंक्शन का उपयोग करें:

julia> a = 1; b = 2; complex(a, b)
1 + 2im

यह निर्माण गुणा और जोड़ संचालन से बचता है।

Inf और NaN जटिल संख्या के वास्तविक और काल्पनिक भागों में जटिल संख्याओं के माध्यम से प्रचार करते हैं जैसा कि विशेष फ़्लोटिंग-पॉइंट मानों में वर्णित है:

julia> 1 + Inf*im
1.0 + Inf*im

julia> 1 + NaN*im
1.0 + NaN*im

तर्कसंगत संख्याओं

जूलिया में पूर्णांक के सटीक अनुपात का प्रतिनिधित्व करने के लिए एक तर्कसंगत संख्या प्रकार है। परिचालकों का निर्माण // ऑपरेटर के उपयोग से किया जाता है:

julia> 2//3
2//3

यदि किसी परिमेय के अंश और हर के सामान्य कारक होते हैं, तो वे निम्नतम शर्तों तक कम हो जाते हैं जैसे कि भाजक गैर-ऋणात्मक होता है:

julia> 6//9
2//3

julia> -4//8
-1//2

julia> 5//-15
-1//3

julia> -4//-12
1//3

पूर्णांक के अनुपात के लिए यह सामान्यीकृत रूप अद्वितीय है, इसलिए अंश और हर की समानता के लिए जाँच करके तर्कसंगत मूल्यों की समानता का परीक्षण किया जा सकता है। मानकीकृत संख्यात्मक और भाजक मूल्य के भाजक को अंश और हर का उपयोग करके निकाला जा सकता है:

julia> numerator(2//3)
2

julia> denominator(2//3)
3

अंश और हर की प्रत्यक्ष तुलना आम तौर पर आवश्यक नहीं होती है, क्योंकि मानक अंकगणितीय और तुलनात्मक संचालन तर्कसंगत मूल्यों के लिए परिभाषित किए जाते हैं:

julia> 2//3 == 6//9
true

julia> 2//3 == 9//27
false

julia> 3//7 < 1//2
true

julia> 3//4 > 2//3
true

julia> 2//4 + 1//6
2//3

julia> 5//12 - 1//4
1//6

julia> 5//8 * 3//12
5//32

julia> 6//5 / 10//7
21//25

तर्कसंगत को आसानी से फ्लोटिंग-पॉइंट संख्या में परिवर्तित किया जा सकता है:

julia> float(3//4)
0.75

तर्कसंगत से फ्लोटिंग-पॉइंट में रूपांतरण a और b किसी भी अभिन्न मूल्यों के लिए निम्नलिखित पहचान का सम्मान करता है, मामले के अपवाद के साथ a == 0 और b == 0 :

julia> a = 1; b = 2;

julia> isequal(float(a//b), a/b)
true

अनंत तर्कसंगत मूल्यों का निर्माण स्वीकार्य है:

julia> 5//0
1//0

julia> -3//0
-1//0

julia> typeof(ans)
Rational{Int64}

हालांकि, NaN तर्कसंगत मूल्य के निर्माण की कोशिश नहीं की जा रही है:

julia> 0//0
ERROR: ArgumentError: invalid rational: zero(Int64)//zero(Int64)
Stacktrace:
[...]

हमेशा की तरह, पदोन्नति प्रणाली अन्य संख्यात्मक प्रकारों के साथ सहजता से बातचीत करती है:

julia> 3//5 + 1
8//5

julia> 3//5 - 0.5
0.09999999999999998

julia> 2//7 * (1 + 2im)
2//7 + 4//7*im

julia> 2//7 * (1.5 + 2im)
0.42857142857142855 + 0.5714285714285714im

julia> 3//2 / (1 + 2im)
3//10 - 3//5*im

julia> 1//2 + 2im
1//2 + 2//1*im

julia> 1 + 2//3im
1//1 - 2//3*im

julia> 0.5 == 1//2
true

julia> 0.33 == 1//3
false

julia> 0.33 < 1//3
true

julia> 1//3 - 0.33
0.0033333333333332993