Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import pprint
- import numpy
- #funckja do tworzenia macierzy wstegowej z wykorzystaniem biblioteki numpy.
- def tridiag(a, b, c, k1=-1, k2=0, k3=1):
- return numpy.diag(a, k1) + numpy.diag(b, k2) + numpy.diag(c, k3)
- #ustawiamy wielkosc macierzy!!MOZNA MODYFIKOWAC DLA DOWOLNYCH n!!
- n=7
- #tworze macierz wstegowa o rozmiarze 7x7 i dodaje 1 w rogach
- a = [1.0]*(n-1); b = [4.0]*n; c = [1.0]*(n-1)
- A = tridiag(a, b, c)
- A[6][0]=1
- A[0][6]=1
- print "A:"
- pprint.pprint(A)
- #zapelniam tablice L i U zerami
- L=[];
- L=[[0.0] * n for i in xrange(n)]
- U=[[0.0] * n for i in xrange(n)]
- uxv=[[0.0] * n for i in xrange(n)]
- uxv[0][0]=1
- uxv[0][n-1]=1
- uxv[n-1][0]=1
- uxv[n-1][n-1]=1
- A=A-uxv
- print "A1:"
- pprint.pprint(A)
- #ustawiam pierwsze wartosci macierzy L i U
- U[0][0]=A[0][0]
- U[0][1]=A[0][1]
- L[0][0]=1.0;
- #zapelniam
- for n in range(0,(len(A)-1)):
- U[n][n+1]=A[n][n+1]
- L[n+1][n+1]=1.0;
- L[n+1][n]=(A[n+1][n]/U[n][n])
- U[n+1][n+1]=A[n+1][n+1]-L[n+1][n]*U[n][n+1]
- print "L:"
- pprint.pprint(L)
- print "U:"
- pprint.pprint(U)
- n=len(A)
- #inicjuje tablice b i v
- b=[1.0,2.0,3.0,4.0,5.0,6.0,7.0]
- u=[1.0,0.0,0.0,0.0,0.0,0.0,1.0]
- #inicjuje tablice wynikow Z,Q,X i posrednich Z,Q
- z=[0]*n
- Z=[0]*n
- q=[0]*n
- Q=[0]*n
- X=[0]*n
- #wynik podstawowy
- z[0]=b[0]
- q[0]=u[0]
- for n in range(1,(len(A))):
- z[n]=b[n]-((L[n][n-1])*(z[n-1]))
- q[n]=u[n]-((L[n][n-1])*(q[n-1]))
- n=len(A)-1
- Z[n]=z[n]/U[n][n]
- Q[n]=q[n]/U[n][n]
- for i in range((len(A))-2,-1,-1):
- Z[i]=(z[i]-((A[i][i+1])*(Z[i+1])))/U[i][i]
- Q[i]=(q[i]-((A[i][i+1])*(Q[i+1])))/U[i][i]
- print "Z:"
- pprint.pprint(Z)
- print "Q:"
- pprint.pprint(Q)
- #obliczam iloczyny skalarne uZ i uQ
- r=0.0
- s=0.0
- for i in range(7):
- r=r+u[i]*Z[i]
- s=s+u[i]*Q[i]
- k=r/(1+s)
- #wyznaczamy X
- for i in range(7):
- X[i]=Z[i]-k*Q[i]
- print "X:"
- pprint.pprint(X)
Add Comment
Please, Sign In to add comment