1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 利用 MATLAB 编程实现最速下降法求解无约束最优化问题

利用 MATLAB 编程实现最速下降法求解无约束最优化问题

时间:2019-07-08 18:09:02

相关推荐

利用 MATLAB 编程实现最速下降法求解无约束最优化问题

本文章包含以下内容

1、画出最速下降法的算法流程图;

2、MATLAB 编写用数值微分法的梯度计算函数(函数式 M 文件);

3、MATLAB 编写最速下降法求解无约束优化问题的函数,要求采用黄金分割法精确一维搜索,用数值微分法计算梯度(函数式 M 文件,精度设为 epson 可调);

4、MATLAB 编写最速下降法求解无约束优化问题的函数,要求采用 Wolfe-Powell 非精确一维搜索,用数值微分法计算梯度(函数式 M 文件, 精度设为 epson 可调);

5、MATLAB 编写程序(命令式 M 文件),分别利用精确搜索和不精确搜索 的最速下降法,求解如下问题:

精度为 0.001,初始点为(-1,1);

改变初始点为(-1.2,1)重新运行,观察运行结果。

一维搜索,进退法,黄金分割法代码链接

本实验中函数用单独function计算

function y=f(x)if(length(x)==1)global xk;global pk;x=xk+x*pk;endy=100*(x(2)-x(1)^2)^2+(1-x(1))^2;

1.最速下降法的算法流程图

2、MATLAB 编写用数值微分法的梯度计算函数(函数式 M 文件);

function g=shuzhiweifenfa(x)for i = 1:length(x)m=zeros(1,length(x));m(i)=(10^-6)/2;g(i)=f(x+m)-f(x-m);endg=g/10^-6;

3、最速下降法求解无约束优化问题的函数,采用黄金分割法精确一维搜索,用数值微分法计算梯度(函数式 M 文件,精度设为 epson 可调);

function x=zuisuxiajiangfa_hjfg(e,x)%step 1%没用到k,只存储当前迭代的值。global xk;global pk;while 1%step 2g=shuzhiweifenfa(x);%step 3%范数用的是平方和开根号if sqrt(sum(g.^2))<=ereturn;endpk=-g;xk=x;%这两个函数见之前代码(matlab无约束最优化的一般算法)[a,b,c]=jintuifa(0,0.1);a=huangjinfenge(a,c,10^-4);%step 4x=x+a*pk;end

4、最速下降法求解无约束优化问题的函数,要求采用 Wolfe-Powell 非精确一维搜索,用数值微分法计算梯度(函数式 M 文件, 精度设为 epson 可调);

function a=Wolfe_Powell(x,pk)%step 1u=0.1;b=0.5;a=1;n=0;m=10^100;%step 2fx=f(x);g=shuzhiweifenfa(x);while 1xk=x+a*pk;fxk=f(xk);gk=shuzhiweifenfa(xk);if (fx-fxk)>=(-u*a*g*pk.')%(3-1)if (gk*pk.')>=(b*g*pk.')%(3-2)return;else%step 4n=a;a=min(2*a,(a+m)/2);endelse%step 3m=a;a=(a+n)/2;endend

function x=zuisuxiajiangfa_Wolfe(e,x)%step 1%没用到k,只存储当前迭代的值。while 1%step 2g=shuzhiweifenfa(x);%step 3%范数用的是平方和开根号if sqrt(sum(g.^2))<=ereturn;endpk=-g;a=Wolfe_Powell(x,pk);%step 4x=x+a*pk;end

5、分别利用精确搜索和不精确搜索 的最速下降法,问题:

clearclcfor i=1:2if(i==1)x=[-1,1];fprintf('=========================');fprintf('\nx=%f\t\t%f\n',x(1),x(2));fprintf('=========================\n');elsex=[-1.2,1];fprintf('=========================');fprintf('\nx=%f\t\t%f\n',x(1),x(2));fprintf('=========================\n');endfprintf('精确搜索的最速下降法:\n');x_=zuisuxiajiangfa_hjfg(10^-3,x);fprintf('x*=%f\t%f\n',x_(1),x_(2));fprintf('f(x)=%f\n',f(x_));fprintf('不精确搜索的最速下降法\n');x_=zuisuxiajiangfa_Wolfe(10^-3,x);fprintf('x*=%f\t%f\n',x_(1),x_(2));fprintf('f(x)=%f\n',f(x_));end

结果:

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。