비선형 함수에 대한 연산
함수 핸들(Function Handle)
임의의 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의 구적법 루틴은 quad
와 quadl
입니다. 다음 명령문은
Q = quadl(@humps,0,1)
그래프에서 곡선 아래 부분의 면적을 계산하며 그 결과로 다음과 같은 결과가 생성됩니다.
Q = 29.8583
결과적으로, 그래프에서는 함수가 이 구간에서 0인 적이 없음을 보여줍니다. 따라서 다음을 통해 0을 찾으면(해를 구하면)
z = fzero(@humps,.5)
구간 외부에 하나가 있음을 확인하게 됩니다.
z = -0.1316