Pogledajmo primjer iz prezentacije $$A=\begin{bmatrix} 10 & 7& 8& 7\\ 7& 5& 6& 5\\ 8 & 6& 10& 9\\ 7& 5& 9& 10\end{bmatrix}\quad b=\begin{bmatrix}32\\ 23\\ 33\\ 31\end{bmatrix}$$
import numpy as np
A = np.array([[10, 7, 8, 7], [7, 5, 6, 5], [8, 6, 10, 9], [7, 5, 9, 10]])
b = np.array([32,23, 33, 31])
x = np.linalg.solve(A,b)
print("x=",x)
x= [1. 1. 1. 1.]
Ako uzmemo da je desna strana sada $$b=\begin{bmatrix} 32.1\\ 22.9\\ 33.1\\ 30.9 \end{bmatrix}$$
c=np.array([32.1,22.9, 33.1, 30.9])
x = np.linalg.solve(A,c)
print("x=",x)
x= [ 9.2 -12.6 4.5 -1.1]
eig=np.linalg.eigvalsh(A)
print("Eigenvalues=", eig)
Eigenvalues= [1.01500484e-02 8.43107150e-01 3.85805746e+00 3.02886853e+01]
Ako sada rješavamo sustav s matricom $$B=\begin{bmatrix} 10 & 7& 8.1 & 7.2 \\ 7.08 & 5.04 & 6& 5\\ 8 & 5.98 & 9.89 & 9\\ 6.99 & 4.99 & 9 & 9.98\end{bmatrix}\quad b=\begin{bmatrix}32\\ 23\\ 33\\ 31\end{bmatrix}$$
import numpy as np
B = np.array([[10, 7, 8.1, 7.2], [7.08, 5.04, 6, 5], [8, 5.98, 9.89, 9], [6.99, 4.99, 9, 9.98]])
b = np.array([32,23, 33, 31])
x = np.linalg.solve(B,b)
print("x=",x)
x= [-81. 137. -34. 22.]
Matrica A je loše uvjetovana!
print(np.linalg.cond(A,2))
2984.0927016757
Primjer 2¶
Pogledajmo sljedeći primjer $$A=\begin{bmatrix} 121734 & 169217& 176624& 166662\\ 169217& 235222& 245505& 231653\\ 176624 & 245505& 256423& 242029\\ 166662& 231653& 242029& 228474\end{bmatrix}\quad b=\begin{bmatrix}634237\\ 881597\\ 920581\\ 868818\end{bmatrix}$$
import numpy as np
A = np.array([[121734, 169217, 176624, 166662], [169217, 235222, 245505, 231653], [176624, 245505, 256423, 242029],
[166662, 231653, 242029, 228474]])
b = np.array([634237,881597, 920581, 868818])
x = np.linalg.solve(A,b)
print("x=",x)
x= [0.99962634 1.00022568 1.00009384 0.99994434]
Ako uzmemo da je desna strana sada $$b=\begin{bmatrix}634237\\ 881597\\ 920580\\ 868818\end{bmatrix}$$
c = np.array([634237,881597, 920580, 868818])
x = np.linalg.solve(A,c)
print("x=",x)
x= [16311462.43436891 -9851670.1992458 -4096381.1758155 2429650.2571345 ]
eig=np.linalg.eigvalsh(A)
print("Eigenvalues=", eig)
Eigenvalues= [1.06171647e-08 5.05278814e-01 2.21551535e+02 8.41630943e+05]
Matrica je loše uvjetovana! Uvjetovanost je velika.
print(np.linalg.cond(A,2))
79443499000149.31
Uvjetovanost regularne matrice¶
Ako imamo matricu $$A=\begin{bmatrix} 4.1 & 2.8\\ 9.7 & 6.6\end{bmatrix} \quad b=\begin{bmatrix} 4.1\\ 9.7 \end{bmatrix}$$
import numpy as np
A = np.array([[4.1, 2.8], [9.7, 6.6]])
b = np.array([4.1,9.7])
x = np.linalg.solve(A,b)
print("x=",x)
x= [ 1.00000000e+00 -2.63677968e-15]
Ako uzmemo $$c=\begin{bmatrix} 4.11\\ 9.70 \end{bmatrix}$$
c=np.array([4.11,9.70])
x = np.linalg.solve(A,c)
print("x=",x)
x= [0.34 0.97]
Izračunajmo uvjetovanost ove matrice u normi 1!
print(np.linalg.cond(A,1))
2249.400000000002
Skaliranje nekad može "poboljšati" uvjetovanost matrice¶
import numpy as np
A = np.array([[-4000, 2000, 2000], [2000, 0.78125, 0], [2000, 0, 0]])
b = np.array([400,1.3816, 1.9273])
x = np.linalg.solve(A,b)
print("x=",x)
#np.matmul(A,x)
x= [ 0.00096365 -0.698496 0.9004233 ]
D = np.array([[0.0005, 0, 0], [0, 1, 0], [0, 0, 1]])
B=np.matmul(D,A)
G=np.matmul(B,D)
print("G=", G)
print("Uvjetovanost matrice A je", np.linalg.cond(A,2))
print("Uvjetovanost matrice G je",np.linalg.cond(G,2))
G= [[-0.001 1. 1. ] [ 1. 0.78125 0. ] [ 1. 0. 0. ]] Uvjetovanost matrice A je 13990.621644372653 Uvjetovanost matrice G je 4.65694566419363