• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

最优化理论与算法------最速下降法(附Matlab实现)

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

 

 

 1 function [xo,fo] = Opt_Steepest(f,grad,x0,TolX,TolFun,dist0,MaxIter)
 2 % 用最速下降法求最优化解
 3 %输入:f为函数名 grad为梯度函数
 4 %x0为解的初值 TolX,TolFun分别为变量和函数的误差阈值
 5 %dist0为初始步长 MaxIter为最大迭代次数
 6 %输出: xo为取最小值的点 fo为最小的函数值
 7 % f0 = f(x(0))
 8 
 9 %%%%%%判断输入的变量数,设定一些变量为默认值
10 if nargin < 7
11     MaxIter = 100; %最大迭代次数默认为100
12 end
13 if nargin < 6
14     dist0 = 10; %初始步长默认为10
15 end
16 if nargin < 5
17     TolFun = 1e-8; %函数值误差为1e-8
18 end
19 if nargin < 4
20     TolX = 1e-6; %自变量距离误差
21 end
22 %%%%%第一步,求解的初值的函数值
23 x = x0;
24 fx0 = feval(f,x0);
25 fx = fx0;
26 dist = dist0;
27 kmax1 = 25; %线性搜索法确定步长的最大搜索次数
28 warning = 0; 
29 %%%%%迭代计算求最优解
30 
31 for k = 1: MaxIter
32     g = feval(grad,x);
33     g = g/norm(g); %求在x处的梯度方向
34     %%线性搜索方法确定步长
35     dist = dist*2; %令步长为原步长的二倍
36     fx1 = feval(f,x-dist*2*g);
37     for k1 = 1:kmax1
38         fx2 = fx1;
39         fx1 = feval(f,x-dist*g);
40         if fx0 > fx1+TolFun & fx1 < fx2 - TolFun %fx0 > fx1 < fx2,
41             den = 4*fx1 - 2*fx0 - 2*fx2;num = den - fx0 + fx2;  %二次逼近法
42             dist = dist*num/den;
43             x = x - dist*g; fx = feval(f,x); %确定下一点
44             break;
45         else
46             dist = dist/2;
47         end
48     end
49     if k1 >= kmax1
50         warning = warning + 1; %无法确定最优步长
51     else
52         warning = 0;
53     end
54     if warning >= 2|(norm(x - x0) < TolX&abs(fx - fx0) < TolFun)
55         break;
56     end
57     x0 = x;
58     fx0 = fx;
59 end
60 xo = x; fo = fx;
61 if k == MaxIter
62     fprintf(\'Just best in %d iterations\',MaxIter);
63 end

 

注意修改目标函数和梯度函数(一阶偏导函数)。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
delphi实现post请求发布时间:2022-07-18
下一篇:
DelphiI/OErrors(几百种不同的错误)发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap