【最优化方法】实验三 无约束最优化方法的MATLAB实现

实验的目的和要求:通过本次实验使学生进一步熟悉掌握使用MATLAB软件,并能利用该软件进行无约束最优化方法的计算。

实验内容:

1、最速下降法的MATLAB实现

2、牛顿法的MATLAB实现

3、共轭梯度法的MATLAB实现

学习建议:

本次实验就是要通过对一些具体问题的分析进一步熟悉软件的操作并加深对理论知识的理解。

重点和难点:

通过同一个具体问题用不同的方法解决的比较,加深理解恰当选用优化问题解决方法的重要性。

一 最速下降法

1.最速下降法基本原理和步骤

img 思想:寻求最速下降方向即负梯度方向

img

MATLAB实现:

2.代码及数值算例:

(1) 程序源代码:

function [ X,FMIN,K ] = zuisuxiajiang( f,x,x0,e )

%  [ X,FMIN,N ] =zuisuxiajiang()法求解无约束问题

%  X     极小点

%  FMIN   极小值

%  K     迭代次数

%  f     问题函数

%  x     变量

%  x0    初始点

%  e     终止误差

%  张超编写于2014/04/15 

count=0;

td=jacobian(f,x)';

while norm(subs(td,x,x0))>e

  P=-subs(td,x,x0);

  syms r

  y=x0+r*P;

  ft(r)=subs(f,x,y);    

  [r0]=fibonacci(ft,0,100,0.01);

  x0=x0+r0*P;

  count=count+1;

end

X=x0;

FMIN=subs(f,x,x0);

K=count;

 

end

二 牛顿法

1.牛顿法基本原理和步骤

思想:在第k次迭代的迭代点x(k)邻域内,用一个二次函数(如二阶泰勒多项式)去近似代替原目标函数f(x),然后求出该二次函数的极小点作为对原目标函数求优的下一个迭代点,依次类推,通过多次重复迭代,使迭代点逐步逼近原目标函数的极小点。

设*f(x)*二次连续可微,在点 x(k) 处的Hesse矩阵正定。

img

MATLAB实现:

2.代码及数值算例:

(2) 程序源代码:

function [ X,FMIN,K ] = ysNewton( f,x,x0,e )

%  [ X,FMIN,N ] =ysNewton()原始牛顿法求解无约束问题

%  X     极小点

%  FMIN   极小值

%  K     迭代次数

%  f     问题函数

%  x     变量

%  x0    初始点

%  e     终止误差

%  张超编写于2014/04/15

count=0;

td=jacobian(f,x)';

H=jacobian(td',x);

while norm(subs(td,x,x0))>e

  P=-subs(H,x,x0)^(-1)*subs(td,x,x0);

  x0=x0+P;

  count=count+1;

end

X=x0;

FMIN=subs(f,x,x0);

K=count;

end

牛顿法对于二次正定函数只需做一次迭代就得到最优解。特别在极小点附近,收敛性很好速度也很快。

但牛顿法也有缺点,它要求初始点离最优解不远,若初始点选的离最优解太远时,牛顿法并不能保证其收敛,甚至也不是下降方向。

为了克服牛顿法的缺点,人们保留了从牛顿法中选取牛顿方向作为搜索方向,摒弃其步长恒取1的作法,而用一维搜索确定最优步长来构造算法。

img

(3) 程序源代码:

function [ X,FMIN,K ] = xzNewton( f,x,x0,e )

%  [ X,FMIN,N ] =xzNewton()带步长牛顿法求解无约束问题

%  X     极小点

%  FMIN   极小值

%  K     迭代次数

%  f     问题函数

%  x     变量

%  x0    初始点

%  e     终止误差

%  张超编写于2014/04/15

count=0;

td=jacobian(f,x)';

H=jacobian(td',x);

while norm(subs(td,x,x0))>e

  P=-subs(H,x,x0)^(-1)*subs(td,x,x0);

  syms r

  y=x0+r*P;

  ft(r)=subs(f,x,y);    

  [r0]=fibonacci(ft,0,100,0.01);

  x0=x0+r0*P;

  count=count+1;

end

X=x0;

FMIN=subs(f,x,x0);

K=count;

 

end

三 共轭梯度法

1.共轭梯度法基本原理和步骤

思想:将共轭性和最速下降方向相结合,利用已知迭代点处的梯度方向构造一组共轭方向,并沿此方向进行搜索,求出函数的极小点。

img

MATLAB实现:

2.代码及数值算例:

(1) 程序源代码:

function [ X,FMIN,K ] = gongetidu( f,x,x0,e )

%  [ X,FMIN,N ] =gongetidu()共轭梯度法求解无约束问题

%  X     极小点

%  FMIN   极小值

%  K     迭代次数

%  f     问题函数

%  x     变量

%  x0    初始点

%  e     终止误差

%  张超编写于2014/04/15

count=1;

td=jacobian(f,x)';

H=jacobian(td',x);

if norm(subs(td,x,x0))>e

  P=-subs(td,x,x0);

  r0=-subs(td,x,x0)'*P/(P'*H*P);

  x0=x0+r0*P;

else 

  x0;

end

  

while norm(double(subs(td,x,x0)))>e

  b0=subs(td,x,x0)'*subs(td,x,x0)/(P'*P);

  P=-subs(td,x,x0)+b0*P;

  r0=-subs(td,x,x0)'*P/(P'*H*P);

  x0=x0+r0*P;

  count=count+1;

end

X=x0;

FMIN=subs(f,x,x0);

K=count;

 

end

四 一个算例

分别用上述三中方法计算下题,并比较各算法.

Min f(x)=(x1 - 2)^2 + (x1 – 2*x2)^2

初始点x0=(0,3)T

允许误差e=0.1

键入命令并输出结果:

syms x1 x2

\>> f=(x1-2)^2+(x1-2*x2)^2;

\>> x=[x1;x2];

\>> x0=[0;3];

\>> e=0.1;

  [X,FMIN,N]=zuisuxiajiang(f,x,x0,e)

 

X =

  1.9763

  0.9818

FMIN =

  7.2076e-04

N =

  10

 

\>> [X,FMIN,N]=ysNewton(f,x,x0,e)

X =

   2

   1

FMIN =

   0

N =

   1

 

[X,FMIN,N]=gongetidu(f,x,x0,e)

 

X =

 2

 1

FMIN =

0

N =

   2

由上述结果我们发现:

对于二次正定函数newton法只需一次迭代就得到正确结果,共轭梯度法只需进行两次(因为目标函数是二元函数)迭代就得出正确结果。但最速下降法却迭代了10次,虽然一维搜索存在误差,但实际上最速下降法也需迭代多次。

matlab最优化程序包括:无约束一维极值问题、进退法、黄金分割法、斐波那契法、牛顿法基本牛顿法、全局牛顿法、割线法、抛物线法、次插值法、可接受搜索法、Goidstein法、Wolfe Powell法、单纯形搜索法、Powell法、最速下降法、共轭梯度法、牛顿法、修正牛顿法、拟牛顿法、信赖域法、显式最速下降法、Rosen梯度投影法、罚函数法、外点罚函数法、內点罚函数法、混合罚函数法、乘子法、G-N法、修正G-N法、L-M法、线性规划、单纯形法、修正单纯形法、大M法、变量有界单纯形法、整数规划、割平面法、分支定界法、0-1规划、二次规划、拉格朗曰法、起作用集算法、路径跟踪法、粒子群优化算法、基本粒子群算法、带压缩因子的粒子群算法、权重改进的粒子群算法、线性递减权重法、自适应权重法、随机权重法、变学习因子的粒子群算法、同步变化的学习因子、异步变化的学习因子、二阶粒子群算法、二阶振荡粒子群算法 (matlab optimization process includes Non-binding one-dimensional extremum problems Advance and retreat method Golden Section Fibonacci method of basic Newton s method Newton s method Newton s Law of the global secant method parabola method acceptable to the three interpolation search method Goidstein France Wolfe.Powell France Simplex search method Powell steepest descent method Conjugate gradient method Newton s method Newton s method to amend Quasi-Newton Method trust region method explicitly steepest descent method, Rosen gradient projection method Penalty function method outside the penalty function method within the penalty function method Mixed penalty function multiplier method G-N was amended in G-N method L-M method Of linear programming simplex method, revised simplex method Big M method variables bounded simplex method, Cutting Plane Method integer programming branch and bound method 0-1 programming quadratic programming )
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

温柔说给风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值