FPI(Fixed-point Iteration)不动点迭代法——迭代求方程的方法

一 不动点是什么?

不动点,其实定义比较简单,对于一些方程,例如f(x)=cosx,那么令cosx=x的点就是函数的不动点,说白了,就是y=x这条直线与函数曲线的交点。这个不动点有什么用呢?请继续往下看。

二 不动点迭代法的实现

不动点迭代法,是求方程的迭代方法。为什么要迭代的求,直接法不好吗?直接法显然比较好,但是存在弊端,比如函数形式较复杂时,求解器不容易直接求得。利用不动点的性质,可以将函数的求解问题转化为不动点方程,从而使用有限次迭代求得方程的解。

其实不动点迭代的代码相对简单而且易懂:

x0=3;
x=x0;
k=10;
ezplot(@(x,f)f-((x-1).^2+1))       %画出函数图像
%构造的不动点方程为:x=2-x,斜率不行,构造其他的本次是两边同时加x^2
axis([-5,5,-3,10])       %固定坐标轴
hold on
for i=1:k                %迭代k次
    x=(2-x0+1*x0^2)/(1*x0+1);                         %-2*x为梯度反方向,step为步长,!最速下降法!
    f_current=(x-1)^2+1;
    f_error=abs((x-1)^2-(x0-1)^2);
    plot(x,f_current,'ro','markersize',7) %标记当前的位置
    drawnow;pause(0.2);
    x0=x;
    if f_error<0.000001
        break;
    end
end

上述代码是利用FPI求解函数f(x)=(x-1)^{2}+1的极小值。我们知道,该函数的极值在驻点处,也就是一阶导数为0的地方,求导得f^{'}(x)=2(x-1)=0。其实一眼就看出来的解,这里只是作为说明,以简单的例子说明一般问题。到这一步了,如何构造FPI呢?其实只需将x剥离出来,也就是:

f^{'}(x)=2(x-1)=0 \rightarrow x=2-x \rightarrow x_{k+1}=2-x_{k}=g(x_{k})

但是FPI收敛的条件是:

|g^{'}(x_{0})|<1

因此,我们需要对迭代方程进行改造。我们在方程两侧加上一项x^2:

x+x^{2}=2-x+x^{2}\rightarrow x(x+1)=2-x+x^{2} \rightarrow x=\frac{2-x+x^{2}}{(x+1)} \rightarrow x_{k+1}=\frac{2-x_{k}+x_{k}^{2}}{(x_{k}+1)}

这样,得到的FPI即可满足要求。为什么加x^2?其实我也是偶然凑出来的。

三 不动点迭代法的作用

受FPI算法思想的影响,可以创造出一些有趣的算法,用于求类似的方程或方程组的解。

其实之前也不了解该方法,只是看书的时候遇见了一个IRLS-based Iteration shrinkage算法,里面用到了不动点迭代法的思想,加深理解。

书中的问题也是寻找方程组的驻点:

其实使用共轭梯度法或者直接法也能求出解,作为一种新的想法,Adeyemi and Davies将方程两侧均加入了cx,使用构造不动点方程:

将x归纳后,一部分移至一侧,加入迭代索引:

最终:

其中W是对角矩阵,因此其逆就等于是将W的对角元素取倒数即可。但是该方法有个痛点,也就是一旦W对角元素为0,那么它就永远为0了,算法可能就会陷入尴尬的境地。

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值