Gauss algorithmus zum Lösen von Ax=b
This commit is contained in:
parent
7c4c595f99
commit
cdb787d492
1 changed files with 44 additions and 0 deletions
44
gauss.py
Normal file
44
gauss.py
Normal file
|
@ -0,0 +1,44 @@
|
|||
def gauss(A,b,offset=(0,0)):
|
||||
ox,oy = offset
|
||||
if len(A)-1 < oy:
|
||||
return A,b
|
||||
|
||||
for i in range(oy,len(A)):
|
||||
if A[i][ox] != 0:
|
||||
if i > oy:
|
||||
A[i], A[oy] = A[oy], A[i]
|
||||
b[i], b[oy] = b[oy], b[i]
|
||||
break
|
||||
|
||||
for i in range(oy+1,len(A)):
|
||||
if A[i][ox] != 0:
|
||||
c = A[i][0]/A[oy][0]
|
||||
A[i] = [ (A[i][x] - A[oy][x]*c) for x in range(ox,len(A[i])) ]
|
||||
b[i] = b[i] - b[oy]*c
|
||||
|
||||
return gauss(A,b,offset=(ox+1,oy+1))
|
||||
|
||||
|
||||
def vprint(A):
|
||||
for i in range(len(A)):
|
||||
print("%3d" % A[i])
|
||||
|
||||
def pprint(A):
|
||||
for i in range(len(A)):
|
||||
print( " ".join(["%3d" % (A[i][j]) for j in range(len(A[i])) ]) )
|
||||
|
||||
|
||||
A = [ [ 1, 1 ],
|
||||
[ 1,-1 ] ]
|
||||
|
||||
b = [ 5,
|
||||
3 ]
|
||||
|
||||
pprint(A)
|
||||
vprint(b)
|
||||
|
||||
|
||||
A, b = gauss(A,b)
|
||||
|
||||
pprint(A)
|
||||
vprint(b)
|
Loading…
Reference in a new issue