본문 바로가기
Matlab

[Matlab] 조건을 하나씩 대입하며 작동하는 함수 만들기 : 익명함수, arrayfun, 함수 핸들

by Mene 2023. 4. 23.
반응형

함수를 만들다 보면 여러개의 입력값을 하나하나 대입하면서 어떤 조건을 만족하는 지에 따라 다른 값을 호출하는 함수를 만들 때가 있다.

 

이런 경우 arrayfun 함수를 이용해서 보다 손쉽게 원하는 함수를 만들 수 있다.

 

예를들어 input=[1 3 5 7 9]인데 input이 5보다 크면 곱하기 2를 하고, 5보다 작거나 같으면 나누기 2를 하는 함수를 만들어 보자. 원래같으면 for 구문을 이용하여 5번 반복하며 함수를 만들겠지만 arrayfun 함수를 이용해 간단하게 만들 수 있다.

 

arrayfun의 형태는 arrayfun(func, 변수)로 나타나는데 func라는 함수에 변수를 하나씩 넣어보며 결과를 도출하는 함수라고 할 수 있다.

 

이 때 func 자리에는 함수 핸들이 들어가야 한다. 

 

함수 핸들이란 함수에 대한 연결을 저장하는 데이터형으로 어느 한 함수를 다른 곳으로 전달하는 역할을 한다.

 

함수 핸들을 사용 하는 경우는 이미 만들어진 함수를 함수 핸들로 만들 수 있고, 익명함수를 나타낼 수도 있다.

 

 

 

첫번째로 위에서 제시한 예시에서 값을 넣으면 곱하거나 나누는 함수를 만들어보면 다음과 같다.

 

function Answer_1= Math_1(input)

    if input>5

        Answer_1=input*2;

    elseif input<=5

        Answer_1=input/2;

    end

end

 

 

이 함수를 arrayfun(func,변수)의 fun 자리에 넣으려면 함수 핸들을 사용하여 전달하게 되는 것이다. 

function Answer = Math(input)
 
Answer=arrayfun(@Math_1,input);
end
 
 
 
 

두번째로 만든 함수에 함수핸들을 사용하는 것이 아닌 익명함수를 사용해 바로 arrayfun(fun,변수)함수에 적용할 수도 있다.

function Answer = Math(input)
 
Answer=arrayfun(@(input) (input>5)*input*2 + (input<=5)*input/2 ,input);
 
end

여기서 (input>5)와 (input<=5)는 조건식이 참이면 1을 출력하는 것을 이용해 조건식을 만들어 볼 수 있다.

 

이런식으로 함수 핸들을 이용하여 arrayfunc에 적용하면 input이 여러개의 성분을 가지고 있을 때, 성분 하나하나씩 대입하며 출력을 도출하게 된다.

 

 

 

 

다음과 같이 code를 짰을 때 나타나는 결과는 다음과 같다.

 

input = [1 3 5 7 9];

Math(input)

  

function Answer = Math(input)

   

Answer=arrayfun(@(input) (input>5)*input*2 + (input<=5)*input/2 ,input);

 

end

 

 

이런식으로 arrayfun을 사용하면 여러개의 입력에 대한 출력을 손쉽게 얻을 수 있다.

반응형

댓글