Main Content

fminbnd

고정 구간에서 일변수 함수의 최솟값 구하기

설명

fminbnd는 다음으로 지정된 문제의 최솟값을 구하는 1차원 최소화 함수입니다.

minxf(x) such that x1<x<x2.

x, x1, x2는 유한한 스칼라이고, f(x)는 스칼라를 반환하는 함수입니다.

예제

x = fminbnd(fun,x1,x2)는 구간 x1 < x < x2에서 fun에 정의된 스칼라 값 함수의 국소 최소점에 해당하는 x 값을 반환합니다.

예제

x = fminbnd(fun,x1,x2,options)options에 지정된 최적화 옵션을 사용하여 최솟값을 구합니다. 이 옵션을 설정하려면 optimset을 사용하십시오.

x = fminbnd(problem)problem의 최솟값을 구합니다. 여기서 problem은 구조체입니다.

예제

[x,fval] = fminbnd(___)는 임의의 입력 인수에 대해 fun에서 계산된 목적 함수의 값을 해 x에 반환합니다.

[x,fval,exitflag] = fminbnd(___)는 종료 상황을 설명하는 값 exitflag를 추가로 반환합니다.

예제

[x,fval,exitflag,output] = fminbnd(___)는 최적화에 대한 정보가 포함된 구조체 output을 추가로 반환합니다.

예제

모두 축소

sin(x) 함수가 범위 0<x<2π에서 최솟값을 갖는 점을 찾습니다.

fun = @sin;
x1 = 0;
x2 = 2*pi;
x = fminbnd(fun,x1,x2)
x = 4.7124

정답 x=3π/2와 동일합니다.

3*pi/2
ans = 4.7124

개별 함수 파일로 지정된 함수를 최소화합니다. 이 함수는 점 x를 받고 x에서 계산된 목적 함수의 값, 실수형 스칼라를 반환합니다.

다음 함수를 파일로 작성한 다음 MATLAB® 경로에 scalarobjective.m으로 저장합니다.

function f = scalarobjective(x)
f = 0;
for k = -10:10
    f = f + (k+1)^2*cos(k*x)*exp(-k^2/2);
end

구간 1 <= x <= 3에서 scalarobjective의 최솟값을 갖는 x를 찾습니다.

x = fminbnd(@scalarobjective,1,3)
x =

    2.0061

추가 파라미터를 갖는 함수를 최소화합니다. 함수 sin(x-a)의 최솟값은 파라미터 a의 값에 따라 달라집니다. 파라미터 a의 값을 포함하는 x의 익명 함수를 만듭니다. 구간 0<x<2π에서 이 함수를 최소화합니다.

a = 9/7;
fun = @(x)sin(x-a);
x = fminbnd(fun,1,2*pi)
x = 5.9981

올바른 답이 반환되었으며, 이론적인 값은 다음과 같습니다.

3*pi/2 + 9/7
ans = 5.9981

추가 파라미터를 포함하는 방법에 대한 자세한 내용은 함수를 파라미터화하기 항목을 참조하십시오.

fminbnd0<x<2π에 대해 sin(x) 함수를 최소화하기 위해 수행하는 단계를 모니터링합니다.

fun = @sin;
x1 = 0;
x2 = 2*pi;
options = optimset('Display','iter');
x = fminbnd(fun,x1,x2,options)
 
 Func-count     x          f(x)         Procedure
    1        2.39996      0.67549        initial
    2        3.88322     -0.67549        golden
    3        4.79993    -0.996171        golden
    4        5.08984    -0.929607        parabolic
    5        4.70582    -0.999978        parabolic
    6         4.7118           -1        parabolic
    7        4.71239           -1        parabolic
    8        4.71236           -1        parabolic
    9        4.71242           -1        parabolic
 
Optimization terminated:
 the current x satisfies the termination criteria using OPTIONS.TolX of 1.000000e-04 
x = 4.7124

0<x<2π에서 sin(x)가 최솟값을 갖는 위치와 그 최솟값을 구합니다.

fun = @sin;
[x,fval] = fminbnd(fun,1,2*pi)
x = 4.7124
fval = -1.0000

모든 출력값을 요청하여 fminbnd 풀이 과정에 대한 모든 정보를 반환합니다. 또한, 플롯 함수를 사용하여 풀이 과정을 모니터링합니다.

fun = @sin;
x1 = 0;
x2 = 2*pi;
options = optimset('PlotFcns',@optimplotfval);
[x,fval,exitflag,output] = fminbnd(fun,x1,x2,options)

Figure Optimization Plot Function contains an axes object. The axes object with title Current Function Value: -1, xlabel Iteration, ylabel Function value contains an object of type scatter.

x = 4.7124
fval = -1.0000
exitflag = 1
output = struct with fields:
    iterations: 8
     funcCount: 9
     algorithm: 'golden section search, parabolic interpolation'
       message: 'Optimization terminated:...'

입력 인수

모두 축소

최소화할 함수로, 함수 핸들이나 함수 이름으로 지정됩니다. fun은 실수형 스칼라 x를 받고 실수형 스칼라 f를 반환하는 함수입니다. 즉, x에서 계산되는 목적 함수입니다.

다음과 같이 fun을 파일에 대한 함수 핸들로 지정합니다.

x = fminbnd(@myfun,x1,x2)

여기서 myfun은 다음과 같은 MATLAB® 함수입니다.

function f = myfun(x)
f = ...            % Compute function value at x

다음과 같이 fun을 익명 함수에 대한 함수 핸들로 지정할 수도 있습니다.

x = fminbnd(@(x)norm(x)^2,x1,x2);

예: fun = @(x)-x*exp(-3*x)

데이터형: char | function_handle | string

하한으로, 유한 실수형 스칼라로 지정됩니다.

예: x1 = -3

데이터형: double

상한으로, 유한 실수형 스칼라로 지정됩니다.

예: x2 = 5

데이터형: double

최적화 옵션으로, optimset 등이 반환하는 구조체로 지정됩니다. optimset을 사용하여 options 구조체에서 다음 필드의 값을 설정하거나 변경할 수 있습니다. 자세한 내용은 최적화 옵션 설정하기 항목을 참조하십시오.

Display

표시 수준(최적화 솔버 반복 표시 참조):

  • 'notify'(디폴트 값)는 함수가 수렴하지 않는 경우에만 출력값을 표시합니다.

  • 'off' 또는 'none'은 출력값을 표시하지 않습니다.

  • 'iter'은 각 반복마다 출력값을 표시합니다.

  • 'final'은 최종 출력값만 표시합니다.

FunValCheck

목적 함수 값이 유효한지 여부를 확인합니다. 디폴트 값인 'off'는 목적 함수가 complex 또는 NaN 값을 반환하는 경우에도 fminbnd가 계속 진행하도록 허용합니다. 'on'으로 설정해 두면 목적 함수가 complex 또는 NaN 값을 반환하는 경우 오류가 발생됩니다.

MaxFunEvals

허용되는 최대 함수 실행 횟수로, 양의 정수입니다. 디폴트 값은 500입니다. 허용오차와 중지 조건 항목을 참조하십시오.

MaxIter

허용되는 최대 반복 횟수로, 양의 정수입니다. 디폴트 값은 500입니다. 허용오차와 중지 조건 항목을 참조하십시오.

OutputFcn

최적화 함수가, 각 반복마다 함수 핸들 또는 함수 핸들로 구성된 셀형 배열로 호출하는, 하나 이상의 사용자 정의 함수를 지정합니다. 디폴트 값은 없음([])입니다. 최적화 솔버 출력 함수 항목을 참조하십시오.

PlotFcns

알고리즘이 실행되는 동안 다양한 진행률 측정값을 플로팅합니다. 미리 정의된 플롯에서 선택하거나 사용자가 직접 작성할 수 있습니다. 함수 이름, 함수 핸들 또는 함수 이름이나 함수 핸들로 구성된 셀형 배열을 전달합니다. 디폴트 값은 없음([])입니다.

  • @optimplotx는 현재 점을 플로팅합니다.

  • @optimplotfunccount는 함수 평가 수를 플로팅합니다.

  • @optimplotfval은 함수 값을 플로팅합니다.

사용자 지정 플롯 함수를 작성하는 방법에 대한 자세한 내용은 최적화 솔버 플롯 함수 항목을 참조하십시오.

TolX

x에 대한 종료 허용오차로, 양의 스칼라입니다. 디폴트 값은 1e-4입니다. 허용오차와 중지 조건 항목을 참조하십시오.

예: options = optimset('Display','iter')

데이터형: struct

문제 구조체로, 다음 필드를 가진 구조체로 지정됩니다.

필드 이름항목

objective

목적 함수

x1

왼쪽 끝점

x2

오른쪽 끝점

solver

'fminbnd'

options

optimset에서 반환되는 options 구조체

데이터형: struct

출력 인수

모두 축소

해로, 실수형 스칼라로 반환됩니다. 일반적으로 xexitflag가 양수인 경우 문제에 대한 국소해입니다.

해에서 계산된 목적 함수 값으로, 실수로 반환됩니다. 일반적으로 fval = fun(x)입니다.

fminbnd가 중지된 이유로, 정수로 반환됩니다.

1

함수가 해 x로 수렴되었습니다.

0

반복 횟수가 options.MaxIter를 초과하거나, 함수 실행 횟수가 options.MaxFunEvals를 초과했습니다.

-1

출력 함수나 플롯 함수에 의해 중지되었습니다.

-2

범위에 모순이 있습니다. 즉, x1 > x2입니다.

최적화 과정에 대한 정보로, 다음 필드를 가진 구조체로 반환됩니다.

iterations

수행된 반복 횟수

funcCount

함수 실행 횟수

algorithm

'golden section search, parabolic interpolation'

message

종료 메시지

제한 사항

  • 최소화할 함수는 연속 함수여야 합니다.

  • fminbnd는 국소해만 제공할 수 있습니다.

  • fminbnd는 해가 구간의 경계에 있는 경우 느린 수렴을 보일 수 있습니다.

알고리즘

fminbnd는 함수 파일입니다. 이 알고리즘은 황금분할 탐색과 포물선 보간을 기반으로 합니다. 왼쪽 끝점 x1이 오른쪽 끝점 x2와 매우 가깝지 않는 한 fminbnd는 끝점에서 fun을 계산하지 않으므로 fun은 x의 구간 x1 < x < x2에 대해서만 정의되면 됩니다.

최솟값이 사실상 x1 또는 x2에서 발생하는 경우, fminbnd는 구간(x1,x2) 내 최소점에 가까운 점을 x로 반환합니다. 이 경우 최소점과 x의 거리는 2*(TolX + 3*abs(x)*sqrt(eps))를 초과하지 않습니다. 알고리즘에 대한 자세한 내용은 [1] 또는 [2]를 참조하십시오.

대체 기능

최적화 라이브 편집기 작업은 fminbnd에 대한 시각적 인터페이스를 제공합니다.

참고 문헌

[1] Forsythe, G. E., M. A. Malcolm, and C. B. Moler. Computer Methods for Mathematical Computations. Englewood Cliffs, NJ: Prentice Hall, 1976.

[2] Brent, Richard. P. Algorithms for Minimization without Derivatives. Englewood Cliffs, NJ: Prentice-Hall, 1973.

확장 기능

버전 내역

R2006a 이전에 개발됨