Main Content

함수를 파라미터화하기

개요

여기에서는 fzero 또는 integral과 같은 MATLAB® 함수 함수(Function Functions)에 전달할 수 있는 수학 함수에 대한 추가 파라미터를 저장하거나 액세스하는 방법에 대해 설명합니다.

MATLAB 함수 함수(Function Functions)는 특정 값 범위에서 수학 표현식을 계산합니다. 이러한 함수는 함수 핸들(함수에 대한 포인터)을 입력값으로 받으므로 "함수 함수(Function Functions)"라 불립니다. 이들 함수는 각각 목적 함수가 특정 개수의 입력 변수를 가진다고 가정합니다. 예를 들어, fzerointegral은 정확히 하나의 입력 변수를 가지는 함수에 대한 핸들을 받습니다.

계수 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차 다항식을 정의합니다. 부모 함수는 파라미터 bc를 입력값으로 받습니다. findzeropoly를 중첩하는 이유는 중첩 함수가 부모 함수의 작업 공간을 공유하기 때문입니다. 따라서, 사용자가 findzero에 전달하는 bc의 값을 poly 함수가 액세스할 수 있습니다.

시작점 x0 = 0을 사용하여 b = 2c = 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를 만들 때 bc가 작업 공간에 있으므로 익명 함수에는 이러한 계수에 대한 입력값이 필요하지 않습니다.

익명 함수를 사용하는 경우 매개 변수 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

명령줄에 다음과 같이 bc를 정의한 후 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);

관련 항목