fminbnd

Encontra um mínimo local de uma função de uma variável dentro de um intervalo fixo.

Categoria: Mathematics > Optimization

Sintaxe

x = fminbnd(fun, x1, x2)

Retorna o ponto em [x1, x2] onde fun atinge um mínimo local.

x = fminbnd(fun, x1, x2, options)

Igual, com configurações criadas por optimset.

[x, fval, exitflag, output] = fminbnd(___)

Também retorna o valor mínimo, um indicador de status e uma struct com estatísticas da execução.

Descrição

O método combina a busca por seção áurea, que sempre reduz o intervalo por uma razão fixa, com a interpolação parabólica, que converge mais rápido quando a função é suave perto do mínimo. Não precisa de derivadas.

Só se garante um mínimo local, e ele pode estar em um extremo se a função continuar decrescendo até lá. Para maximizar, minimize o negativo da função.

Argumentos de entrada

fun
Handle de função que recebe um escalar e retorna um escalar.
x1, x2
Extremos finitos do intervalo de busca, com x1 < x2.
options
Struct de optimset; TolX (padrão 1e-4) e MaxIter são as opções relevantes.

Argumentos de saída

x
A posição do mínimo encontrado dentro do intervalo.
fval
Valor de fun em x.
exitflag
1 quando o método convergiu, 0 quando o limite de iterações foi atingido.
output
Struct com os campos iterations, funcCount, algorithm e message.

Exemplos

Mínimo de uma parábola

[x, fval, flag] = fminbnd(@(x) (x-2)^2 + 1, 0, 5);
fprintf('x = %.4f, f = %.4f, flag = %d\n', x, fval, flag)
Saída
x = 2.0000, f = 1.0000, flag = 1

Vale do seno

x = fminbnd(@sin, 3, 6);
fprintf('%.4f (3*pi/2 = %.4f)\n', x, 3*pi/2)
Saída
4.7124 (3*pi/2 = 4.7124)

Veja também

fminsearch fzero optimset optimget