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,MaxItereMaxFunEvalscontrolam a parada.
Argumentos de saída
x- O ponto encontrado, com o mesmo formato de
x0. fval- Valor de
funemx. exitflag1na convergência,0se um limite de iterações ou de avaliações interrompeu a busca.output- Struct com
iterations,funcCount,algorithmemessage.
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