- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
利用共轭梯度算法求解n元正定二次函数的极小点
我利用共轭梯度算法来解决n元正定二次函数的极小点问题,并通过一个简单的函数模型来测试基于该算法的程序的正确性。通过分析该算法后,我采用matlab7.0中的设计语言来编写程序。matlab是集数学计算、图形处理和程序设计与以设计与一体的著名数学软件,在许多科学领域成为计算机辅助设计和分析、算法研究和应用开发的基本工具和首选平台。
一、 算法条件和特点:
适合条件:无约束n元正定二次函数f(x)=1txax+bt+c2
其中a是n? n对称正定矩阵;x,b∈e、 C是一个常数。
算法特点:已知p(i)(i=0,...,n-1)关于a共轭,以任给x(0)出发,依次以
p(0),p(1),。。。,P(n-1)是搜索方向的以下算法:
minf(x(k)+λp(k))=f(x(k)+λkp(k))λ
(k+1)(k)(k)x,k=0,1,。。。,n-1=x+λkp
二.算法步骤:
(1) 选择近似于X的初始值
(0)(0)p=-?f(x)(0),给出允许误差ε0,k=0。
并使用X(1)=X(0)+λ0P(0)? f(x(0))TP(0)(1)和λ0=-计算x(0)t(0)(p)ap
(k)(3)一般地,假定已得出x
(4) |f(x(K+1)和P(K),则可计算K+1近似x(K+1)(K)(K)=x+λkpλK:minf(x(K)+λP(K))|2≤ ε、 停止计算,X(K+1)是所需的近似解。
p(k+1)=-?f(x(k)(k))+βkp
?f(x(k+1))t?f(x(k+1))βk=?f(x(k))t?f(x(k))
k=k+1
计算βK和P(K+1),然后转到第三步。
三.详细算法中变量说明:
梯度:函数的梯度。e:终止条件ε
四.模型求解:
已知二维正定二次函数f(x)=3212x1+x2-x1x2-2x122
1312-x1x2-2x1化成f(x)=xtax+bt+c形式,得?将f(x)=x12+x2222
a=?3-1??-2.???,b=???-11??0?
?初始条件x(0)?-2?=4??,ε=0。
? 添加a、B、X(0)和ε=0输入算法进行求解。(具体算法及操作流程见附录)
?1??结果x*=1????
? 初始条件,即采取
?2?(0)?12?(0)?2?(0)?-2?(0)?0.2?(0)?82?x(0)=4??,x=4??,x=14??,x=-4??,x=4??,x=224??????????????
? 1.? 两个结果都是x=1???*
五.根据上述结果进行必要分析:
从结果可以看出,无论初始条件如何变化,都会得到相同的结果。理论上,对于二次函数的情况,经过n次迭代可以达到最小点。因此,对于一个简单的模型,它与理论结果是一致的。
但是,在实际计算中,由于数据的舍入以及计算误差的积累,往往做不到这一点。此外,由于n维问题的共轭方向最多只有n个,在n步以后继续如上进行是没有意义的。因此,在实际应用时,如迭代到n步还不收敛,就将x(n)作为新的初始近似,重新开始迭代。根据实际经验,采用这种在开始的办法,一般都可得到较好的效果。
%正定二次函数(N元)最小点的共轭梯度算法
%f(x)=(1/2)xax+bx+c
a=[3-1;-11];
b=[-20];
%初始点x(0)
x=[-24];
%F(x)的梯度
gradf=a*x+b;
%共轭梯度法的终止条件
%共轭梯度法初始搜索方向
p=-gradf;
while(gradf*gradf)e
a=p*a*p;
b=-(gradf*p)/a;
%x(k+1)=x(k)+bp(k),k=0,1,。。。,N
x=x+b*p;
%点x(K+1)处的F(x)梯度,K=0,1,n
gradf=a*x+b;
c=(梯度*a*p)/a;
%f(x)在点x(k+1)处的搜索方向p(k+1),k=0,1,...,np=-gradf+c*p;
%F(x)的最小点x(*)
运行过程如下(部分):
?82?x(0)=244????
gradf=
格拉夫=
-162-162
格拉夫=
?-2?x(0)=4????
3-1-11
gradf=
文档评论(0)