के लिए ऋणात्मक eigenvalues देता है मुझे सकारात्मक semidefinite matrices के लिए नकारात्मक eigenvalues वापस scipy eigh
समारोह के साथ कुछ समस्याएं हैं। नीचे एक MWE है।scipy eigh सकारात्मक semidefinite मैट्रिक्स
hess_R
फ़ंक्शन सकारात्मक पॉजिटिव सेमीडिफिन मैट्रिक्स देता है (यह एक रैंक एक मैट्रिक्स और एक विकर्ण मैट्रिक्स का योग है, दोनों गैर-अनुवांशिक प्रविष्टियों के साथ)।
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
eigenvalues मुद्रित
[ -6.74055241e-271 4.62855397e+016 5.15260753e+018]
हैं मैं hess_R
की वापसी बयान में np.float32
साथ np.float64
की जगह मैं
[ -5.42905303e+10 4.62854925e+16 5.15260506e+18]
बजाय मिलता है, तो मैं इस अनुमान लगा रहा हूँ के कुछ प्रकार है सटीक मुद्दा।
क्या इसे ठीक करने का कोई तरीका है? तकनीकी रूप से मुझे आठों का उपयोग करने की आवश्यकता नहीं है, लेकिन मुझे लगता है कि यह मेरी अन्य त्रुटियों के साथ अंतर्निहित समस्या है (इन मैट्रिस की स्क्वायर जड़ों को लेना, NaNs प्राप्त करना आदि)
यदि मैं 'LA.eigh' के बजाय 'LA.eig' का उपयोग करता हूं, तो मुझे अलग-अलग eigenvalues मिलते हैं:' [5.15260753e + 18 + 0.j 3.22785571e + 01 + 0.j 4.62855397e + 16 + 0.j ] ' – Peaceful
आईएमएचओ, आपका 'हेस_आर' फ़ंक्शन वास्तविक हेसियन मैट्रिक्स वापस नहीं करता है। तो आपके मामले में 'आठवां वापसी झूठी परिणाम। –
@ बीएम। क्या आप आगे बता सकते हैं कि आपका क्या मतलब है? इसके बजाय फ़ंक्शन लौटने वाला क्या है? – angryavian