Gauß Eliminations Verfahren im Python
Verfasst: Donnerstag 3. Juni 2010, 13:41
Hallo erstmal, bin hier neu in diesem Forum allerdings hat mich Python schon gehörig zur Verzweiflung gebracht 
Wie sie sehen können muß man hier erst überprüfen ob die Eingangsparameter A,b hier die Vorrausetzungen erfüllen damit man das Gauß-Eliminationsverfahren anwenden kann.
Problem 1:
Mein Problem besteht jetzt darin das wenn ich wie hier, die Überprüfungen ob Matrix A singulär, quadratisch und ob sie von der Dimension zum Vektor b paßt, in Subprogramme mache, ich von dem Codeüberprüfungsprogramm unsere Uni für den Fall das A singulär ist (det A =0) eine Fehlermeldung bekommen:
CHECK FUNCTION: gaussSolve
Level 0: Vector Shapes
Function -> OK
Results -> OK
Level 1: Matrix Shapes
Function -> OK
Results -> OK
Level 2: Singular Matrix
Function -> OK
Results -> FAILED <-----------------------
Level 3: Numerics
Function -> OK
Results -> FAILED, Type Error
für die anderen Teile Vectorshapes und Matrix Dimension bekomm ich ein ok,
Jetzt ändere ich die Überprüfung ob Matrix A singulär ist einfach mit "if abs(det A)<0: retrun"ERROR_SINGULAR_Matrix" ohne def Funktion, dann passiert folgendes: Das UNI Codeüberprüfungsprogramm sagt:
CHECK FUNCTION: gaussSolve
Level 0: Vector Shapes
Function -> OK
Results -> OK
Level 1: Matrix Shapes
An undefined error occured! -> Check your code!->FAILED <-----------------------
Level 2: Singular Matrix
Function -> OK
Results -> OK <--------------------
Level 3: Numerics
Function -> OK
Results -> FAILED, Type Error
Ich kann mir das beim besten Willen nicht erklären wie so etwas zustande kommen kann.
Problem 2:
Da ich die Eingangsparameter A,b nicht verändern will speichere ich ihren inhalt mittels
C=A
t=b
trotzdem werden aber A und b verändert wie wenn sie ganz normal die schleifen etc durchlaufen würden.
hier mal mein Kode:

Wie sie sehen können muß man hier erst überprüfen ob die Eingangsparameter A,b hier die Vorrausetzungen erfüllen damit man das Gauß-Eliminationsverfahren anwenden kann.
Problem 1:
Mein Problem besteht jetzt darin das wenn ich wie hier, die Überprüfungen ob Matrix A singulär, quadratisch und ob sie von der Dimension zum Vektor b paßt, in Subprogramme mache, ich von dem Codeüberprüfungsprogramm unsere Uni für den Fall das A singulär ist (det A =0) eine Fehlermeldung bekommen:
CHECK FUNCTION: gaussSolve
Level 0: Vector Shapes
Function -> OK
Results -> OK
Level 1: Matrix Shapes
Function -> OK
Results -> OK
Level 2: Singular Matrix
Function -> OK
Results -> FAILED <-----------------------
Level 3: Numerics
Function -> OK
Results -> FAILED, Type Error
für die anderen Teile Vectorshapes und Matrix Dimension bekomm ich ein ok,
Jetzt ändere ich die Überprüfung ob Matrix A singulär ist einfach mit "if abs(det A)<0: retrun"ERROR_SINGULAR_Matrix" ohne def Funktion, dann passiert folgendes: Das UNI Codeüberprüfungsprogramm sagt:
CHECK FUNCTION: gaussSolve
Level 0: Vector Shapes
Function -> OK
Results -> OK
Level 1: Matrix Shapes
An undefined error occured! -> Check your code!->FAILED <-----------------------
Level 2: Singular Matrix
Function -> OK
Results -> OK <--------------------
Level 3: Numerics
Function -> OK
Results -> FAILED, Type Error
Ich kann mir das beim besten Willen nicht erklären wie so etwas zustande kommen kann.
Problem 2:
Da ich die Eingangsparameter A,b nicht verändern will speichere ich ihren inhalt mittels
C=A
t=b
trotzdem werden aber A und b verändert wie wenn sie ganz normal die schleifen etc durchlaufen würden.
hier mal mein Kode:
Code: Alles auswählen
# add more modules if necessary
import numpy
# global precision, use this for "zero" within your code
prec = 1.0e-7
def gaussSolve(A, b) :
def checkMatsing(A): #Ueberprueft ob detA=0
answ=True
detA=numpy.linalg.det(A)
if abs(numpy.abs(detA))<1.0e-7:
answ=False
return answ
def checkVector(b): #Ueberprueft ob b = (n,1) Vector
answ=True
n,m=b.shape
if m!=1:
answ=False
return answ
def checkMatsquares(A): #Ueberprueft ob A=(n,n) Matrix
answ=True
n,m=A.shape
if n!=m:
answ=False
return answ
def checkMatShapes (A,b) : #Ueberprueft ob A,b von der Dimension zusammenpassen
n,k1=A.shape
k2,m=b.shape
answ = True
if n!=k2:
answ=False
return answ
if checkMatsquares(A):
return "ERROR MATRIX_DIMENSION"
if checkMatShapes(A,b):
return "ERROR MATRIX_DIMENSION"
if checkVector(b):
return "ERROR MATRIX_DIMENSION"
if checkMatsing(A):
return "ERROR SINGULAR_MATRIX"
C=A
t=b
n,m=A.shape
D=3.453
for i in range(n-1):
D=C[i][i]
h=i
for j in range(h,n-1):
t[j+1][0]=t[j+1][0]-C[j+1][h]/D*t[h][0]
L=C[j+1][h]
for k in range(h,n):
C[j+1][k]=C[j+1][k]-L/D*C[i][k]
x=numpy.zeros((n,1),numpy.float64)
i=n-1
while i>=0:
sum=0
for j in range(n):
sum=sum+C[i][j]*x[j]
x[i]=1/C[i][i]*(t[i]-sum)
i=i-1
return x