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ão1e-4) eMaxItersão as opções relevantes.
Argumentos de saída
x- A posição do mínimo encontrado dentro do intervalo.
fval- Valor de
funemx. exitflag1quando o método convergiu,0quando o limite de iterações foi atingido.output- Struct com os campos
iterations,funcCount,algorithmemessage.
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)