SciPy eigsh () neden harmonik osilatör durumunda hatalı özdeğerler üretir?


15

Hesaplamalı fizik bağlamında, büyük seyrek matrislerin özdeğer hesaplamaları gerçekleştirmek için bazı büyük kod geliştiriyorum. Özdeğerler analitik olarak iyi bilindiği için rutinlerimi basit harmonik osilatöre karşı bir boyutta test ediyorum. Bunu yaparak ve kendi rutinlerimi SciPy'nin dahili çözücüleriyle karşılaştırarak, aşağıdaki çizimde gösterilen garipliğe rastladım. Burada ilk 100 sayısal olarak hesaplanmış özdeğer ve analitik özdeğerleri λ a n aλnumλana

40 nolu özdeğer civarında, sayısal sonuçlar analitik olanlardan farklılaşmaya başlar. Bu beni şaşırtmıyor (tartışmada ortaya çıkmadıkça neden buraya girmeyeceğim). Bununla birlikte, benim için şaşırtıcı olan, eigsh () 'in dejenere özdeğerler üretmesidir (özdeğer sayısı 80 civarında). Neden eigsh () bu kadar az sayıda özdeğer için bile böyle davranıyor?

resim açıklamasını buraya girin

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()

Bu çok ilginç bir davranış. Bugün daha sonra test edeceğim.
Rafael Reiter

Cevabı buldum. Kısacası: düşüncem yanlıştı. Harmonik osilatörün (HOSZ) analitik çözümleri herhangi bir boşluk kısıtlaması olmaksızın geçerlidir. Ancak, yukarıdaki kodda, kutum -10 ila 10 çalışır, bu nedenle bu sayısal çözümler üzerinde bir sınır koşulu koyar. Sonuç olarak, eigsh () komutu verilen sistemi doğru bir şekilde çözer. Yaklaşık n = 50 civarında (n temel Quantum sayısı olduğu için), analitik çözümler artık -10, 10 kutusunun içine sığmaz. Şimdi (bazı düşüncelerden sonra), bu açık görünüyor. Ancak, kodu oluştururken ve test ederken bunu görmedim.
seb

bu hala yozlaşmayı açıklamıyor, değil mi?
seb

Yanıtlar:


12

Bazı özdeğerlerin dejenerasyonu bana Lanczos algoritmasının bozulmasının damgasını vurdu . Lanczos algoritması Hermiti matrislerinin özdeğerlerine ve özvektörlerine yaklaşmak için daha yaygın olarak kullanılan yöntemlerden biridir; ARPACK kütüphanesine yapılan bir çağrı ile scipy.eigsh () kullanır .

Tam aritmetikte, Lanczos algoritması bir dizi dikey vektör üretir, ancak kayan nokta aritmetiğinde bunlar dik olamaz ve hatta doğrusal olarak bağımlı hale gelebilir. Gerçekten sinir bozucu olan şey, bu diklik kaybının tam olarak yaklaşık özdeğerlerden biri gerçek öz değerlerden birine yaklaştığında gerçekleşir - algoritma, tabiri caizse, kendisini sabote eder. Sonuç olarak yakındaki özdeğerlerden bazı çiftler elde edersiniz. Bunun için çeşitli düzeltmeler vardır, örneğin herhangi bir yakınsak özvektörü her adımda dik olmaya zorlamak için Gram-Schmidt kullanmak.

Bununla birlikte, özellikle matrisinizin tüm spektrumunu hesaplamaya çalışıyorsanız , hiçbir yöntem mükemmel değildir . Bu nedenle, en küçük 50 öz değeri elde etmeye çalışıyorsanız, dalga fonksiyonunu 100 elementli bir vektörle yaklaştırmak ve eigsh()50 noktalı bir vektör kullanmak ve hepsini sormak yerine sadece ilk 50 enerji seviyesini sormak daha iyi olabilir. özdeğerlerin.

Daha fazlasını okumak istiyorsanız, Yousef Saad'ın Büyük Özdeğer Problemleri için Sayısal Yöntemlerine bakın .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.