Advertisement
miklis

Gaussian method programmed objectively

Apr 26th, 2014
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.64 KB | None | 0 0
  1. #Basic Gaussian method; Objective programming; Side effects
  2. def gaussian_up(matrix):
  3. N=len(matrix)
  4. M=len(matrix[0])
  5. for k in range(N-1): #stulpeliu indeksai
  6. if matrix[k][k]==0:
  7. for l in range(k+1,N+1):
  8. if l==N:
  9. print 'gavom issigimusia matrica'
  10. return None
  11. if matrix[l][k]<>0:
  12. matrix[l][k],matrix[k][k]=matrix[k][k],matrix[l][k]
  13. break
  14. else:
  15. for i in range(k+1,N): #eiluciu indeksaie
  16. if matrix[i][k]<>0:
  17. const=matrix[i][k]/matrix[k][k]
  18. matrix[i][k]=0
  19. for j in range(k+1,M): matrix[i][j]=matrix[i][j]-const*matrix[k][j]#ka keisim i-tojoje eiluteje
  20. return matrix
  21. def gaussian_down(matrix):
  22. #Input and output - matrix of floats
  23. #Efficiency= (M-N)N*N
  24. N=len(matrix)
  25. M=len(matrix[0])
  26. for k in xrange(N-1,0,-1): #stulpeliai, pagal kuriuos keisim eilutes
  27. if matrix[k][k]<>0:
  28. for i in xrange(k-1,-1,-1): #einam per eilutes
  29. const=matrix[i][k]/matrix[k][k]
  30. matrix[i][k]=0
  31. for j in xrange(N,M): matrix[i][j]=matrix[i][j]-matrix[k][j]*const
  32. #eiluteje keisim visus reikiamo stulpelio skaicius, tada visus, kurie yra ne kvadrate
  33. return matrix
  34. print
  35. def diag(matrix):
  36. N,M=len(matrix),len(matrix[0])
  37. for i in range(N):
  38. for j in range(N,M): matrix[i][j]=matrix[i][j]/matrix[i][i]
  39. matrix[i][i]=1.
  40. return matrix
  41. def gaussian(matrix): return diag(gaussian_down(gaussian_up(matrix)))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement