-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathIterationMethodsLS.py
More file actions
93 lines (80 loc) · 2.2 KB
/
Copy pathIterationMethodsLS.py
File metadata and controls
93 lines (80 loc) · 2.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
import numpy
import copy
from scipy import linalg
import GaussianMethod
def matrTransform(A, b):
l = len(A[:, 0])
E = numpy.eye(l)
D = numpy.zeros((l, l))
for i in range(0, l):
D[i][i] = A[i][i]
H = E - numpy.dot(linalg.inv(D), A)
G = numpy.dot(linalg.inv(D), b)
g = numpy.zeros((1, l))[0, :]
for i in range(0, l):
g[i] = G[i][0]
return H, g
def aprEst(xs, H, g, k):
nH = linalg.norm(H, numpy.inf)
return (nH**k) * linalg.norm(xs) + (nH**k / (1-nH)) * linalg.norm(g)
def apostEst(xk, xj, H):
nH = linalg.norm(H, numpy.inf)
return (nH / (1-nH)) * linalg.norm(xk - xj)
def simpIter(xs, H, g, k):
def iterator(k):
if k == 0:
return xs
else:
return numpy.dot(H, iterator(k-1)) + g
return iterator(k)
def Lusternik(H, xk, xj):
rH = specRad(H)
return xj + (1 / (1-rH)) * (xk - xj)
def specRad(H):
eigVal = (linalg.eig(H)[0]).real
rH = numpy.amax(eigVal)
return rH
def Seidel(H, g, xs, k):
l = len(H[:, 0])
Hl = numpy.zeros((l, l))
Hr = numpy.zeros((l, l))
E = numpy.eye(l)
for i in range(0, l):
Hr[i][i:] = H[i][i:]
Hl[i][:i] = H[i][:i]
He = linalg.inv(E - Hl)
def iterator(k):
if k == 0:
return xs
else:
return numpy.dot(numpy.dot(He, Hr), iterator(k-1)) + numpy.dot(He, g)
return iterator(k)
def sor(H, g, xs, k):
l = len(H[:, 0])
Hl = numpy.zeros((l, l))
Hr = numpy.zeros((l, l))
for i in range(0, l):
Hr[i][i+1:] = H[i][i+1:]
Hl[i][:i] = H[i][:i]
D = numpy.zeros((l, l))
for i in range(0, l):
D[i][i] = H[i][i]
sr = specRad(H)
#q = 1
q = 2. / (1 + (1 - sr**2) * 0.5)
def iterator(k):
xk = numpy.zeros((1, l))[0, :]
if k == 0:
return xs
else:
xj = iterator(k-1)
for i in range(0, l):
s1 = 0
for j in range(0, i):
s1 += (H[i][j] * xk[j])
s2 = 0
for j in range(i, l):
s2 += (H[i][j] * xj[j])
xk[i] = xj[i] + q * (g[i] - xj[i] + s1 + s2)
return xk
return iterator(k)