본문 바로가기
programming language/MATLAB

MATLAB - vectorize()

by __observer__ 2010. 1. 1.
반응형

MATLAB 수식 작성 중 초보자들이 많이 틀리는 부분이 element 간의 계산에 대한 부분인 것 같다.

x=[1:10]    

x = 1 2 3 4 5 6 7 8 9 10

y=[1:10]

y = 1 2 3 4 5 6 7 8 9 10

위와 같은 변수가 있고, x와 y의 element 간의 곱을 하기 위하여

z=x*y 라는 명령어를 넣고 결과가 나오기를 기대하는 것은 MATLAB 의 operator 에 대하여 정확한 이해가 되지 않은 사람들이 하는 실수이다.

MATLAB 은 기본적으로 매트릭스 연산을 기준으로 한다. 위에 설정한 변수 x, y 는 둘 다 1행 10열의 벡터이므로 x*y의 매트릭스 곱은 성립될 수 없다. element 간의 곱을 하려면 연산자 앞에 . 을 붙여야 한다.


z=x.*y 라는 명령어를 command 창에 넣어보면 정상적인 결과 값을 볼 수가 있을 것이다.


위의 예에서와 같은 비교적 간단한 경우는 문제 될게 없다.


하지만 비교적 복잡한 아래와 같은 예에서는 일일이 연산자 앞에 . 을 붙이는 것이 불편하게 느껴질 때가 있다.


z=x^2*y^2+3*x^5*y  

??? Error using ==> mpower

Matrix must be square.


이러한 경우 vectorize()라는 함수를 이용하면 쉽게 해결 된다.


q=vectorize('x^2*y^2+3*x^5*y')

   q = x.^2.*y.^2+3.*x.^5.*y


위의 q 라는 변수는 char 변수이다. 따라서 값을 얻기 위해서는 이에 대한 evaluation 필요하며 이를 행해주는 함수가 바로 eval() 이다.


z=eval(q)  

z = 4 208 2268 12544 47500 141264 355348 790528 1600884 3010000


위와 같이 정상적인 결과를 얻을 수 있다.

반응형

댓글