MATLAB 은 기본적으로 matrix 연산을 수행 합니다.

 

element-by-element 연산을 수행하고자 하는 경우에는 보통 점(.) 을 붙여서 다음과 같이 .* 와 같이 표현하곤 하죠.

 

또한 이런 element-by-element 연산을 하기 위해서는 변수의 차원이 맞아야 합니다. 즉 같은 크기여야 합니다.

 

다음과 같이 1행 ×3 열 의 x와 3행 × 1열의 y 를 3 × 3 행열을 만든 다음에 더하고 싶을 때는

 

 

다음과 같이 구성해야 할 것입니다.

 

일단 repmat 을 사용해서 x, y 를 3×3 행열로 만들어 주고~ 다음에 더해야 에러 없이 정상적으로 element-by-element 연산을 수행 할 것입니다.

 

 

그런데 오늘 소개할 bsxfun(binary singleton expansion function) 을 활용 하면 이렇게 차원을 고려해서 맞춰줘야 하는 불편함이 줄어 듭니다.

 

위에 문제는 bsxfun() 를 써서 다음과 같이 좀더 편리하게 처리 할 수 있습니다.

 

bsxfun (function handle, x, y)

 

 

bsxfun() 를 사용하면 x, y 변수를 크기에 element-by-element 연산을 할 수 있도록 각각 사이즈를 조정해서 더하기를 해 준다는 것을 확인 할 수 있습니다.

 

아래 주소에 그 매뉴얼이 있고~ MATLAB command 창에 doc bsxfun 를 해서 매뉴얼을 학습해 보시기 바랍니다.

 

http://kr.mathworks.com/help/matlab/ref/bsxfun.html?requestedDomain=www.mathworks.com

 

function handle 에 대해 궁금하신 분들은 아래 포스팅을 참조 하시길~

 

http://iamaman.tistory.com/122

http://iamaman.tistory.com/175


오늘의 포스팅에서는 function handle 사용법의 추가 적인 내용들에 대하여 정리하겠습니다.

 

여러 함수에 대해 똑 같은 값을 적용할 때에는 function handle 을 struct classcell class 의 형태로 만들어서 이용할 수가 있습니다.



다음 수식에 대하여 struct 의 형태로 function handle 을 구성하고 그에 따른 값을 알아보죠.

 



 

다음과 같이 struct 의 형태로 표현 할 수 있고, x=-1:0.5:1 에 대한 각 수식의 값을 한번에 구할 수가 있습니다.

 

struct 에 한번에 똑 같은 값 또는 함수 등을 적용 할 때는 structfun() 함수를 이용 합니다.

 

 

위 코드를 실행하면 다음과 같은 결과를 얻을 수 있습니다.

 

ans =

f: [1 0.2500 0 0.2500 1]

g: [-1 -0.1250 1 3.1250 7]

h: [-0.8415 -0.4794 0 0.4794 0.8415]

  


 

위 수식에 대하여 cell 의 형태로 표현하고 위 x 의 범위에 대한 값을 구해 보죠.

 

cell 에 한번에 똑 같은 값 또는 함수 등을 적용 할 때는 cellfun() 함수를 이용 합니다.

 

 

위 코드에 따른 결과는 다음과 같습니다.

 

D{1} =

1.0000 0.2500 0 0.2500 1.0000

D{2} =

-1.0000 -0.1250 1.0000 3.1250 7.0000

D{3} =

-0.8415 -0.4794 0 0.4794 0.8415

  


 

마지막으로 function handle 을 두 번 이용해서 다음 수식을 표현해 보겠습니다.

 

 

적분은 quad() 함수를 이용하겠습니다.

 

quad() 함수의 사용 방법에 대해서는 아래 포스팅을 참조 하시기 바랍니다.

   

 

@ 을 두 번 써서 위 식을 표현 할 수 있습니다.

 

f = @(a,b) (quad(@(x) (x.^2 + b*x + 4), 0, a))

 

임의의 a, b 값에 대해 다음과 같은 결과가 나오는 것을 확인 할 수 있습니다.

 

>> f(1,2)

ans =

5.3333

 

>> f(4,0)

ans =

37.3333

 


MATLAB 을 사용하다 보면 특정 변수를 파일로 저장하고 싶은 경우가 있습니다.

 

다음과 같은 경우를 보죠.


 

 

 

이라는 함수 f 를 function handle 로 정의 하고 x=1:10 에 따른 y 값을 구했습니다.

 

위 함수 f 와 , y 값을 파일로 저장해서 나중에 다시 사용하고 싶다면 다음과 같이 save 명령어를 이용하여 mat 파일로 저장 하시면 됩니다.

 

 

확인을 위해 clear 명령을 통해 workspace 에서 변수를 지운 다음에

 

load fy.mat 이라는 명령어를 통해 파일을 읽어 들이면 f, y 라는 변수가 그대로 workspace 에 load 되는 것을 확인 할 수 있습니다.


'programming language > MATLAB' 카테고리의 다른 글

MATLAB function handle 추가  (0) 2011.04.25
MATLAB ordinary differential equation , ode45  (8) 2011.04.24
MATLAB nargin, nargout  (6) 2011.04.24
MATLAB laplace, inverse laplace transform  (0) 2011.04.24
MATLAB 변수를 저장 하자~ mat file  (0) 2011.04.21
MATLAB NaN  (0) 2011.04.20
MATLAB 파일 출력  (0) 2011.04.19
MATLAB 파일 읽기 importdata()  (0) 2011.04.18
MATLAB binomial r.v. generation  (4) 2011.04.17

+ Recent posts