octave 求最值的优化方法fminunc

原创 2018-04-02 18:07 阅读(236)次

octave(matlab)中有一个fminunc方法,可以用优化算法进行求解,算法有BFGS,L-BFGS,共轭梯度法等。

fminunc有个限制,就是指能用来求参数大于等于2的(也就是二元或二元以上方程)。

如果要求一元方程的最值求解,要用fminbnd方法,本文不涉及。

fminunc方法接受2个或者3个参数:

1.  FCN     指向需要求最值的函数的指针

2.  X0        初始的参数值,可以假设如(0;0)

3.  OPTIONS      参数,目前能接受的有"FunValCheck", "OutputFcn","TolX", "TolFun", "MaxIter", "MaxFunEvals", "GradObj","FinDiffType", "TypicalX", "AutoScaling".

通用写法格式:

options = optimset('GradObj','on','MaxIter','100');
initialTheta = zeros(2,1);
[optTheta, functionVal,exitFlag] = fminunc(@costFuntion, initialTheta,options)

options就是我们提到的参数,以key/value的方式逐个设置。

initialTheta 就是X0, 初始化的参数

@costfunction 就是FCN,指向定于的函数

方法定义类似如下:

function [jVal, gradient] = costFuntion(theta)

	
	jVal =  计算代价函数的公司;

	gradient = zeros(2,1); %假设梯度参数
	
	gradient(1) = 对第1个参数的梯度(求导);
	gradient(2) = 对第2个参数的梯度(求导);
end
jval 和 gradient将是函数的返回值。


具体实现可见: 用优化算法解线性回归


本站作品的版权皆为作品作者所有。

本站文字和内容为本站编辑或翻译,部分内容属本站原创,所以转载前务必通知本站并以超链接形式注明内容来自本站,否则以免带来不必要的麻烦。

本站内容欢迎分享,但拒绝有商业目的的转载!