조건수(Condition Number)
조건수는 다중항들에 대한 영향을 나타냅니다. 예를 들어 y=f(x)의 함수에서 x의 변화률에 따른 y의 변화률을 나타내는 수로서 함수의 민감도를 측정하는 지표입니다. 행렬A와 벡터b 사이에 식 1과 같은 선형결합이 성립할 경우 b의 변화로 x가 변화함을 알 수 있습니다.
$$Ax=b \rightarrow A(x+\Delta x)=b+\Delta b$$ | (식 1) |
위 행렬노름을 선형결합에 적용하면 식 2와 같이 나타낼 수 있습니다.
\begin{align}&b=Ax \Rightarrow \|b\| \leq \|A\| \|x\|\\& \Delta x = A^{-1}\Delta b \Rightarrow \|\Delta x\| \leq \|A^{-1}\| \|\Delta b\| \end{align} | (식 2) |
위 식 2의 위항과 아래항을 식 3과 같이 변화율로 나타낼 수 있습니다.
$$\frac{\|\Delta x\|}{\|A\| \|x\|} \leq \frac{\|A^{-1}\| \|\Delta b\|}{\|b\|} \Rightarrow \frac{\|\Delta x\|}{\|x\|} \leq \color{red}{\|A^{-1}\| \|A\|} \frac{\|\Delta b\|}{\|b\|}$$ | (식 3) |
A-1은 A의 역행렬입니다.
위 식 3의 빨간색으로 표시한 부분이 행렬 A의 조건수(condition number)이며 cond(A)로 나타냅니다(식 4).
$$\text{cond (A)}=\|A^{-1}\| \|A\|$$ | (식 4) |
식 4에 의한 조건수는
a = np.array([[1, 0, -1], [0, 1, 0], [1, 0, 1]]);a
array([[ 1, 0, -1], [ 0, 1, 0], [ 1, 0, 1]])
aInv=la.inv(a);aInv
array([[ 0.5, 0. , 0.5], [ 0. , 1. , 0. ], [-0.5, 0. , 0.5]])
conNum=la.norm(aInv, 'fro')*la.norm(a, 'fro'); conNum
3.1622776601683795
la.cond(a, 'fro')
3.1622776601683795
댓글
댓글 쓰기