matlab优化函数fminunc
一起来学演化计算-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