기본 콘텐츠로 건너뛰기

[matplotlib] 등고선(Contour)

[Linear Algebra]조건수(Condition Number)

조건수(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에 의한 조건수는 numpy.linalg.cond() 함수로도 계산됩니다.

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

댓글