Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #Basic Gaussian method; Objective programming; Side effects
- def gaussian_up(matrix):
- N=len(matrix)
- M=len(matrix[0])
- for k in range(N-1): #stulpeliu indeksai
- if matrix[k][k]==0:
- for l in range(k+1,N+1):
- if l==N:
- print 'gavom issigimusia matrica'
- return None
- if matrix[l][k]<>0:
- matrix[l][k],matrix[k][k]=matrix[k][k],matrix[l][k]
- break
- else:
- for i in range(k+1,N): #eiluciu indeksaie
- if matrix[i][k]<>0:
- const=matrix[i][k]/matrix[k][k]
- matrix[i][k]=0
- for j in range(k+1,M): matrix[i][j]=matrix[i][j]-const*matrix[k][j]#ka keisim i-tojoje eiluteje
- return matrix
- def gaussian_down(matrix):
- #Input and output - matrix of floats
- #Efficiency= (M-N)N*N
- N=len(matrix)
- M=len(matrix[0])
- for k in xrange(N-1,0,-1): #stulpeliai, pagal kuriuos keisim eilutes
- if matrix[k][k]<>0:
- for i in xrange(k-1,-1,-1): #einam per eilutes
- const=matrix[i][k]/matrix[k][k]
- matrix[i][k]=0
- for j in xrange(N,M): matrix[i][j]=matrix[i][j]-matrix[k][j]*const
- #eiluteje keisim visus reikiamo stulpelio skaicius, tada visus, kurie yra ne kvadrate
- return matrix
- print
- def diag(matrix):
- N,M=len(matrix),len(matrix[0])
- for i in range(N):
- for j in range(N,M): matrix[i][j]=matrix[i][j]/matrix[i][i]
- matrix[i][i]=1.
- return matrix
- def gaussian(matrix): return diag(gaussian_down(gaussian_up(matrix)))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement