이 페이지의 최신 내용은 아직 번역되지 않았습니다. 최신 내용은 영문으로 볼 수 있습니다.

비선형 함수에 대한 연산

함수 핸들

임의의 MATLAB® 함수에 대한 핸들을 만든 다음, 해당 함수를 참조하는 수단으로 사용할 수 있습니다. 일반적으로 함수 핸들은 인수 목록으로 다른 함수에 전달되며, 함수 핸들을 전달받은 함수는 핸들을 사용하여 해당 함수를 실행하거나 평가할 수 있습니다.

MATLAB에서 함수 핸들을 작성하려면 함수 이름 앞에 at 기호(@)를 사용합니다. 다음 예제에서는 sin 함수에 대한 함수 핸들을 만들고 이를 변수 fhandle에 할당합니다.

fhandle = @sin;

함수 이름을 사용하여 함수를 호출하는 것과 같은 방식으로 핸들을 사용하여 함수를 호출할 수 있습니다. 구문은 다음과 같습니다.

fhandle(arg1, arg2, ...);

아래 나와 있는 인수와 plot_fhandle은 함수 핸들과 데이터를 수신하고, 함수 핸들을 사용하여 y축 데이터를 생성한 다음 이를 플로팅합니다.

function plot_fhandle(fhandle, data)
plot(data, fhandle(data))

아래 나와 있는 sin 함수 핸들과 인수를 사용하여 plot_fhandle을 호출하면 그 결과로 진행되는 실행 과정에서 사인파 플롯이 생성됩니다.

plot_fhandle(@sin, -pi:0.01:pi)

함수 함수(Function Functions)

“함수 함수(Function Functions)”라는 함수 클래스는 스칼라 변수로 구성된 비선형 함수와 함께 사용됩니다. 즉, 함수 하나가 다른 함수에 대해 동작하는 것입니다. 함수 함수(Function Functions)에는 다음이 포함됩니다.

  • 해 찾기

  • 최적화

  • 구적법

  • 상미분 방정식

MATLAB에서는 비선형 함수를, 해당 함수를 정의하는 파일로 나타냅니다. 예를 들어, 다음은 matlab/demos 폴더에 있는 함수 humps의 내용을 간단히 나타낸 것입니다.

function y = humps(x)
y = 1./((x-.3).^2 + .01) + 1./((x-.9).^2 + .04) - 6;

다음을 통해 구간 0 ≤ x ≤ 1 내의 점 집합에서 이 함수를 실행해 보겠습니다.

x = 0:.002:1;
y = humps(x);

그런 후 다음을 통해 함수를 플로팅합니다.

plot(x,y)

그래프를 보면 x = 0.6 근방에서 함수가 국소 최솟값을 갖습니다. 함수 fminsearch는 함수의 최소점(함수가 최솟값을 갖게 되는 x의 값)을 구합니다. fminsearch의 첫 번째 인수는 최소화할 함수에 대한 함수 핸들이고 두 번째 인수는 최솟값을 갖는 대략적인 x의 추측값입니다.

p = fminsearch(@humps,.5)
p =
    0.6370

최소점에서 함수를 계산하면 다음과 같습니다.

humps(p)

ans =
   11.2528

수치 분석가들은 정적분의 수치 근사와 상미분 방정식의 수치 적분을 구분하기 위해 구적법적분이라는 용어를 사용합니다. MATLAB의 구적법 루틴은 quadquadl입니다. 다음 명령문은

Q = quadl(@humps,0,1)

그래프에서 곡선 아래 부분의 면적을 계산하며 그 결과로 다음과 같은 결과가 생성됩니다.

Q =
   29.8583

결과적으로, 그래프에서는 함수가 이 구간에서 0인 적이 없음을 보여줍니다. 따라서 다음을 통해 0을 찾으면(해를 구하면)

z = fzero(@humps,.5)

구간 외부에 하나가 있음을 확인하게 됩니다.

z =
   -0.1316