工程计算——不动点迭代法

不动点迭代法

理论基础:
  • 基本思想

f(x)=0 等价变换 x=ф(x)
f(x)的根 等价变换 ф(x)的不动点

从一个初值x0出发,计算x1=ф(x0),x2=ф(x1),……,x(k+1)=ф(xk),……若{xk}(k=0~k=∞)收敛,即存在x* 使得lim(k->∞) xk=x* ,且ф连续,则由lim(k->∞)x(k+1)=lim(k->∞)ф(xk)可知 x* = =ф(x*),即x*是ф的不动点,也就是f的根。

  • 迭代法形式选择

满足收敛
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5CWf6WNa-1646553360951)(迭代法收敛图解.png)]

构造收敛迭代格式的两个要素:
1、x=g(x)应该满足|g’(x*)|<1;
2、初值x0必须取自x*的充分小邻域(Bδ),Bδ<={f(x),x=g(x)}

  • 解题思路

①绘制原方程对应函数图像,判断方程零点所在大致范围并确定初值x0。
②采用不动点迭代法在不同迭代格式下求解方程的近似根。

  • 函数定义

主函数

x;
y=x.*x.*x+x-1;
Draw(x,y);%绘制函数图像以确定x0
x0=input('请输入初值:x0=');
SimpleIterative(x0);%通过不动点迭代法求解近似根

Draw

function Draw(x,y)
grid on;hold on;
plot(x,y);
title('f(x)图像')
xlabel('x')
ylabel('f(x)');
end

phi用以设定迭代格式

function x=phi(x)
%x=1-x.*x.*x;
x=(1-x)^(1/3);
% x=(1+2*x*x)/(1+3*x*x);
end

SimpleIterative用以实现不动点迭代法

function SimpleIterative(x0)
PRECISION=0.0001;
MAX_Number=10000;
    x0;
    x1=phi(x0);
    k=1;
    while k<MAX_Number
        if abs(x1-x0)>PRECISION%不断向后递推
           x0=x1;
           x1=phi(x1);
           disp('次数');
           disp(k);
           disp(x0);
           k=k+1;
        elseif abs(x1-x0)<=PRECISION%跳出循环
            break
        end
    end
    if k>=MAX_Number
    disp('该迭代格式下迭代失败');
    else
    disp('迭代次数k=');
    disp(k);
    end
    disp('方程的近似根为x=');
    disp(x1);
end

原方程对应函数图像:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wFP5JN7l-1646553360952)(不动点迭代法函数图.png)]
由此,我们可以选择0.5为初值,即令x0=0.5

(1) x=1-x.*x.*x

输出结果:
(由于迭代失败k及x1的输出过多,这里只展示部分)

……
次数
9997
1
次数
9998
0
次数
9999
1
该迭代格式下迭代失败
方程的近似根为x=0

(2) x=(1-x)^(1/3)

输出结果:

次数
1
0.7937
次数
2
0.5909
次数
3
0.7424
次数
4
0.6363
次数
5
0.7138
次数
6
0.6590
次数
7
0.6986
次数
8
0.6704
次数
9
0.6907
次数
10
0.6763
次数
11
0.6866
次数
12
0.6792
次数
13
0.6845
次数
14
0.6807
次数
15
0.6835
次数
16
0.6815
次数
17
0.6829
次数
18
0.6819
次数
19
0.6826
次数
20
0.6821
次数
21
0.6825
次数
22
0.6822
次数
23
0.6824
次数
24
0.6823
迭代次数k=25
方程的近似根为x=0.6824

(3)x=(1+2xx)/(1+3xx)

输出结果:

次数
1
0.8571
次数
2
0.7707
次数
3
0.7865
次数
4
0.7834
次数
5
0.7840
次数
6
0.7839
迭代次数k=7
方程的近似根为x=0.7839

由此可见,选择适合的迭代格式十分重要,不同的迭代格式产生的结果可能有差异,应当在实践应用中寻找收敛、高效、生成结果更为精准的迭代格式。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值