-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathnormy.py
More file actions
56 lines (48 loc) · 1.32 KB
/
Copy pathnormy.py
File metadata and controls
56 lines (48 loc) · 1.32 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
import numpy as np
A = np.array([[-4,3,0,0], [4,20,13,1], [0,0,2,1], [3,-6,7,3]])
B = A.T@A
# Sloupcová norma (p = 1)
def sloup_norm(A):
# Součet absolutních hodnot prvků ve sloupcích
x = 0
for s in range(0, len(A[0])):
soucet = 0
for r in range(0, len(A)):
soucet += abs(A[r][s])
if soucet > x:
x = soucet
return x
# Řádková norma (p = ∞)
def rad_norm(A):
# Součet absolutních hodnot prvků v řádcích
x = 0
for r in range(0, len(A[0])):
soucet = 0
for s in range(0, len(A)):
soucet += abs(A[r][s])
if soucet > x:
x = soucet
return x
def maxlambda(A):
u = np.array([1,0,1/2,0])
tol = 1e-6
maxint = 100
l_old = 0
for i in range(maxint):
u = A@u / np.linalg.norm(A@u)
l = (u.T @ A @ u) / (u.T @ u)
if np.abs(l_old - l) < tol:
break
else:
l_old = l
return l
def spekt_norm(A):
l = maxlambda(B)
snorm = np.sqrt(l)
return snorm
print(f"sloupcová norma je {sloup_norm(A)}, řádková norma je {rad_norm(A)} a spektrální norma je {spekt_norm(A)}")
#čísla podmíněnosti
A1 = np.linalg.inv(A)
KR = rad_norm(A) * rad_norm(A1)
KS = sloup_norm(A) * sloup_norm(A1)
KF = spekt_norm(A) * spekt_norm(A1)