Pozitif semidefinite matrisler için negatif özdeğerler döndüren scipy'nin eigh
işleviyle ilgili bazı sorunlar yaşıyorum. Aşağıda bir MWE.scipy eigh pozitif semidefinite matrisi için negatif özdeğerler verir
hess_R
işlevi, pozitif bir semidefinite matrisini döndürür (bu, negatif olmayan girdilerle birlikte bir sıra matrisinin ve çapraz matrisin toplamıdır). Basılı
import numpy as np
from scipy import linalg as LA
def hess_R(x):
d = len(x)
H = np.ones(d*d).reshape(d,d)/(1 - np.sum(x))**2
H = H + np.diag(1/(x**2))
return H.astype(np.float64)
x = np.array([ 9.98510710e-02 , 9.00148922e-01 , 4.41547488e-10])
H = hess_R(x)
w,v = LA.eigh(H)
print w
özdeğerler ben hess_R
dönüş açıklamada np.float32
ile np.float64
değiştirin yerine
[ -5.42905303e+10 4.62854925e+16 5.15260506e+18]
olsun
[ -6.74055241e-271 4.62855397e+016 5.15260753e+018]
, bu yüzden bu tahmin ediyorum çeşit hassas konu.
Bunu düzeltmenin bir yolu var mı? Teknik olarak benim için kullanmam gerekmiyor, ama bence bu benim diğer hatalarla (bu matrislerin kareköklerini alarak, NaN almak, vb.) Altta yatan problem olduğunu düşünüyorum.
"LA.eigh" yerine "LA.eig" yi kullanırsam farklı özdeğerler alırım: '[5.15260753e + 18 + 0.j 3.22785571e + 01 + 0.j 4.62855397e + 16 + 0.j ] – Peaceful
IMHO, Hess_R işleviniz gerçek bir Hessian Matrix döndürmez. yani 'geri çekil' davasında yanlış sonuç döndürüyor. –
@ B.M. Ne demek istediğini açıklayabilir misin? Bunun yerine dönen işlev nedir? – angryavian