मैं दो सुपरपोज़्ड कॉम्प्लेक्स प्लेन वेव्स के चरण को निर्धारित करने की कोशिश कर रहा हूं। इसे लागू करने के दो आसान तरीके हैं:
- सबसे पहले प्रत्येक को एक जटिल सरणी के रूप में लिखना और उन्हें जोड़ना है।
- दूसरा, पर्दे के पीछे कुछ गणित करना और numpy को सटीक परिणाम लिखने के लिए कहना।
दो परिणाम सहमत नहीं हैं। यहाँ एक मेगावाट है:
from pylab import *
x = linspace(0,2*pi)
k1 = 1
k2 = 2
planewave1 = exp(1j*k1*x)
planewave2 = exp(1j*k2*x)
superwave = planewave1 + planewave2
rho = 2 + 2*cos( (k2-k1)*x )
theta = (k1+k2)/2 * x
superwave_theory = sqrt(rho) * exp(1j*theta)
phase_Numpy = angle(superwave)
phase_theory = angle(superwave_theory) # = theta % pi
प्रत्येक विधि द्वारा परिकलित ये चरण कोण असहमत हैं:
परिणाम असहमत क्यों हैं?
सैद्धांतिक गणना इंगित करती है कि सुपरपोज़्ड तरंगों का चरण व्यक्तिगत तरंगों के चरण का औसत है। मैंने अलग-अलग समतल तरंगों के चरणों में बिंदी लगाई है जिससे हम देख सकते हैं कि यह सही है (नारंगी रेखा "अंदर" पर काली बिंदीदार रेखाओं के बीच में है)।
बेशक चरण कोण पिछले पीआई जारी रखते हैं, लेकिन numpy का angle()
परिणाम को (-pi,pi]
में लपेटता है।
दो विधियाँ तब तक सहमत होती हैं जब तक कि धीमी विमान तरंग -pi के चारों ओर लपेट न जाए। कथानक से यह स्पष्ट है कि सुन्न विधि (नीली रेखा) लिपटी हुई प्रथम चरण रेखा और अलिखित धीमी चरण के बीच में है। ऐसा नहीं होना चाहिए और एक परिणाम देता है जो पीआई से अलग है।
मेरे लिए यह जटिल अंकगणित के NumPy के संचालन में एक बग की तरह लगता है लेकिन यह संभव है कि मैं किसी तरह से कोड का दुरुपयोग कर रहा हूं।
मैं न्यूमपी 1.21.1
का उपयोग कर रहा हूं।
1 उत्तर
आपका सूत्र सभी x के लिए सही नहीं है। एक्स = 3.5 पर विचार करें:
In [49]: import cmath, math
In [50]: k1 = 1
In [51]: k2 = 2
In [52]: x = 3.5
यहाँ जटिल घातांक का योग है:
In [53]: cmath.exp(1j*k1*x) + cmath.exp(1j*k2*x)
Out[53]: (-0.18255443294749174+0.3062033710291692j)
यहां आपका सूत्र है:
In [54]: math.sqrt(2 + 2*math.cos((k2 - k1)*x))*cmath.exp(1j*(k1 + k2)*x/2)
Out[54]: (0.18255443294749166-0.3062033710291693j)
ध्यान दें कि सूत्र का उपयोग करके गणना किए गए परिणाम में गलत चिह्न है (जो कि से बंद होने वाले चरण के बराबर है)।
यह है सच है कि
(exp(1j*k1*x) + exp(1j*k2*x))**2 = (2 + 2*cos((k1 - k2)*x))*exp(1j*(k1+k2)*x)
(काश हमारे पास स्टैकओवरफ्लो पर लाटेक्स होता।) अपना सूत्र प्राप्त करने के लिए, आपको दोनों पक्षों का वर्गमूल लेना होगा, लेकिन जटिल वर्गमूल बहुमूल्यवान है। आपका सूत्र x > के लिए गलत शाखा चुनता है।
sympy
डिस्प्ले है
संबंधित सवाल
नए सवाल
python
पायथन एक बहु-प्रतिमान है, गतिशील रूप से टाइप किया हुआ, बहुउद्देशीय प्रोग्रामिंग भाषा है। यह एक साफ और एक समान वाक्यविन्यास सीखने, समझने और उपयोग करने के लिए त्वरित होने के लिए डिज़ाइन किया गया है। कृपया ध्यान दें कि अजगर 2 आधिकारिक तौर पर 01-01-2020 के समर्थन से बाहर है। फिर भी, संस्करण-विशिष्ट पायथन सवालों के लिए, [अजगर -२.०] या [अजगर -३.x] टैग जोड़ें। पायथन वेरिएंट (जैसे, ज्योथन, PyPy) या लाइब्रेरी (उदा।, पांडस और न्यूमपी) का उपयोग करते समय, कृपया इसे टैग में शामिल करें।
superwave
के दो संस्करणों को देखने में मदद कर सकता है, ऐसा लगता है कि वेx<np.pi
के लिए मेल खाते हैं, और इसके ऊपर विपरीत संकेत हैं। (यहt
हटाई गई शर्तों के साथ है)।