मैं दो सुपरपोज़्ड कॉम्प्लेक्स प्लेन वेव्स के चरण को निर्धारित करने की कोशिश कर रहा हूं। इसे लागू करने के दो आसान तरीके हैं:

  1. सबसे पहले प्रत्येक को एक जटिल सरणी के रूप में लिखना और उन्हें जोड़ना है।
  2. दूसरा, पर्दे के पीछे कुछ गणित करना और 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 का उपयोग कर रहा हूं।

0
Joalito 9 अक्टूबर 2021, 02:14
1
यह superwave के दो संस्करणों को देखने में मदद कर सकता है, ऐसा लगता है कि वे x<np.pi के लिए मेल खाते हैं, और इसके ऊपर विपरीत संकेत हैं। (यह t हटाई गई शर्तों के साथ है)।
 – 
hpaulj
9 अक्टूबर 2021, 04:07

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 > के लिए गलत शाखा चुनता है।

1
Warren Weckesser 9 अक्टूबर 2021, 05:29
मेरे पास SO को कॉपी-एन-पेस्ट sympy डिस्प्ले है
 – 
hpaulj
9 अक्टूबर 2021, 10:54