Advertisement
maritzalapa

Gram-Schimdt-Clásico

May 4th, 2014
167
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.28 KB | None | 0 0
  1. ############################################
  2. # Se quiere solucionar Ax = b, donde:
  3. #       A matriz m*n
  4. #       x matriz de n*1
  5. #       b matrz de m*1
  6. #
  7. # Se hallaran la matriz E y U tal que A = E*U, entonces:
  8. #       Ux=E^t*b
  9. #
  10. # Sea B = E^t*b, se procedera a resolver con regresion.
  11. #
  12. #######EN VEZ DE TODOS LOS PRINT  PON RETORNAR LAS MATICES U,E,x Y MUESTRALAS EN PANTALLA
  13.  
  14.  
  15. import math
  16.  
  17.  
  18. #dimension de la matriz A (m*n)
  19. m = int(raw_input())
  20. n = int(raw_input())
  21.  
  22. a = []          # m*n     matriz sobre la que se trabaja
  23. A = []          # m*n     matriz que mandas en la funcion
  24. b = []          # m*1     matriz b
  25. U = []          # n*n     matriz a hallar U
  26. E = []          # m*n     matriz E
  27. Et = []         # n*m     matriz traspuesta de E
  28. x = []          # n*1     matriz de incognitas
  29. B = []          # n*1     matriz E^t*b
  30.  
  31.  
  32. # la siguiente matriz lee los valores 1 por 1, *****supongo que mandaras la matriz A Y b como parametro
  33. # asi que solo tendras que copiar la matriz A (que venga como parametro), en la matriz E, y en
  34. # la matriz 'a'. y podras comenzar con la inicializacion de las variables (linea 58)
  35.  
  36. #inicio de lectura de A
  37. for i in range (m):
  38.     A.append([])
  39.     a.append([])
  40.     E.append([])
  41.     for j in range (n):
  42.         A[i].append(float(raw_input()))
  43.         a[i].append(float(A[i][j]))     #a = A
  44.         E[i].append(0.0)
  45.  
  46.  
  47. #fin de lectura A
  48.  
  49. E=a         #asigne la igualdad entre E y 'a'
  50.  
  51.  
  52. # lee la matriz b
  53. for i in range(m):
  54.     b.append(float(raw_input()))
  55.    
  56. #fin de lectura de la matriz b 
  57.    
  58.    
  59. #inicializa la matriz U en 0, la transpuesta en 0, las incognitas x_i en 0 y la matriz B en 0  
  60. for i in range(n):
  61.     U.append([])
  62.     for j in range(n):
  63.         U[i].append(0.0)
  64.  
  65. for i in range(n):
  66.     Et.append([])
  67.     x.append(0.0)
  68.     for j in range(m):
  69.         Et[i].append(0.0)
  70.  
  71.  
  72. for i in range(n):
  73.     B.append(0.0)
  74. # fin de la inicializacion de matrices U, E_t, x
  75.  
  76.  
  77. ###############################################
  78. #### ACA COMIENZA EL ALGORITMO
  79. ###############################################
  80.  
  81. for j in range(n):
  82.     for i in range(j):
  83.         prod_int = 0.0      #producto interno de ET[][].A[][]
  84.         for k in range(m):
  85.             prod_int += E[k][i]*a[k][j]
  86.         U[i][j] = prod_int
  87.        
  88.         for k in range (m):
  89.             E[k][j] = a[k][j] - U[i][j]*E[k][i]
  90.        
  91.    
  92.     suma=0.0
  93.     for k in range(m):
  94.         suma += E[k][j]*E[k][j]
  95.     U[j][j] = math.sqrt(suma)
  96.    
  97.     for k in range(m):
  98.         E[k][j] = E[k][j]/U[j][j]
  99.            
  100. for i in range(m):
  101.     for j in range(n):
  102.         Et[j][i] = E[i][j]
  103.  
  104.  
  105. ########################################################
  106. ####    FIN DEL ALGORITMO
  107. ########################################################
  108.  
  109.  
  110. ##  hallar la matriz B = E^t*b
  111. for i in range(n):
  112.     for j in range(m):
  113.         B[i] = B[i]+ Et[i][j]*b[j]
  114.        
  115. ####
  116.    
  117.  
  118. ##### aplicamos la regresion el Ux = B, para hallar x
  119. j = n-1
  120. while j>=0:
  121.     res = B[j]
  122.     for k in range (j+1, n):
  123.         res -= U[j][k] *x[k]
  124.     res /= float(U[j][j])
  125.     x[j] = res
  126.     j-=1
  127.  
  128.  
  129.  
  130.  
  131. ######TODOS ESTOS PRINT REEMPLAZALOS POR LOS RETURN QUE NECESITES..
  132. #imprimimos todas las matrices
  133. print 'matriz A:'
  134. for i in range(m):
  135.     print a[i]
  136. print'\n'
  137.  
  138. print 'matriz b:'
  139. print b
  140. print'\n'
  141.  
  142. print 'matriz U:'
  143. for i in range(n):
  144.     print U[i]
  145. print'\n'
  146.  
  147. print 'matriz E:'
  148. for i in range(m):
  149.     print E[i]
  150. print'\n'
  151.  
  152. print 'matriz Et:'
  153. for i in range(n):
  154.     print Et[i]
  155. print'\n'
  156.  
  157. print 'matriz B:'
  158. print B
  159. print'\n'  
  160.  
  161. print 'matriz x:'
  162. print x
  163. print'\n'
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement