一起来学演化计算-matlab优化函数fminunc

时间:2022-07-23
本文章向大家介绍一起来学演化计算-matlab优化函数fminunc,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

fminunc

  • 求无约束多变量函数的最小值
  • 非线性编程求解器
  • 找到指定问题的最小值,
min_{x}f(x)

,其中f(x)是一个返回一个标量的函数,x是一个向量或者矩阵。

语法

  • x = fminunc(fun,x0)
  • x = fminunc(fun,x0,options)
  • x = fminunc(problem)
  • [x,fval] = fminunc( ___ )
  • [x,fval,exitflag,output] = fminunc( __ )
  • [x,fval,exitflag,output,grad,hessian] = fminunc( ___ )

表示和描述

  • x = fminunc(fun,x0)从x0点开始,尝试找到fun中描述的函数的一个局部最小x。点x0可以是标量、向量或矩阵。
  • Note fminunc适用于无约束的非线性问题。如果您的问题有约束,通常使用fmincon。参见优化决策表。
  • x = fminunc(fun,x0,options)通过选项中指定的优化选项最小化乐趣。使用 optimoptions 设置这些选项。
  • x = fminunc(problem)找到问题的最小值,其中问题是 Input Arguments 中描述的结构。
  • [x,fval] = fminunc( __ ),对于任何语法,返回目标函数在解x处的值
  • [x,fval,exitflag,output] = fminunc()另外返回一个描述fminunc退出条件的exitflag值,以及一个包含优化过程信息的结构输出
  • [x,fval,exitflag,output,grad,hessian] = fminunc( __ )另外返回:
    • 梯度-解x处的梯度。
    • Hessian- 解决方案x的x1和x2的偏导。
    Hessian=H _ { i j } = frac { partial ^ { 2 } f } { partial x _ { i } partial x _ { j } }

示例

最小化一个多项式

求函数梯度

使用问题结构

  • 此和上一节的内容相同,但是使用了问题结构的模型,即为problem设置options,x0,objective,solver然后使用fminunc函数优化问题。
problem.options = options;
problem.x0 = [-1,2];
problem.objective = @rosenbrockwithgrad;
problem.solver = 'fminunc';

获取最佳的目标函数值

  • 没看出和第一个例子有什么区别,但是我感觉第一个函数是能够计算得到梯度的,而这个函数则不能够直接计算出梯度信息

检查解决方案过程

  • 可以输出优化过程和各种参数

输入参数

Fun 需要被优化的函数

X0 初始点

选项

所有算法

  • 寻优算法
  • 如果函数能够提供梯度则选择"trust-region"选项,否则选择 拟牛顿法 -"quasi-newton"
  • 梯度检查
  • 显示
  • 有限差分类型和步长
  • 函数终止
  • 迭代调用其他函数
  • 画出结果
  • 自定义梯度函数
  • TypicalX

trust-region算法

quasi-Newton

Problem

输出参数