Software/MATLAB

[MATLAB] 함수 파라미터 default 값 설정 (arguments)

_winmin 2025. 6. 25. 11:32

Python의 경우 함수를 선언할 때 파라미터의 default 값을 설정할 수 있다.

def myFunc(a=1, b=2)

 

이렇게 말이다.

 

MATLAB에서는 python과 같은 syntax를 지원하지 않지만 비슷한 기능이 있다. 

 

arguments 키워드

위 그림은 Mathworks 에서 설명하는 arguments 키워드의 구조이다. 

함수를 선언하고, 첫 부분에 arguments~end block을 만들어준다.

Size, class. functions 등 복잡해보이는데 관심 있는 default 값 설정 방법부터 보겠다.

 

Parameter default 값 설정

defaultValue 설정 방법이다.

function [sum] = myFunc(a,b)
   arguments
       a = 1;
       b = 2;
   end
   sum = a+b;
end

 

위 구조와 같이 함수를 선언 첫 부분에 arguments~end block을 만들어준다.

block 안에서 파라미터의 default 값을 입력한다.

앞에 구조에서 본 size, class, functions 등은 입력하지 않아도 무방한 설정값인 것이다.

 

이렇게 설정해주면 함수를 호출할 때 argument 전달을 하지 않아도 default 값으로 계산되며, 다른 값을 전달시 paramter가 override 되며 계산된다. 

>> myFunc()
ans =
     3

>> myFunc(3,4)
ans =
     7

 

함수 호출 시 변수 a,b 는 포함해도 안해도 그만인 'optional' 변수가 되는 것이다.

 

<참고>

paramter 수가 많아진다면 더 이상 순서로 구분하는 게 어려워질 수 있다.

이 때 parameter를 struct 형태로 선언하면 parameter 이름으로 직접 값을 지정함으로써(name-value) 가독성을 높일 수 있다.

function [sum] = myFunc(params)
    arguments
       params.a = 1
       params.b = 2
     end
     sum = params.a + params.b;
end

 

 

params를 struct로 선언하고 struct안에 멤버 변수 a,b를 선언했다.

이렇게 되면 함수는 더 이상 순서로 arguement 값을 추론하지 못하고, 이름을 전달해줘야만한다.

>> myFunc(2)
Error using myFunc (line 1)
 myFunc(2)
        ↑
Invalid argument at position 1. A name is expected. 

>> myFunc(a=2)
ans =
     4

 

사실 parameter 수가 많지 않아도 name-value 지정이 코딩할 때 편해서 나는 주로 이 방법을 이용한다.

 

Argument validation 기능

이제 또 다른 기능을 살펴보겠다. 

arguments~end block 의 다른 기능은 전달된 argument가 이상한 값이 아닌지 validation 해주는 것이다.

함수 실행 전, argument가 올바른 자료형인지, 행렬이라면 어떤 크기인지 등 확인하고 맞지 않다면 에러를 돌려보낸다.

 

먼저 Size 와 Class 두 개를 설정해보겠다.

 

function [sum] = myFunc(a)
    arguments
        a (2,2) double % 2x2 행렬, class double
    end
    disp("Argument validated!")
end

 

 

설정해둔 크기와 맞지 않은 argument가 입력되면 에러가 뜨는 것을 확인할 수 있다.

>> myFunc([1,2])
Error using myFunc (line 3)
 myFunc([1,2])
        ↑
Invalid argument at position 1. Value must be a matrix of size 2-by-2. 

>> myFunc([1,2;3,4])
Argument validated!

 

 

 

마지막으로 Functions 설정법이다.

inputArgs 가 설정한 fuctions에 대해 error를 도출하지 않는지 확인하는 단계이다.

여기서 functions는 MATLAB 내부 함수 뿐만 아니라 사용자 정의 함수도 포함이다.

 

우선 MATLAB 내부 함수인 mustBePositive를 사용해보겠다.

function [sum] = myFunc(a)
    arguments
       a {mustBePositive} 
    end
    disp("Argument validated!")
end

 

음수의 argument를 전달했더니 에러가 난다.

>> myFunc(-1)
Error using myFunc (line 3)
 myFunc(-1)
        ↑
Invalid argument at position 1. Value must be positive. 

 

 

이번엔 mustBePositive과 똑같은 기능의 커스텀 함수를 만들어보겠다.

function myMustBePositive(x)
    if ~isnumeric(x)
       error("myMustBePositive:NotNumeric", ...
       "Value must be numeric.");
    end
    if any(x <= 0, 'all')
       error("myMustBePositive:NotPositive", ...
    "Value must be positive.");
     end
end

 

 

validation function도 내가 만든 함수로 바꿔주면

function [sum] = myFunc(a)
    arguments
       a {myMustBePostive} % custom function
    end
    disp("Argument validated!")
end

 

아까와 똑같은 결과가 나올 것이다.

 


스크립트 적다보면 자주 필요한 기능이라 자세하게 적어봤다.

쓰다보면 알게될 것이다 매우 유용한 기능임을 .. 허허..