본문 바로가기
programming language/MATLAB

MATLAB 연립 방정식 해 구하기, least square solution

by 남성 2011. 5. 8.

MATLAB 을 이용하여 다음과 같은 연립 방정식의 해를 구해 보죠.

 



위 식은 다음과 같이 matrix 의 형태로 나타낼 수 있습니다.

 

MATLAB 에서 연립방정식의 해를 구할때는 보통 \(back slash) 연산을 이용합니다.

 

A=[9 7 4; 5 16 8; 56 -2 21]; % A 값 정의

Y=[12 ; -23 ; 17]; % Y 값 정의

 

X=A\Y % x, y, z 의 해를 구함

 

위 식의 해는 다음과 같습니다.

 

X =

3.9347

2.0756

-9.4853

 

물론 다음과 같이 inv() 함수를 이용하여 구할 수도 있죠.

 

X_inverse=inv(A)*Y % inverse 함수를 이용하여 해를 구함

  

X_inverse =

3.9347

2.0756

-9.4853  


 

위 문제와 같이 A matrix 가 정방 행렬(square matrix) 이면서 nonsingular 인 경우라면 inv() 함수를 이용해도 \(back slash) 연산을 이용할 때와 동일한 결과가 나옵니다.

 

하지만 underdetermined 또는 overdetermined system 이라면 inv() 를 이용하여 해를 구할 수 없는 경우가 있습니다.

 

\(back slash) 연산은 underdetermined 또는 overdetermined system 인 경우에도 해를 구해 줍니다.

 

이때 해를 구하는 방식이 least square solution 형태의 해를 구해주는 겁니다.

 

least square solution 이란 norm(AX-Y)의 값이 최소가 되게 하는 X 값을 의미합니다.


 least square solution 을 구하는 일반적인 방법은 다음과 같으며 아래 식의 윗 첨자 H는 hermitian transpose 를 의미합니다.

 

윗 식을 matlab 명령어로 표현하면 다음과 같습니다.

 

 

hermitian transpose는 matlab에서 '(작은 따옴표)로 표현되며, matlab 에서는 윗식의 A+ 부분을 Moore-Penrose pseudoinverse of matrix 라 하며 MATLAB 에서는 pinv()라는 함수를 제공해 줍니다.

 

 

\ 연산을 이용하면 알아서 least square solution 을 구해 주기 때문에 , inv() 를 이용해서 해를 구하기 보다는 \ 를 이용하여 연립 방정식의 해를 구하는 것이 훨씬 더 편리 하고 바람직한 방법 입니다.


댓글0