हार्मोनिक थरथरानवाला के मामले में SciPy eigsh () त्रुटिपूर्ण स्वदेशी उत्पादन क्यों करता है?


15

मैं कम्प्यूटेशनल भौतिकी के संदर्भ में विशाल विरल मैट्रिसेस के आइजनवेल्यू कम्प्यूटेशन करने के लिए कुछ बड़े कोड विकसित कर रहा हूं। मैं एक सरल आयाम में सरल हार्मोनिक थरथरानवाला के खिलाफ अपनी दिनचर्या का परीक्षण करता हूं, क्योंकि आइजनवेल्स को विश्लेषणात्मक रूप से जाना जाता है। ऐसा करने और अपने स्वयं के दिनचर्या की तुलना करने के लिए SciPy के इनबिल्ट सॉल्वरों की तुलना में, मैं नीचे दिए गए प्लॉट में प्रदर्शित विषमता के पार आया हूं। यहाँ आप देख सकते हैं पहले 100 संख्यानुसार अभिकलन eigenvalues और विश्लेषणात्मक eigenvalues λ एक एन एकλnयूλn

लगभग eigenvalue नंबर 40 के आसपास, संख्यात्मक परिणाम विश्लेषणात्मक लोगों से अलग होने लगते हैं। यह मुझे आश्चर्यचकित नहीं करता (मैं यहाँ क्यों नहीं जाऊँगा, जब तक कि यह चर्चा में नहीं आता)। हालांकि, क्या है आश्चर्य की बात मेरे लिए यह है कि eigsh () पैदा करता है पतित eigenvalues (करीब eigenvalue संख्या 80)। इतनी कम संख्या में स्वदेशी के लिए भी ईगश () ऐसा व्यवहार क्यों करता है?

यहाँ छवि विवरण दर्ज करें

import numpy as np
from scipy.sparse.linalg import eigsh
import myFunctions as myFunc
import matplotlib.pyplot as plt

#discretize x-axis
N = 100
xmin = -10.
xmax = 10.
accuracy = 1e-5
#stepsize
h = (xmax - xmin) / (N + 1.)
#exclude first and last points since we force wave function to be zero there
x = np.linspace(-10. + h,10. - h,N)
#create potential
V = x**2

def fivePoint(N,h,V):
    C0 = (np.ones(N))*30. / (12. * h * h) + V
    C1 = (np.ones(N)) * (-16.) / (12. * h * h)
    C2 = (np.ones(N)) / (12. * h * h)
    H = sp.spdiags([C2, C1, C0, C1, C2],[-2, -1, 0, 1, 2],N,N)
    return H

H = myFunc.fivePoint(N,h,V)
eigval,eigvec = eigsh(H, k=N-1, which='SM', tol=accuracy)

#comparison analytical and numerical eigenvalues
xAxes = np.linspace(0,len(eigval)-1,len(eigval))
analyticalEigval = 2. * (xAxes + 0.5)
plt.figure()
plt.plot(xAxes,eigval, '+', label=r"$\lambda_{num}$")
plt.plot(xAxes,analyticalEigval, label=r"$\lambda_{ana}$")
plt.xlabel("Number of Eigenvalue")
plt.ylabel("Eigenvalue")
plt.legend(loc=4)
plt.title("eigsh()-method: Comparison of $\lambda_{num}$ and $\lambda_{ana}$")
plt.show()

यह बहुत उत्सुक व्यवहार है। मैं आज बाद में इसका परीक्षण करूंगा।
राफेल राइटर

मुझे जवाब मिल गया। संक्षेप में: मेरी सोच गलत थी। हार्मोनिक ऑसिलेटर (HOSZ) के विश्लेषणात्मक समाधान बिना किसी स्थानिक प्रतिबंध के वैध हैं। हालांकि, ऊपर दिए गए कोड में, मेरा बॉक्स -10 से 10 तक चलता है, इसलिए यह संख्यात्मक समाधान पर एक सीमा स्थिति रखता है। नतीजतन, eigsh () सिस्टम को सही ढंग से हल करता है। लगभग n = 50 (मूल क्वांटम संख्या होने के साथ), विश्लेषणात्मक समाधान अब -10, 10 बॉक्स के अंदर फिट नहीं होते हैं। अब (कुछ सोच के बाद), यह स्पष्ट लगता है। हालाँकि, मैंने यह नहीं देखा कि कोड का निर्माण और परीक्षण करते समय।
seb

यह अभी भी पतन की व्याख्या नहीं करता है, यह करता है?
seb

जवाबों:


12

कुछ स्वदेशों की अध: पतन मुझे लैंक्ज़ोस एल्गोरिथ्म के टूटने की पहचान की तरह लगती है । लैंजोस एल्गोरिथ्म हर्मिटियन मेट्रिसेस के आईजेनवेल्स और ईजेनवेक्टर्स को अनुमानित करने के लिए अधिक सामान्यतः उपयोग की जाने वाली विधियों में से एक है; ARPACK लाइब्रेरी में कॉल के माध्यम से यह scipy.eigsh () का उपयोग करता है ।

सटीक अंकगणित में, लैंकोस एल्गोरिथ्म ऑर्थोगोनल वैक्टर का एक सेट पैदा करता है, लेकिन फ्लोटिंग प्वाइंट अंकगणितीय में ये ऑर्थोगोनल होने में विफल हो सकते हैं और यहां तक ​​कि रैखिक रूप से निर्भर हो सकते हैं। वास्तव में कष्टप्रद बात यह है कि रूढ़िवादिता का यह नुकसान ठीक उसी समय होता है जब अनुमानित स्वदेशी में से एक वास्तविक स्वदेशी में से एक में परिवर्तित हो जाता है - एल्गोरिथ्म खुद को तोड़फोड़ करता है, इसलिए बोलने के लिए। इसका परिणाम यह है कि आपको पास के स्वदेशी जोड़े के कुछ शानदार जोड़े मिलेंगे। इसके लिए विभिन्न सुधार हैं, उदाहरण के लिए ग्राम-श्मिट का उपयोग करके किसी भी परिवर्तित आइगेनवेक्टर्स को हर कदम पर ऑर्थोगोनल होने के लिए मजबूर करना।

बहरहाल, कोई भी तरीका सही नहीं है, खासकर यदि आप अपने मैट्रिक्स के पूरे स्पेक्ट्रम की गणना करने की कोशिश कर रहे हैं । इसलिए यदि आप 50 सबसे छोटे प्रतिरूपों को प्राप्त करने का प्रयास कर रहे हैं, तो आप 100 तत्वों के साथ एक वेक्टर द्वारा तरंग फ़ंक्शन को अंजाम देना बेहतर समझ सकते हैं और केवल eigsh()50 बिंदुओं के साथ एक वेक्टर का उपयोग करने के बजाय पहले 50 ऊर्जा स्तरों के लिए पूछ रहे हैं और सभी के लिए पूछ रहे हैं eigenvalues ​​की।

यदि आप अधिक पढ़ना चाहते हैं, तो यूजफ साद के न्यूमेरिकल तरीकों को बड़ी ईजेनवल्यू समस्याओं के लिए देखें

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