Seite 1 von 1

Scipy: Fehler in Eigenwertberechnung?

Verfasst: Donnerstag 11. Oktober 2007, 11:55
von turbo
Hallo!
Für eine Aufgabe benötige ich Eigenwerte, die ich mit scipy.linalg.eigvals(matrix) berechne. Da mir die Ergebnisse der Berechnung komisch vorkamen, hab ich die berechneten Werte überprüft. (Nach dem Muster det(matrix - lambda * E) = 0?):

Code: Alles auswählen

import scipy as S
import scipy.linalg as L
import random

def test(m):
	eig = L.eigvals(m)
	dim = S.shape(m)[0]
	eye = S.matrix(S.eye(dim,dim))
	for x in eig:
		eye_t = eye * x.real
		D = m - eye_t
		det = L.det(D)
		print 'Eigenwert:   ',x.real
		print 'Determinante nach Test:',det

def generate_matrix(dim, size):
	A = S.matrix(S.zeros((dim,dim)))
	for i in range(dim):
		for j in range(dim):
			A[i,j] = random.random()*size
	A *= A.transpose() #Symmetrisierung der Matrix
	print 'Groeßter Wert in der getesteten Matrix:',A.max()
	return A
	
def exe(i, size):
	for k in range(i):
		print 'Dimension der Matrix:',k+1
		A = generate_matrix(k+1,size)
		test(A)
		print'---------------'
Wenn ich diesen Code ausführe, beispielsweise mit:

>>>exe(30,2)

So ist das Ergebnis der Determinante bei fast allen Größen nicht wie erwartet 0, sondern extrem groß, immer größer werdend mit höherer Dimension.

Mache ich einen Fehler im Test?
Berechnet scipy falsche Werte?

Danke für die Hilfe im Voraus.

Grüße!

Verfasst: Donnerstag 11. Oktober 2007, 13:47
von birkenfeld
Nachdem deine berechnete Determinante bei kleinen Matrizen fast bei 0 liegt, nehme ich an, dass ein numerisches Problem bei einer der beiden Methoden auftritt. Natürlich ist zu hoffen, dass die von eigvals() berechneten Werte genau sind...

Verfasst: Donnerstag 11. Oktober 2007, 14:18
von turbo
birkenfeld hat geschrieben:Natürlich ist zu hoffen, dass die von eigvals() berechneten Werte genau sind...
Ich befürchte, dass das nicht der Fall ist. Denn nach der Python/SciPy Lösung habe ich es mit einer c++-Methode probiert, die vollkommen andere Ergebnisse liefert.
Kann es denn sein, dass eine veröffentlichte Methode derart falsch ist?

Verfasst: Donnerstag 11. Oktober 2007, 14:29
von CM
turbo hat geschrieben: Kann es denn sein, dass eine veröffentlichte Methode derart falsch ist?
Ja, denn es ist schließlich ein offenes Projekt, in dem verschiedene Leute werkeln. Wie leicht unterläuft da mal ein Fehler?

Wende Dich doch einfach mit deinem Snippet an die Mailingliste (ich hoffe Du hast eine aktuelle scipy-Version?) und stelle Deine Frage dort. Die Entwickler lesen mit und entweder weisen sie Dich doch auf einen Schnitzer hin oder in der nächsten svn-Version ist der Fehler schnell korrigiert. (Jedenfalls meine Erfahrung.)

Gruß,
Christian