最优化大作业

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

最优化方法大作业

---------用优化算法求解函数最值问题

摘要

最优化(optimization) 是应用数学的重要研究领域.它是研究在给定约束之下如何寻求某些因素(的量),以使某一(或某些)指标达到最优的一些学科的总称。最优化问题一般包括最小化问题和最大化问题,而最大化问题可以通过简单的转化使之成最最小化问题。最小化问题分为两类,即约束最小化和无约束最小化问题。在此报告中,前两个问题属于无约束最小化问题的求解,报告中分别使用了“牛顿法”和“共轭梯度法”。后两个问题属于有约束最小化问题的求解,报告中分别用“外点法”和“内点法”求解。虽然命名不一样,其实质都是构造“惩罚函数”或者“障碍函数”,通过拉格朗日乘子法将有约束问题转化为无约束问题进行求解。再此报告中,“外点法”和“内点法”分别用了直接求导和调用“牛顿法”来求解无约束优化问题。

在此实验中,用“共轭梯度法”对“牛顿法”所解函数进行求解时出现错误,报告中另取一函数用“共轭梯度法”求解得到正确的结果。此实验中所有的函数其理论值都是显见的,分析计算结果可知程序正确,所求结果误差处于可接受范围内。

报告中对所用到的四种方法在其使用以前都有理论说明,对“外点法”中惩罚函数和“内点法”中障碍函数的选择也有相应的说明,另外,对此次试验中的收获也在报告的三部分给出。

本报告中所用程序代码一律用MATLAB编写。

【关键字】函数最优化牛顿法共轭梯度法内点法外点法 MATLAB

一,问题描述

1,

分别用共轭梯度发法和牛顿法来求解一下优化问题

()()()()()4

41432243221102510min x x x x x x x x x f -+-+-++=

2, 分别用外点法和内点发求解一下优化问题

⎩⎨

⎧≥-++0

1.min 212

231x x t s x x

二、问题求解

1.1 用牛顿法求解

()()()()()4

414

322

432

21102510min x x x x x x x x x f -+-+-++=

1.1.1问题分析:

取步长为1而沿着牛顿方向迭代的方法称为牛顿法,在牛顿法中,初始点的取值随意,在以后的每次迭代中,()[]

()k k k k x f x f x x ∇∇-=-+1

21,直到终止条件成立时停止。

1.1.2 问题求解

注:本程序编程语言为MATLAB ,终止条件为()162

110-≤∇x f ,初始取值

为[10 10 10 10]

M 文件(求解函数)如下:

function s=newton1(f,c,eps)

%c 是初值,eps 为允许误差值 if nargin==2 eps=1.0e-16; elseif nargin<1 error('') % return end

syms x1 x2 x3 x4 x=[x1 x2 x3 x4].'; grad = jacobian(f).';

hesse = jacobian(grad);

a=grad;

b=hesse;

i=1;

gradk=subs(a,[x1 x2 x3 x4],[c(1) c(2) c(3) c(4)]); hessek=subs(b,[x1 x2 x3 x4],[c(1) c(2) c(3) c(4)]);

pk=-1*(hessek\gradk);

x=tihuan(c);

while norm(gradk)>=eps

x=x+pk;

gradk=subs(a,[x1 x2 x3 x4],[x(1) x(2) x(3) x(4)]); hessek=subs(b,[x1 x2 x3 x4],[x(1) x(2) x(3) x(4)]); pk=-hessek\gradk;

i=i+1;

end

disp('the times of iteration is:')

disp(i)

disp('The grad is:')

disp(gradk)

disp('and the result is:')

x=x.';

disp(x)

return

“tihuan”子函数:

function x=tihuan(x)

x(1)=x(1);

x(2)=x(2);

x(3)=x(3);

x(4)=x(4);

end

调用方式如下:

syms x1 x2 x3 x4

f=(x1+10*x2)^2+5*(x3-x4)^2+(x2-2*x3)^4+10*(x1-x4)^4;

c=[10 10 10 10]';%初始值

newton1(f,c,eps);

1.1.3 计算结果如下:

由上述结果可知,当迭代次数达到47次时满足终止条件,此时x 为

1.0e-005 * [-0.1111 0.0111 0.0095 0.0095], 显然,此题的理论解为[0 0 0 0],分析上述结果,与理论解的误差处于可接受范围之内。求解完成。

1.2 用共轭梯度法求解函数

()()()()()4

414

322

432

21102510min x x x x x x x x x f -+-+-++=

用共轭梯度法求解上述函数的程序代码如下:

1.2.1问题分析: 取

()

00x f p -∇=,当搜索到

1

+k x 时,共轭方向

()2,...,1,0,11-=+-∇=++n k p x f p k k k k λ,此时,1+k p 与k p A 共轭,用k Ap 右乘上式

()k

T

k k k k k k Ap p Ap x f Ap p λ+-∇=++11,由

1=+k T

k Ap p 得

()2,...,1,01-=∇=+n k Ap p Ap x f k

T p k

T

k k λ,若不满足条件,进行下一次迭代。

1.1.2 问题求解

注:程序所用语言为MATLAB ,精度为1610-=eps

syms x1 x2 x3 x4 t0 t1

相关文档
最新文档