matab实现牛顿法最速下降法罚函数法.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
优化算法及应用报告 (一)用Newton法求函数最优解 1.1课本P117页例4.3.2 1.2方法步骤 Step1:给定初始点 Step2:对函数求一次导数得到df1,若 ,则迭代停止,输出 否则,二次求导dff2=0时,停止,解题失败。 当dff2不等于0时,转下一步。 Step3:计算 ,如果 ,停止迭代,输出,否则,k=k+1,转step2 1.3计算结果: Df1= atan(x)(matlab中arctan(x)用atan(x)表示) Dff2= 1/(x^2 + 1) (1)t1=1时 t1=1答案 K tk df1 1/dff2 1 1 0.7854 2 2 -0.5708 -0.5178 1.3258 3 0.1169 0.1163 1.0137 4 -0.001061 接近最优解 =0. (2)t1=2时 t1=2答案 k tk df1 1/dff2 1 2 1.1071 5 2 -3.5357 -1.2952 13.50 3 13.95 1.4程序,见附件test1,newton Test1 函数带入 clc clear all syms x t f1=int(atan(x),x,0,t); beex=newton(f1,t,1,0.5); newton 牛顿方法的函数 function[besx]=newton(f1,t,t1,c) %step1 syms t df1=diff(f1,t); %函数一次求导 dff2=diff(f1,t,2); %函数二次求导 while(true) if(abs(subs(df1,t1))c) %step2,满足条件,迭代停止. disp(t1); break %dff2等于0失败,否则转step3 else tk=t1-(subs(df1,t1))/(subs(dff2,t1))%step3 if(abs(tk-t1)c) besx=tk; %满足绝对值内tk-t1小于c,停止迭代,输出tk disp(besx);break else t1=tk %条件不成立,k=k+1,转step2,t1=tk,构造循环 end end end end 1.5程序结果截图 (二)用最速下降法求解(UMP) 2.1课本P124页例4.4.2 取初始点 ,终止误差 2.2方法步骤 Step1:给定初始点 ,终止误差 0,令k=0; Step2:用ccc1作为函数对x1的偏导,ccc2作为函数对x2的偏导,ccc3作为 ,计算可得ccc3,若,则停止迭代,输出 否则,转step3 Step3:取pk=-ccc3 Step4:利用第一问的牛顿法求最优解tk。 同时,令x0 :x0=x0+tk*pk; k=k+1,转step2 2.3计算结果: 用牛顿法解得t0约为0.0200(结果见2.5附图) 而 2.4程序,见附件test2,newton2,,funump Test2 题目函数带入 clc clear all syms x1 x2 t dfdx1=diff((x1)^2+25*(x2)^2,x1); dfdx2=diff((x1)^2+25*(x2)^2,x2); funump([2;2],10^(-6),0,dfdx1,dfdx2,10) newton 牛顿方法的函数(作为引用) %同第一问,不再注释 function[beex]=newton2(f1,t,t1,c) syms t df1=diff(f1,t); ddf1=diff(f1,t,2); t1=0; while(true) if(abs(subs(df1,t1))c) beex=t1; disp(beex); break else tk=t1-(subs(df1,t1))/(subs(ddf1,t1)); if(abs(tk-t1)c)

文档评论(0)

_______ + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档