前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >数值优化方法—迭代法&终止条件

数值优化方法—迭代法&终止条件

作者头像
巴山学长
发布2019-07-15 16:28:42
5.9K0
发布2019-07-15 16:28:42
举报
文章被收录于专栏:巴山学长巴山学长

本文作者:过冷水

优化算法的讲解姗姗来迟,过冷水在此感到十分的抱歉。本节将会讲到在数值优化中经常用到的两个知识点:迭代法和终止条件。

迭代法

迭代法的基本思想是:在给出f(x)的目标值附近的一个初始估计点x(0)后,计算一系列的点列x(k)(k=1,2,…),希望点列{x(k)}的极限x*就是f(x)对应的目标值。点列有下式给出:

式中:d(k)为一个向量;λk为一个实数(称为步长)。当d(k)与λk确定之后,由x(k)就可以唯一的地确定xk+1),依次下去就可以求出点列x(k)。如下图即为用迭代法使得f(x),趋向某个变化如图所示。

现给出迭代法的基本代码

代码语言:javascript
复制
clear all
fx='function';
x=x0;f0=eval(fx);
while %循环的具体判断条件
    x=x0;f0=eval(fx);
    xa=x0+a*lamda;x=xa;fa=eval(fx);
    x0=xa;
end

迭代法可以代替手算通过赋值自动计算在数值优化的作用不言而喻,在后面的优化算法会经常看见迭代法的身影,平常解决一些计算问题也可以用迭代法自动计算。

终止准则

一个问题不可能让其永远迭代下去,要有一个终止准则,迭代法的目的是通过迭代运算的方法使得我们函数值接近目标值。在计算中常用的终止标准中过冷水能想到的有以下几种:

变化趋势为终止条件

当函数的变化趋势不断减小,甚至不变时,继续迭代下去就没有必要了,因此终止。

如例:

代码

代码语言:javascript
复制
clear all
fx='exp(x)';
ezplot(fx,[-5 10]);
x0=10;eps=1;
i=0;
while eps>0.01
    i=1+i;
    x=x0;f0=eval(fx);
    xa=x0-0.2*1;x=xa;fa=eval(fx);
    eps=abs(fa-f0);
    Fa(i)=fa;
   Xa(i)=xa;
    x0=xa;
end
hold on
plot(Xa,Fa,'*');
legend('原函数','迭代法');

接近具体值为终止条件

当我们知道函数的具体值,需要求其自变量的值,于是就可以通过迭代法确定自变量的范围。

代码语言:javascript
复制
clear all
fx='x^5-x^3-x^2-500';
ezplot(fx,[-10 10])
x0=6;eps=120;
i=0;
while eps>0.01;
    i=1+i;
    x=x0;f0=eval(fx);
    xa=x0-0.0001*1;x=xa;fa=eval(fx);
    eps=abs(0-fa);
    Fa(i)=fa;
   Xa(i)=xa;
    x0=xa;
end
hold on
ezplot('0',[-10 10]);
plot(Xa,Fa,'*');
legend('原函数','y=0','迭代值');

变化趋势转折点为终止条件

该方法在求极值的时候可以应用。

代码语言:javascript
复制
clear all
fx='sin(x^2)';
fig = figure;
ezplot(fx,[1.4 2.8])
xa=2.6;x=xa;fa=eval(fx);
xb=xa-0.0001*1;x=xb;fb=eval(fx);
i=0
while fb<fa
    i=1+i
    x=xa;fa=eval(fx);
    xb=xa-0.0001*1;x=xb;fb=eval(fx);
    fb-fa
    xa=xb;
    Fa(i)=fa;
    Xa(i)=xa;
end
hold on
plot(Xa,Fa,'*');
legend('原函数','迭代值')

可以设为终止条件的标准有很多,在此只是简单的举例几种,在遇到具体问题时,终止条件的选择一般依据自己的问题而设定,一般在过冷水自己接触到了有:最小均方差、最大相关性,变化趋势这三种作为终止条件。

确定了迭代方法和终止条件,就可以进行简单的数值训练了。现在给出

MATLAB算法の二分法案列。二分法是优化算法中原始的一种方法了。二分法有助于学习其它算法。

本期给出的案例都比较简单,实际求解方法不需要用到迭代法,只是为了让读者容易理解选的案例比较简单,实际二狗遇到的问题因为方程过于复杂,用MATLAB自带函数是无法求导、求零点,直接求极值,这个时候用迭代法就十分有效寻求答案,甚至牛顿法或其它算法都不一定能求解,简单、粗暴、实用。

本期过冷水的讲解就到此为,特此说明前段时间因为公众号被举报的原因,过冷水的情绪有受影响,但还不至于自暴自弃的想放弃,只过不恰好上半年结尾,手头有事要做连载一直没有更新,也因为始终欠大家一个连载,所以也督促我赶快更新。于是终于赶出来了,坚持不容易,读者的支持才是过冷水前进的动力。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-07-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 巴山学长 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档