题目:课后练习3-1
用最速下降法求
的极小值。
根据课本的算法3.1,建立grad.m文件。
function [x,val,k] = grad(fun,gfun,x0)
maxk = 5000;
rho = 0.5;sigma = 0.4;
k = 0; epsilon = 1e-5;
while(k<maxk)
g = feval(gfun,x0)
d =-g;
if(norm(d)<epsilon),break;end
m=0;mk=0;
while(m<20)
if(feval(fun,x0+rho^m*d)<feval(fun,x0)+sigma*rho^m*g'*d)
mk = m; break;
end
m = m+1;
end
x0 = x0+rho^mk*d;
k = k+1;
end
x= x0;
val = feval(fun,x0);
然后根据题目所给出的函数,给出这个函数的具体形式fun.m和梯度gfun.m
fun.m:
function f = fun(x)
f = 3*x(1)^2 + 2*x(2)^2-4*x(1)-6*x(2);
gfun.m:
function g = gfun(x)
g =[6*x(1)-4,4*x(2)-6]';
一切完成就绪之后,打开Octave,并把这三个文件所在的目录加到Octave的工作目录(可以参考以下这篇博客)。接着运行命令:
代表着输出x1,x2。
接着直接调用最速下降法的函数:
[x,val,k]=grad('fun','gfun',x0)
运行结果:
最小值约在(0.6667,1.5)处取到,为-5.8333。