Steffensen迭代法(数值分析)
1、Steffensen迭代法的提出
Steffensen迭代法是不动点迭代法加速收敛的一种方法,常用于线性收敛迭代法的加速。该方式用三个迭代值组合而成,表示公式如下图所示:(具体推导详见《数值分析原理》)
2、Steffensen迭代法的特点
(1)Steffensen迭代至少为二阶收敛;
(2)Steffensen迭代不仅能加速收敛,而且也能将发散的迭代改进为收敛的迭代;
(3)Steffensen加速技术一般不对高阶收敛的迭代法进行加速,因为此时的效果不明显。
3、Steffensen迭代法的Matlab程序举例
在如下的例子中没有使用函数文件的形式,而是直接采用命令文件的形式,将文件命名为Steffensen.m 。下面的两个例子都是《数值分析原理》中常见的Steffensen迭代法求根的题目。
例1:用Steffensen迭代法求f(x)=1+1/x² 在x=1.5附近的根,要求|x-x*|<10^(-5)。
digits(10) %控制迭代的运算精度,精度太大迭代速度变慢
% 定义函数方程
syms x %定义自变量
f(x)=1+1/(x^(2)); %函数方程
x=1.5;
epslion=10^(-5);
N=20; %N为迭代次数
error=1;
k=0;
for i=1:N
while abs(error)>epslion && k<N
y=x;
x=vpa(x-((f(x)-x)^(2))/(f(f(x))-2*f(x)+x));
error=vpa(y-x);
if abs(error)>=epslion
k=k+1;
fprintf('第%d次steffensen迭代结果为:%d\n',k)
disp(x)
fprintf('第%d次迭代结果的误差为:%d\n',k)
disp(abs(error))
break
end
if error<epslion
k=k+1;
fprintf('第%d次steffensen迭代结果为:%d\n',k)
disp(x)
fprintf('第%d次迭代结果的误差为:%d\n',k)
disp(abs(error))
fprintf('该方程的steffensen迭代法的最小迭代次数为:')
disp(k)
break
end
end
end
程序执行如下:
>> Steffensen
第1次steffensen迭代结果为:1.465858586
第1次迭代结果的误差为:0.03414141414
第2次steffensen迭代结果为:1.465571253
第2次迭代结果的误差为:0.0002873331284
第3次steffensen迭代结果为:1.465571232
第3次迭代结果的误差为:0.00000002085340216
该方程的steffensen迭代法的最小迭代次数为: 3
例2:用Steffensen迭代加速方法求方程x³+4x²-10=0在[1,2]上的近似值,要求|x-x*|<10^(-9).
根据迭代原理可知f(x)=x-x³-4x²+10,程序如下:
digits(10) %控制迭代的运算精度,精度太大迭代速度变慢
% 定义函数方程
syms x %定义自变量
f(x)=x-x^(3)-4*x^(2)+10; %函数方程
x=1.5;
epslion=10^(-9);
N=20; %N为迭代次数
error=1;
k=0;
for i=1:N
while abs(error)>epslion && k<N
y=x;
x=vpa(x-((f(x)-x)^(2))/(f(f(x))-2*f(x)+x));
error=vpa(y-x);
if abs(error)>=epslion
k=k+1;
fprintf('第%d次steffensen迭代结果为:%d\n',k)
disp(x)
fprintf('第%d次迭代结果的误差为:%d\n',k)
disp(abs(error))
break
end
if error<epslion
k=k+1;
fprintf('第%d次steffensen迭代结果为:%d\n',k)
disp(x)
fprintf('第%d次迭代结果的误差为:%d\n',k)
disp(abs(error))
fprintf('该方程的steffensen迭代法的最小迭代次数为:')
disp(k)
break
end
end
end
执行结果如下:
>> Steffensen
第1次steffensen迭代结果为:0.9349442379
第1次迭代结果的误差为:0.5650557621
第2次steffensen迭代结果为:1.005032899
第2次迭代结果的误差为:0.07008866077
第3次steffensen迭代结果为:1.07546269
第3次迭代结果的误差为:0.07042979173
第4次steffensen迭代结果为:1.145492383
第4次迭代结果的误差为:0.07002969277
第5次steffensen迭代结果为:1.213437452
第5次迭代结果的误差为:0.06794506881
第6次steffensen迭代结果为:1.275770747
第6次迭代结果的误差为:0.06233329538
第7次steffensen迭代结果为:1.325977509
第7次迭代结果的误差为:0.05020676191
第8次steffensen迭代结果为:1.355744004
第8次迭代结果的误差为:0.02976649484
第9次steffensen迭代结果为:1.364581816
第9次迭代结果的误差为:0.008837812186
第10次steffensen迭代结果为:1.36522683
第10次迭代结果的误差为:0.0006450136702
第11次steffensen迭代结果为:1.365230013
第11次迭代结果的误差为:0.000003183355532
第12次steffensen迭代结果为:1.365230013
第12次迭代结果的误差为:7.707394792e-11
该方程的steffensen迭代法的最小迭代次数为: 12
(以上内容是本人学习过程中的小小尝试,如有错漏希望大家多多批评指正喔~)
版权声明:本文为azhao100原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。