from sympy import *
import numpy as np
import string
# this code implement Gauss_elimination to solve
# set of equation
# edit in line 119
def isZero( _vect) :
n = _vect.shape [ 0 ]
result = True
for i in range ( n) :
if _vect[ i] != 0 :
result = False
break
return result
def swap( a, b) :
temp = a[ 0 :] .copy ( )
a[ 0 :] = b[ 0 :]
b[ 0 :] = temp
def rank( A) :
rows = A.shape [ 0 ]
result = 0
for i in range ( rows) :
if ( isZero( A[ i] ) == False ) :
result += 1
return result
def getMatrix( A) :
return ( A.T ) [ 0 :-1 ] .copy ( ) .T
def isAllBelowZero( A, index) :
rows = A.shape [ 0 ]
result = True
for i in range ( index + 1 , rows) :
if A[ i] [ index] != 0 :
result = False
break
return result
def Gauss_elimination( A) :
rows, cols = A.shape
loop_epoch = cols if cols < rows else rows
i = 0
while i < loop_epoch:
if A[ i] [ i] != 0 :
for j in range ( i + 1 , rows) :
scaling_value = A[ j] [ i] / A[ i] [ i]
A[ j] = A[ j] - scaling_value * A[ i]
else :
for index in range ( i + 1 , rows) :
if A[ index] [ i] != 0 :
swap( A[ i] , A[ index] )
i -= 1
break
i += 1
for i in range ( rows - 1 ) :
if ( isZero( A[ i] ) ) :
for j in range ( i + 1 , rows) :
if ( isZero( A[ j] ) == False ) :
swap( A[ i] , A[ j] )
break
def back_substitution( A) :
Gauss_elimination( A)
rows, cols = A.shape
cols -= 1
rA = rank( getMatrix( A) )
rAB = rank( A)
x = np.zeros ( cols)
if ( rA + 1 == rAB) :
print ( f"Setequation have no solution" )
elif ( rA == rAB and rA == cols) :
print ( f"Setequation have one solution: " )
# back substitution
i = cols - 1
while i >= 0 :
x[ i] = ( A[ i] [ cols] - x.dot ( getMatrix( A) [ i] ) ) / A[ i] [ i]
i -= 1
else :
alphabet = symbols( list ( string .ascii_lowercase ) )
print ( f"Setequation have infinity solution with {cols - rA} " )
n_iter = 0
pivot_row = 0
y = [ ]
for i in range ( cols) :
if A[ i + pivot_row] [ i] == 0 :
pivot_row -= 1
y.append ( alphabet[ n_iter] )
n_iter += 1
else :
zero = symbols( '0' )
y.append ( zero)
i = cols - 1
while i >= 0 :
s = ( getMatrix( A) [ i] ) .dot ( y)
if A[ i] [ i] != 0 :
# simplify right this expression
y[ i] = ( ( ( A[ i] [ cols] - s) / A[ i] [ i] ) )
i -= 1
x = y
return x
def main( ) :
# matrix = np.array([[1, 2, 2, 9], [3, 4, 4, 1], [5, 6, 7, 0]])
matrix = np.array ( [ [ 1 , 2 , 3 , 0 ] ,
[ 3 , 2 , 3 , 2 ] ,
[ 2 , 2 , 3 , 1 ] ] )
print ( matrix)
Gauss_elimination( matrix)
print ( matrix)
print ( ( back_substitution( matrix) ) )
main( )
ZnJvbSBzeW1weSBpbXBvcnQgKgppbXBvcnQgbnVtcHkgYXMgbnAKaW1wb3J0IHN0cmluZwoKCiMgdGhpcyBjb2RlIGltcGxlbWVudCBHYXVzc19lbGltaW5hdGlvbiB0byBzb2x2ZQojIHNldCBvZiBlcXVhdGlvbgoKIyBlZGl0IGluIGxpbmUgMTE5CgpkZWYgaXNaZXJvKF92ZWN0KToKICAgIG4gPSBfdmVjdC5zaGFwZVswXQoKICAgIHJlc3VsdCA9IFRydWUKICAgIGZvciBpIGluIHJhbmdlKG4pOgogICAgICAgIGlmIF92ZWN0W2ldICE9IDA6CiAgICAgICAgICAgIHJlc3VsdCA9IEZhbHNlCiAgICAgICAgICAgIGJyZWFrCgogICAgcmV0dXJuIHJlc3VsdAoKCmRlZiBzd2FwKGEsIGIpOgogICAgdGVtcCA9IGFbMDpdLmNvcHkoKQogICAgYVswOl0gPSBiWzA6XQogICAgYlswOl0gPSB0ZW1wCgoKZGVmIHJhbmsoQSk6CiAgICByb3dzID0gQS5zaGFwZVswXQoKICAgIHJlc3VsdCA9IDAKICAgIGZvciBpIGluIHJhbmdlKHJvd3MpOgogICAgICAgIGlmIChpc1plcm8oQVtpXSkgPT0gRmFsc2UpOgogICAgICAgICAgICByZXN1bHQgKz0gMQogICAgcmV0dXJuIHJlc3VsdAoKCmRlZiBnZXRNYXRyaXgoQSk6CiAgICByZXR1cm4gKEEuVClbMDotMV0uY29weSgpLlQKCgpkZWYgaXNBbGxCZWxvd1plcm8oQSwgaW5kZXgpOgogICAgcm93cyA9IEEuc2hhcGVbMF0KCiAgICByZXN1bHQgPSBUcnVlCiAgICBmb3IgaSBpbiByYW5nZShpbmRleCArIDEsIHJvd3MpOgogICAgICAgIGlmIEFbaV1baW5kZXhdICE9IDA6CiAgICAgICAgICAgIHJlc3VsdCA9IEZhbHNlCiAgICAgICAgICAgIGJyZWFrCgogICAgcmV0dXJuIHJlc3VsdAoKCmRlZiBHYXVzc19lbGltaW5hdGlvbihBKToKICAgIHJvd3MsIGNvbHMgPSBBLnNoYXBlCiAgICBsb29wX2Vwb2NoID0gY29scyBpZiBjb2xzIDwgcm93cyBlbHNlIHJvd3MKICAgIGkgPSAwCgogICAgd2hpbGUgaSA8IGxvb3BfZXBvY2g6CiAgICAgICAgaWYgQVtpXVtpXSAhPSAwOgogICAgICAgICAgICBmb3IgaiBpbiByYW5nZShpICsgMSwgcm93cyk6CiAgICAgICAgICAgICAgICBzY2FsaW5nX3ZhbHVlID0gQVtqXVtpXSAvIEFbaV1baV0KICAgICAgICAgICAgICAgIEFbal0gPSBBW2pdIC0gc2NhbGluZ192YWx1ZSAqIEFbaV0KICAgICAgICBlbHNlOgogICAgICAgICAgICBmb3IgaW5kZXggaW4gcmFuZ2UoaSArIDEsIHJvd3MpOgogICAgICAgICAgICAgICAgaWYgQVtpbmRleF1baV0gIT0gMDoKICAgICAgICAgICAgICAgICAgICBzd2FwKEFbaV0sIEFbaW5kZXhdKQogICAgICAgICAgICAgICAgICAgIGkgLT0gMQogICAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgaSArPSAxCgogICAgZm9yIGkgaW4gcmFuZ2Uocm93cyAtIDEpOgogICAgICAgIGlmIChpc1plcm8oQVtpXSkpOgogICAgICAgICAgICBmb3IgaiBpbiByYW5nZShpICsgMSwgcm93cyk6CiAgICAgICAgICAgICAgICBpZiAoaXNaZXJvKEFbal0pID09IEZhbHNlKToKICAgICAgICAgICAgICAgICAgICBzd2FwKEFbaV0sIEFbal0pCiAgICAgICAgICAgICAgICAgICAgYnJlYWsKCgpkZWYgYmFja19zdWJzdGl0dXRpb24oQSk6CiAgICBHYXVzc19lbGltaW5hdGlvbihBKQogICAgcm93cywgIGNvbHMgPSBBLnNoYXBlCiAgICBjb2xzIC09IDEKICAgIHJBID0gcmFuayhnZXRNYXRyaXgoQSkpCiAgICByQUIgPSByYW5rKEEpCgogICAgeCA9IG5wLnplcm9zKGNvbHMpCgogICAgaWYgKHJBICsgMSA9PSByQUIpOgogICAgICAgIHByaW50KGYiU2V0ZXF1YXRpb24gaGF2ZSBubyBzb2x1dGlvbiIpCiAgICBlbGlmIChyQSA9PSByQUIgYW5kIHJBID09IGNvbHMpOgogICAgICAgIHByaW50KGYiU2V0ZXF1YXRpb24gaGF2ZSBvbmUgc29sdXRpb246ICIpCiAgICAgICAgIyBiYWNrIHN1YnN0aXR1dGlvbgogICAgICAgIGkgPSBjb2xzIC0gMQogICAgICAgIHdoaWxlIGkgPj0gMDoKICAgICAgICAgICAgeFtpXSA9IChBW2ldW2NvbHNdIC0geC5kb3QoZ2V0TWF0cml4KEEpW2ldKSkgLyBBW2ldW2ldCiAgICAgICAgICAgIGkgLT0gMQogICAgZWxzZToKICAgICAgICBhbHBoYWJldCA9IHN5bWJvbHMobGlzdChzdHJpbmcuYXNjaWlfbG93ZXJjYXNlKSkKICAgICAgICBwcmludChmIlNldGVxdWF0aW9uIGhhdmUgaW5maW5pdHkgc29sdXRpb24gd2l0aCB7Y29scyAtIHJBfSAiKQogICAgICAgIG5faXRlciA9IDAKICAgICAgICBwaXZvdF9yb3cgPSAwCiAgICAgICAgeSA9IFtdCiAgICAgICAgZm9yIGkgaW4gcmFuZ2UoY29scyk6CiAgICAgICAgICAgIGlmIEFbaSArIHBpdm90X3Jvd11baV0gPT0gMDoKICAgICAgICAgICAgICAgIHBpdm90X3JvdyAtPSAxCiAgICAgICAgICAgICAgICB5LmFwcGVuZChhbHBoYWJldFtuX2l0ZXJdKQogICAgICAgICAgICAgICAgbl9pdGVyICs9IDEKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIHplcm8gPSBzeW1ib2xzKCcwJykKICAgICAgICAgICAgICAgIHkuYXBwZW5kKHplcm8pCgogICAgICAgIGkgPSBjb2xzIC0gMQogICAgICAgIHdoaWxlIGkgPj0gMDoKICAgICAgICAgICAgcyA9IChnZXRNYXRyaXgoQSlbaV0pLmRvdCh5KQogICAgICAgICAgICBpZiBBW2ldW2ldICE9IDA6CiAgICAgICAgICAgIAkjIHNpbXBsaWZ5IHJpZ2h0IHRoaXMgZXhwcmVzc2lvbgogICAgICAgICAgICAgICAgeVtpXSA9ICgoKEFbaV1bY29sc10gLSBzKSAvIEFbaV1baV0pKQoKICAgICAgICAgICAgaSAtPSAxCiAgICAgICAgeCA9IHkKCiAgICByZXR1cm4geAoKCmRlZiBtYWluKCk6CiAgICAjIG1hdHJpeCA9IG5wLmFycmF5KFtbMSwgMiwgMiwgOV0sIFszLCA0LCA0LCAxXSwgWzUsIDYsIDcsIDBdXSkKICAgIG1hdHJpeCA9IG5wLmFycmF5KFtbMSwgMiwgMywgMF0sCiAgICAgICAgICAgICAgICAgICAgICAgWzMsIDIsIDMsIDJdLAogICAgICAgICAgICAgICAgICAgICAgIFsyLCAyLCAzLCAxXV0pCiAgICBwcmludChtYXRyaXgpCiAgICBHYXVzc19lbGltaW5hdGlvbihtYXRyaXgpCiAgICBwcmludChtYXRyaXgpCiAgICBwcmludCgoYmFja19zdWJzdGl0dXRpb24obWF0cml4KSkpCgoKbWFpbigpCg==
compilation info
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/usr/lib/python2.7/py_compile.py", line 117, in compile
raise py_exc
py_compile.PyCompileError: File "prog.py", line 91
print(f"Setequation have no solution")
^
SyntaxError: invalid syntax
stdout