Hemofobia

Untitled

Dec 5th, 2016
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.78 KB | None | 0 0
  1. import pprint
  2. import numpy
  3. #funckja do tworzenia macierzy wstegowej z wykorzystaniem biblioteki numpy.
  4. def tridiag(a, b, c, k1=-1, k2=0, k3=1):
  5.     return numpy.diag(a, k1) + numpy.diag(b, k2) + numpy.diag(c, k3)
  6.    
  7. #ustawiamy wielkosc macierzy!!MOZNA MODYFIKOWAC DLA DOWOLNYCH n!!
  8. n=7
  9.  
  10. #tworze macierz wstegowa o rozmiarze 7x7 i dodaje 1 w rogach
  11. a = [1.0]*(n-1); b = [4.0]*n; c = [1.0]*(n-1)
  12. A = tridiag(a, b, c)
  13. A[6][0]=1
  14. A[0][6]=1
  15. print "A:"
  16. pprint.pprint(A)
  17. #zapelniam tablice L i U zerami
  18. L=[];
  19. L=[[0.0] * n for i in xrange(n)]
  20. U=[[0.0] * n for i in xrange(n)]
  21. uxv=[[0.0] * n for i in xrange(n)]
  22. uxv[0][0]=1
  23. uxv[0][n-1]=1
  24. uxv[n-1][0]=1
  25. uxv[n-1][n-1]=1
  26. A=A-uxv
  27. print "A1:"
  28. pprint.pprint(A)
  29. #ustawiam pierwsze wartosci macierzy L i U
  30. U[0][0]=A[0][0]
  31. U[0][1]=A[0][1]
  32. L[0][0]=1.0;
  33. #zapelniam
  34. for n in range(0,(len(A)-1)):
  35.     U[n][n+1]=A[n][n+1]
  36.     L[n+1][n+1]=1.0;
  37.     L[n+1][n]=(A[n+1][n]/U[n][n])
  38.     U[n+1][n+1]=A[n+1][n+1]-L[n+1][n]*U[n][n+1]
  39.    
  40. print "L:"
  41. pprint.pprint(L)
  42.  
  43. print "U:"
  44. pprint.pprint(U)
  45.  
  46. n=len(A)
  47. #inicjuje tablice b i v
  48. b=[1.0,2.0,3.0,4.0,5.0,6.0,7.0]
  49. u=[1.0,0.0,0.0,0.0,0.0,0.0,1.0]
  50. #inicjuje tablice wynikow Z,Q,X i posrednich Z,Q
  51. z=[0]*n
  52. Z=[0]*n
  53. q=[0]*n
  54. Q=[0]*n
  55. X=[0]*n
  56. #wynik podstawowy
  57. z[0]=b[0]
  58. q[0]=u[0]
  59. for n in range(1,(len(A))):
  60.     z[n]=b[n]-((L[n][n-1])*(z[n-1]))
  61.     q[n]=u[n]-((L[n][n-1])*(q[n-1]))
  62.  
  63. n=len(A)-1
  64. Z[n]=z[n]/U[n][n]
  65. Q[n]=q[n]/U[n][n]
  66. for i in range((len(A))-2,-1,-1):
  67.     Z[i]=(z[i]-((A[i][i+1])*(Z[i+1])))/U[i][i]
  68.     Q[i]=(q[i]-((A[i][i+1])*(Q[i+1])))/U[i][i]
  69. print "Z:"
  70. pprint.pprint(Z)
  71. print "Q:"
  72. pprint.pprint(Q)
  73.  
  74. #obliczam iloczyny skalarne uZ i uQ
  75. r=0.0
  76. s=0.0
  77. for i in range(7):
  78.     r=r+u[i]*Z[i]
  79.     s=s+u[i]*Q[i]
  80. k=r/(1+s)
  81.  
  82. #wyznaczamy X
  83. for i in range(7):
  84.     X[i]=Z[i]-k*Q[i]
  85.  
  86. print "X:"
  87. pprint.pprint(X)
Add Comment
Please, Sign In to add comment