Laplace Entwicklung Python

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Immortalmemo
User
Beiträge: 13
Registriert: Mittwoch 22. Oktober 2014, 00:02
Wohnort: Berlin

Guten Abend,

ich möchte eine Funktion erstellen, die die Determinante einer Matrix mittels Laplache-Entwicklung berechnet.

Ich kriege es nicht gebacken, die i-te Zeile und j-te Spalte von der Matrix zu streichen.
Ich möchte die Entwicklung nach der 1. Zeile machen.
Meine Funktion kriegt als Input eine nested List: z.B. M=[[1,2,3],[2,3,4],[2,3,3]]
Bisher sieht meine Funktion so aus:

Code: Alles auswählen

def det(M):
		Det=0
		if n==1:
			Det=M[0][0]
		if n==2:
			Det=M[0][0]*M[1][1]-M[1][0]*M[0][1]
		else:
			for j in range(n):
				factor=pow(-1,1+j)*A[0][j]
                                minor = #Matrix die durch Streichen entsteht.
                                Det=det(minor)*factor+Det

				
	        return Det	
Für Zeile 10 hatte ich bisher versucht den Minor durch eine For-Schleife zu erstellen.

Code: Alles auswählen

for i in range(n):
               M.remove(M[i][0])
               M.remove(M[0])
Hier krieg ich einen ValueError bei M.remove(M[0]): ValueError: list.remove(x): x not in list
Ansonsten kenne ich noch das "Slicen" von Listen. z.B. 1. Zeile Streichen wäre M[0:] aber wie kriege ich das 1. Element aus jeder 'Unter'-Liste raus?
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Hallo,

Das Objekt mit dem Wert ``M[0]`` ist auch nicht in M enthalten. M enthält nur alle Listen M. Wenn du also M[0] löschen willst, dann musst du die remove-Methode auf M aufrufen. Das ist hier aber keine schöne Idee. Da du M veränderst, ist M für alle nachfolgenden Berechnungen falsch. Du wirst also keine korrekten Ergebnisse bekommen. Viel einfacher ist es, wenn du einfach eine neue Matrix erstellst, welche die zu streichenden Elemente einfach nicht mehr enthält. Schreibe dir dazu am besten eine Funktion.

Dann noch ein paar kleine Anmerkungen: Die Einrückungstiefe bei Python sollte pro Ebene vier Leerzeichen betragen, bei dir ist das links auf jeden Fall zu viel Whitespace. Schau dir zu dem Thema mal PEP 8 an. Außerdem solltest du immer den Code zeigen, mit dem der Fehler auch entstanden ist. Du hast den jetzt so weit gekürzt, dass er schon nicht mehr korrekt funktionieren kann. Der wird schon in Zeile 3 abschmieren, da der Name n unbekannt ist. Dann solltest du dir gleich noch angewöhnen den gesamten Traceback hier zu zeigen und nicht nur den Teil, welchen du für relevant hältst. Da stecken viele nützliche Informationen drinnen. Mit denen kannst du möglicherweise noch nicht so viel anfangen, uns helfen sie aber ungemein.
Das Leben ist wie ein Tennisball.
Antworten