함수를 파라미터화하기
개요
여기에서는 fzero
또는 integral
과 같은 MATLAB® 함수 함수(Function Functions)에 전달할 수 있는 수학 함수에 대한 추가 파라미터를 저장하거나 액세스하는 방법에 대해 설명합니다.
MATLAB 함수 함수(Function Functions)는 특정 값 범위에서 수학 표현식을 계산합니다. 이러한 함수는 함수 핸들(함수에 대한 포인터)을 입력값으로 받으므로 "함수 함수(Function Functions)"라 불립니다. 이들 함수는 각각 목적 함수가 특정 개수의 입력 변수를 가진다고 가정합니다. 예를 들어, fzero
와 integral
은 정확히 하나의 입력 변수를 가지는 함수에 대한 핸들을 받습니다.
계수 b와 c의 다양한 값에 대해 3차 다항식 x3 +
bx +
c의 영점(Zero)을 구하고자 한다고 가정하겠습니다. 3개의 입력 변수(x, b 및 c)를 받는 함수를 만들 수 있더라도 이러한 입력값 3개를 모두 필요로 하는 함수 핸들을 fzero
에 전달할 수는 없습니다. 하지만, 익명 함수나 중첩 함수의 특성을 잘 활용하면 추가 입력값을 정의하는 게 가능할 수도 있습니다.
중첩 함수를 사용하여 파라미터화하기
파라미터를 정의하는 한 가지 방법은 프로그램 파일에서 다른 함수 내에 완전히 포함된 함수인 중첩 함수를 사용하는 것입니다. 이 예제에서는 부모 함수 findzero
와 중첩 함수 poly
를 포함하는 findzero.m
이라는 파일을 만듭니다.
function y = findzero(b,c,x0) y = fzero(@poly,x0); function y = poly(x) y = x^3 + b*x + c; end end
중첩 함수는 하나의 입력 변수 x
를 포함하는 3차 다항식을 정의합니다. 부모 함수는 파라미터 b
와 c
를 입력값으로 받습니다. findzero
에 poly
를 중첩하는 이유는 중첩 함수가 부모 함수의 작업 공간을 공유하기 때문입니다. 따라서, 사용자가 findzero
에 전달하는 b
와 c
의 값을 poly
함수가 액세스할 수 있습니다.
시작점 x0 = 0
을 사용하여 b = 2
와 c = 3.5
에서 다항식의 영점을 구하려면 명령줄에서 findzero
를 호출하면 됩니다.
x = findzero(2,3.5,0)
x = -1.0945
익명 함수를 사용하여 파라미터화하기
추가 파라미터에 액세스할 수 있는 또 다른 접근 방식은 익명 함수를 사용하는 것입니다. 익명 함수는 별도의 프로그램 파일을 만들지 않고 단일 명령으로 정의할 수 있는 함수입니다. 익명 함수는 현재 작업 공간에서 사용할 수 있는 모든 변수를 사용할 수 있습니다.
예를 들어, 다음과 같이 3차 다항식을 설명하는 익명 함수에 대한 핸들을 만들고 영점(Zero)을 구한다고 가정하겠습니다.
b = 2; c = 3.5; cubicpoly = @(x) x^3 + b*x + c; x = fzero(cubicpoly,0)
x = -1.0945
변수 cubicpoly
는 하나의 입력값 x
를 가지는 익명 함수에 대한 함수 핸들입니다. 익명 함수의 입력값은 함수 핸들을 만드는 @
기호 바로 다음에 괄호로 묶여 표시됩니다. cubicpoly
를 만들 때 b
와 c
가 작업 공간에 있으므로 익명 함수에는 이러한 계수에 대한 입력값이 필요하지 않습니다.
익명 함수를 사용하는 경우 매개 변수 cubicpoly
를 반드시 생성해야 하는 것은 아닙니다. 대신, fzero
호출 구문에 함수 핸들에 대한 전체 정의를 바로 포함시킬 수 있습니다.
b = 2; c = 3.5; x = fzero(@(x) x^3 + b*x + c,0)
x = -1.0945
익명 함수를 사용하여 함수 파일에 정의해 둔 더 복잡한 목적 함수를 호출할 수도 있습니다. 예를 들어, 다음 함수 정의를 포함하는 cubicpoly.m
이라는 파일을 가지고 있다고 가정하겠습니다.
function y = cubicpoly(x,b,c) y = x^3 + b*x + c; end
명령줄에 다음과 같이 b
와 c
를 정의한 후 cubicpoly
를 불러오는 익명 함수를 사용하여 fzero
를 호출합니다.
b = 2; c = 3.5; x = fzero(@(x) cubicpoly(x,b,c),0)
x = -1.0945
참고
파라미터의 값을 변경하려면 새 익명 함수를 만들어야 합니다. 예를 들면 다음과 같습니다.
b = 10; c = 25; x = fzero(@(x) x^3 + b*x + c,0);