반응형
함수를 만들다 보면 여러개의 입력값을 하나하나 대입하면서 어떤 조건을 만족하는 지에 따라 다른 값을 호출하는 함수를 만들 때가 있다.
이런 경우 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을 사용하면 여러개의 입력에 대한 출력을 손쉽게 얻을 수 있다.
반응형
'Matlab' 카테고리의 다른 글
[Matlab] logical 배열(array)? (0) | 2023.04.24 |
---|---|
[Matlab] z = f(x,y) 푸는 방법 : meshgrid (0) | 2023.04.24 |
[Matlab] 여러개의 조건에서 값 계산 : 행렬 성분끼리 곱하기, try-catch (0) | 2023.04.23 |
Matlab 실습 15.mesh, surf (0) | 2022.12.24 |
Matlab 실습 14. 3D 그래프 그리기 (0) | 2022.12.24 |
댓글