Octave function "fminunc()" 求最小成本函数

自定义函数 costFunction.m

function [jVal, gradient] = costFunction(theta)
  jVal = (theta(1) -5)^2 + (theta(2) - 5)^2;
  gradient = zeros(2, 1);
  gradient(1) = 2*(theta(1) - 5);
  gradient(2) = 2*(theta(2) - 5);
end

Octave 命令

Then we can use octave’s “fminunc()” optimization algorithm along with the “optimset()” function that creates an object containing the options we want to send to “fminunc()”. (Note: the value for MaxIter should be an integer, not a character string )

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

fminunc表示Octave里无约束最小化函数,调用这个函数时,需要传入一个存有配置信息的变量options。上面的代码中,我们的设置项中’GradObj’, ‘on’,代表设置梯度目标参数为打开状态(on),这也意味着你现在确实要给这个算法提供一个梯度。’MaxIter’, ‘100’代表设置最大迭代次数为100次。initialTheta代表我们给出的一个θ的猜测初始值。

然后我们调用fminunc这个函数,传入三个参数,其中第一个参数@costFunction这里的@符号代表指向之前我们定义的costFunction函数的指针。后面两个参数分别是我们定义的thetatheta初始值和配置信息options。

实验结果

Octave function

一般化

Octave function

参考资料

http://study.163.com/course/courseLearn.htm?courseId=1004570029#/learn/video?lessonId=1051058414&courseId=1004570029

https://blog.csdn.net/afanyusong/article/details/77451391

https://octave.sourceforge.io/octave/function/fminunc.html

你可能感兴趣的:(a)