fminsearch

Encontra um mínimo local de uma função de várias variáveis sem usar derivadas.

Categoria: Mathematics > Optimization

Sintaxe

x = fminsearch(fun, x0)

Parte de x0 e retorna o ponto onde fun atinge um mínimo local.

x = fminsearch(fun, x0, options)

Igual, com configurações criadas por optimset.

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

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

Descrição

fminsearch executa o método simplex de Nelder-Mead: mantém n+1 pontos de teste e, a cada passo, substitui o pior por uma reflexão, expansão ou contração através dos demais. O simplex desce a superfície e se contrai ao redor de um mínimo.

É robusto para funções irregulares ou não suaves, mas lento com muitas variáveis, e pode parar em um ponto que não é mínimo. Pontos iniciais diferentes podem dar respostas diferentes.

Argumentos de entrada

fun
Handle de função que recebe um único array (o vetor completo de incógnitas) e retorna um escalar.
x0
Estimativa inicial. Seu tamanho é o tamanho de x.
options
Struct de optimset. TolX, TolFun, MaxIter e MaxFunEvals controlam a parada.

Argumentos de saída

x
O ponto encontrado, com o mesmo formato de x0.
fval
Valor de fun em x.
exitflag
1 na convergência, 0 se um limite de iterações ou de avaliações interrompeu a busca.
output
Struct com iterations, funcCount, algorithm e message.

Exemplo

Função banana de Rosenbrock

banana = @(p) 100*(p(2) - p(1)^2)^2 + (1 - p(1))^2;
[p, fval] = fminsearch(banana, [-1.2 1]);
fprintf('p = (%.3f, %.3f), f = %.1e\n', p, fval)
Saída
p = (1.000, 1.000), f = 8.2e-10

Veja também

fminbnd fzero optimset optimget