共轭梯度法求任意函数的极小值
(2013-04-02 10:08:01)分类: matlab |
%共轭梯度法求函数的极小值
function [minf,optPoint]=conjGM(objFun)
%极小值minf
%最优解optPoint
syms w x y z;
v=[w;x;y;z];%变量向量,对应于目标函数objFun中的变量
f=objFun(v);
gradf=gradient(f);%函数的梯度
epsilon=1e-3;%最小误差
x1=[0
yj=x1;
dj=-subs(gradf,v,yj);%搜索方向
k=0;%统计循环次数
while norm(subs(gradf,v,yj))>=epsilon
end
disp(k)
minf=subs(f,v,yj);%函数的最小值
optPoint=yj;
end
%%牛顿法一维搜索
function [optV,optPoint]=newton(objFun,x0)
%目标函数objFun为一元函数,x0为起始点
epsilon=1e-5;%设定最小误差
syms x;
f=objFun(x);
df=diff(f,'x');%一阶导数
dff=diff(f,2);%二阶导数
xk=x0;
t=subs(df,x,xk);
while
end
optV=objFun(xk);
optPoint=xk;
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%示例运行结果如下:
>> f=@(x)((x(1)-2).^4+(x(2)+3).^4+(x(3)-5).^4+(x(4)-7).^4+20);
>> [minf,optPoint]=conjGM(f)
minf =
optPoint =