最优化 马昌凤 第三章作业

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

最优化方法及其Matlab程序设计习题作业暨实验报告

学院:数学与信息科学学院

班级:12级信计一班

姓名:李明

学号:1201214049

第三章 最速下降法和牛顿法

一、上机问题与求解过程

1、用最速下降法求212

221216423),(x x x x x x f --+=的极小值。 解:

仿照书上编写最速下降法程序如下:

function [x,val,k]=grad(fun,gfun,x0) %功能:用最速下降法求解无约束化问题:min f(x) %输入:x0是初始点,fun,gfun 分别是目标函数和梯度 %输出:x,val 分别是近似嘴有点和最优值,k 是迭代次数 maxk=5000;

rho=0.5;sigma=0.4;

%一开始选择时选择的rho 和sibma 选择的数据不够合理,此处我参照书上的数据编写数据 k=0;epsilon=1e-5; while (k

g=feval(gfun,x0); %计算梯度 d=-g;

%计算搜索方向

if (norm(d)

%Armijo 搜索

if (feval(fun,x0+rho^m*d)

%直接利用Armijo 搜索公式,一开始的时候没有记住公式编写出现错误 end m=m+1; end

x0=x0+rho^mk*d; k=k+1; end x=x0;

val=feval(fun,x0) %求得每一个的函数值

然后仿照书上建立两个目标函数和梯度的M 文件:

function f=fun(x)

f=3*x(1)^2+2*x(2)^2-4*x(1)-6*x(2); function g=gfun(x) g=[6*x(1)-4,4*x(2)-6]';

选取初始点为']0,0[,调用函数程序,得出最小极值点为

']500.1,6667.0[,极小值为8333.5-,在界面框中输入的程序如下:

[x,val,k]=grad('fun','gfun',x0) val = -5.8333 x =

0.6667 1.5000 val =

-5.8333 k = 10

从结果可以看出迭代次数为10次,如果选取不同的初值点则迭代次数不一样,但是极小值相同。

2、分别用牛顿法和阻尼牛顿法求解函数212

22121484),(x x x x x x f --+=的极小点。 解: 牛顿法:

改编书上的阻尼牛顿法,将Armijo 线性搜索公式去掉,改编为牛顿法,其中程序为:

function [x,val,k]=netwn(fun,gfun,Hess,x0) %功能:用牛顿法求解无约束问题:min f(x) %输入:x0是初始点,fun,gfun,Hess 分别是求 % 目标函数值,梯度,Hesse 矩阵函数

%输出:x,val 分别是近似点最优解和最优质,k 是迭代次数 maxk=500;

%因为是牛顿法,感觉不能简单直接找出最佳数值,所以需要加大迭代次数 k=0;epsilon=1e-5; while (k

gk=feval(gfun,x0);%计算梯度 Gk=feval(Hess,x0);%计算Hess 矩阵 if (norm(gk)

%直接根据前面的算法框架,得出上面迭代步骤 k=k+1; end

%只是将阻尼牛顿法,简单的删去Armijo 搜索公式 x=x0;

val=feval(fun,x);

然后仿照书上建立两个目标函数和梯度的M 文件:

function f=fun(x)

f=4*x(1)^2+x(2)^2-8*x(1)-4*x(2);

function g=gfun(x)

g=[8*x(1)-8,2*x(2)-4]';

最后仿照书上建立Hess矩阵的M文件:

function He=Hess(x)

n=length(x);

He=zeros(n,n);

He=[8,0;

0,2];

选取初始点为']0,0[,调用函数程序,得出最小极值点为']2,1[,极

小值为8 ,在界面框中输入的程序如下:

x0=[0 0]';

x,val,k]=netwn('fun','gfun','Hess',x0)

x =

1

2

val =

-8

k =

1

从结果可以看出迭代次数为10次,如果选取不同的初值点则迭代次数不一样,但是极小值相同。下面看阻尼牛顿法:

阻尼牛顿法:

仿照书上编写程序并结合Armijo线性搜索步长,有算法程序如下:function [x,val,k]=znetwn(fun,gfun,Hess,x0)

%功能:用牛顿法求解无约束问题:min f(x)

%输入:x0是初始点,fun,gfun,Hess分别是求

% 目标函数值,梯度,Hesse矩阵函数

%输出:x,val分别是近似点最优解和最优质,k是迭代次数

maxk=100;

rho=0.50;sigma=0.4;

k=0;epsilon=1e-5;

while(k

gk=feval(gfun,x0);%计算梯度

Gk=feval(Hess,x0);%计算Hess矩阵

dk=-Gk\gk;%计算搜索方向

if(norm(gk)

%检查终止准则

m=0;mk=0;

while(m<20)

if(feval(fun,x0+rho^m*dk)

相关文档
最新文档