MATLAB算法精粹:100个实例解析与MATLAB程序优化策略分享
程序设计之优化 MATLAB
最速下降法求解无约束优化的程序
首先建立一维搜索的m文件:minWP.m如下
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function [x,minf]=minWP(f,XMAX,c1,c2,alpha,tol)
%一维搜索的Wolfe-Powell法
%作者:龚纯王正林<<精通 Matlab最优化计算>>
%f:目标函数
%XMAX:搜索最大值
%c1:可接受系数1
%c2:可接受系数2
%alpha:增大步长倍数
%tol:精度
%x:极小值点
%minf:极小值点处的函数值
format long;
if nargin==5
tol=1.0e-6;
end
if~(c1>0)||~(c1<c2)||~(c2<1)||~(XMAX>0)||~(alpha>1)
error('参数错误');
end
var=findsym(f);
df=diff(f);
f0=subs(f,var,0);
df0=subs(df,var,0);
a=0;
b=XMAX;
if b<inf
t=(a+b)/2;
else
t=10;
end
while 1
ft=subs(f,var,t);
fu=f0+c1tdf0;
if ft<=fu
dft=subs(df,var,t);
dfl=c2tdf0;
if dft>dfl
x=t;
break;
else
a=t;
if b==inf
t=t*alpha;
else
t=(a+b)/2;
end
continue;
end
else
b=t;
t=(a+b)/2;
continue;
end
end
minf=subs(f,var,t);
format short;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
然后建立最速下降法的m文件如下:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%minFD.m
function [x,minf]=minFD(f,x0,var,tol)
%最速下降法
%作者:龚纯王正林《精通Matlab最优化计算》
%目标函数:f
%初始点:x0
%自变量向量:var
%精度:tol
%所求的驻点:x
%驻点处的函数值
format long;
if nargin==3
tol=1.0e-6;
end
gradf=jacobian(f,var);%f的梯度
wucha=1;
syms lamda;
while wucha>tol
d=-subs(gradf,var,x0);
wucha=norm(d);
y=x0+lamda*d;
yf=subs(f,var,y);
%l=minHJ(yf,0,100);
l=minWP(yf,10,0.2,0.6,2);
x1=x0+l*d;
x0=x1;
end
x=x1;
minf=subs(f,var,x);
format short;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
保存后即可调用:
clear
syms x1 x2
f=1.5x1^2+0.5x2^2-x1x2-2x1
f=
3/2x1^2+1/2x2^2-x1x2-2x1
[x,mf]=minFD(f,[-2 4],[x1,x2])
x=
1.0000 1.0000
mf=
-1.0000
最优化方法及其Matlab程序设计的内容简介
设计的Matlab程序包含精确线搜索的黄金分割法和抛物线法、非精确线搜索的Armijo准则、最速下降法、牛顿法、再开始共轭梯度法、BFGS算法、DFP算法、Broyden族方法、信赖域方法、求解非线性最小二乘问题的L.M算法、解约束优化问题的乘子法、求解二次规划的有效集法、SQP子问题的光滑牛顿法以及求解约束优化问题的SQP方法等,此外,《最优化方法及其Matlab程序设计》配有丰富的例题和习题,并在附录介绍了Matlab优化工具箱的使用方法。《最优化方法及其Matlab程序设计》既注重计算方法的实用性,又注意保持理论分析的严谨性,强调数值方法的思想和原理在计算机上的实现,读者只需具备微积分、线性代数和Matlab程序设计方面的初步知识即可学习《最优化方法及其Matlab程序设计》,《最优化方法及其Matlab程序设计》可供数学与应用数学、信息与计算科学专业的本科生,应用数学、计算数学、运筹学与控制论专业的研究生,理工科相关专业的研究生,对最优化理论与算法感兴趣的教师及科技工作者阅读。
共有 0 条评论