Advertisement
Chenavier

Untitled

Apr 7th, 2017
288
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.84 KB | None | 0 0
  1. def pivot(v, u, t):
  2. return u-t*v
  3.  
  4. def printVector(v):
  5. s = ""
  6. for i in [0..len(v)-1]:
  7. if v[i] != 0: s = s+ "("+ str(i)+","+str(v[i])+")"
  8. print s
  9.  
  10. def dimension(L):
  11. A = matrix(L)
  12. V = A.image()
  13. return dim(V)
  14.  
  15. def isNotZero(field, v):
  16. V = VectorSpace(field,len(v))
  17. u = V.zero()
  18. return u != v
  19.  
  20. def lg(v):
  21. k = 0
  22. for i in [0..len(v)-1]:
  23. if v[i] != 0: k = i+1
  24. return k
  25.  
  26. def order(v, w):
  27. if lg(v) > lg(w): return int(-1)
  28. elif lg(v) == lg(w): return int(0)
  29. else: return int(1)
  30.  
  31. def leadingVector(L):
  32. v = L[0]
  33. for i in [1..len(L)-1]:
  34. if lg(L[i]) > lg(L[i-1]): v=L[i]
  35. return v
  36.  
  37. def sort(field, L, v):
  38. k, G = lg(v), []
  39. g = lambda v: isNotZero(field,v)
  40. for i in [0..len(L)-1]:
  41. G = G+[pivot(v,L[i],L[i][k-1]/v[k-1])]
  42. return filter(g,G)+[v]
  43.  
  44. def sortedList(field, L):
  45. G = sort(field,L,leadingVector(L))
  46. G.sort(cmp = order)
  47. return G
  48.  
  49. def orderedBasis(field, L):
  50. n, G = dimension(L), sortedList(field, L)
  51. for i in [1..n-1]:
  52. G = sort(field, G, G[i])
  53. G.sort(cmp = order)
  54. return G
  55.  
  56.  
  57. def reverseReducedBasis(field, L):
  58. G = orderedBasis(field, L)
  59. n = len(G)
  60. H = []
  61. for i in [0..n-1]:
  62. v, k = G[i], lg(G[i])
  63. H = H+[1/v[k-1]*v]
  64. return H
  65.  
  66. def reducedBasis(field, L):
  67. if L == []: return L
  68. else: G = reverseReducedBasis(field, L); G.reverse(); return G
  69.  
  70. def operator(field, G):
  71. L = reducedBasis(field, G)
  72. n = len(L[0])
  73. V = VectorSpace(QQ,n)
  74. v = V.zero()
  75. G = (lg(L[0])-1)*[v]+[L[0]]
  76. k = len(L)
  77. for i in [1..k-1]:
  78. G = G+(lg(L[i])-lg(L[i-1])-1)*[v]+[L[i]]
  79. G = G+(n-lg(L[k-1]))*[v]
  80. return identity_matrix(field,n)-matrix(G).transpose()
  81.  
  82. def lowerBound(field, T_1, T_2):
  83. V_1, V_2 = kernel(T_1.transpose()), kernel(T_2.transpose())
  84. G_1, G_2 = basis(V_1),basis(V_2)
  85. L_1, L_2 = reducedBasis(field, G_1), reducedBasis(field, G_2)
  86. G = L_1+L_2
  87. L = reducedBasis(field, G)
  88. return operator(field, L)
  89.  
  90. def upperBound(field, T_1, T_2):
  91. V_1, V_2 = kernel(T_1.transpose()), kernel(T_2.transpose())
  92. V = V_1.intersection(V_2)
  93. G = basis(V)
  94. L = reducedBasis(field, G)
  95. return operator(field, L)
  96.  
  97. def tilde(field, T):
  98. n, L = T.nrows(),[]
  99. for i in [0..n-1]:
  100. j, k = i, n-i-1
  101. if T[i,i] == 1: L = L+[vector(j*[0]+[1]+k*[0])]
  102. return operator(field, L)
  103.  
  104. def complement(field, L):
  105. n, C, T = len(L), L[0], tilde(field, L[0])
  106. for i in [1..n-1]: C = lowerBound(field, C, L[i])
  107. for j in [1..n-1]: T = upperBound(field, T, tilde(field, L[j]))
  108. return upperBound(field, C, T)
  109.  
  110. def printOperator(field, U):
  111. F = reducedBasis(field, kernel(U.transpose()).basis())
  112. for i in [0..len(F)-1]:
  113. printVector(F[i])
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement