2.4 迭代法及其 MATLAB 程序
确定根的近似位置以后,接下来的工作就是将根精确化,即按某种方法将初始近似值逐
步精确化,直到满足所要求的精确度为止. 上节介绍的二分法是将根精确化的方法之一,但
是它的收敛速度较慢,且不能求出偶重根 .迭代法可以克服这种缺陷 .迭代法是求解方程的
根、线性和非线性方程组的解的基本而重要的方法.
2.4.2 迭代法的 MATLAB 程序 1
迭代法需要自行编制程序.下面提供的迭代法的 MATLAB 程序 1 使用时只需输入迭代初始
值
x
0
、迭代次数 k、迭代公式 x
k+1
=
(x
k
)和一条命令,运行后就可以输出求迭代序列
{x
k
}
、
迭代
k
次得到的迭代值
x
k
和相邻两次迭代的偏差
piancha
=|
x
k
x
k 1
| (简称偏差)和偏
差的相对误差
xdpiancha
=|
x
k
x
k 1
|
x
k
的值,并且具有警报功能(若迭代序列发散,
则提示用户“请重新输入新的迭代公式”;若迭代序列收敛,则屏幕会出现“祝贺您!此迭
代序列收敛,且收敛速度较快”).我们可以用这个程序来判断迭代序列的敛散性,也可以
用于比较由一个方程得到的几个迭代公式的敛散性的优劣.
迭代法的 MATLAB 程序 1
输入的量:初始值
x
0
、迭代次数
k
和迭代公式
x
k 1
(x
k
) (k
0,1,2, )
;
运行后输出的量:迭代序列
{x
k
}
、迭代
k
次得到的迭代值
x
k
、相邻两次迭代的偏差
piancha
=|
x
k
x
k 1
|和它的偏差的相对误差
xdpiancha=
x
k
x
k1
x
k
的值.
根据迭代公式(2.4)和已知条件,现提供名为diedai1.m的M文件如下
function [k,piancha,xdpiancha,xk]=diedai1(x0,k)
% 输入的量--x0是初始值,k是迭代次数
x(1)=x0;
for i=1:k
x(i+1)=fun1(x(i));%程序中调用的fun1.m为函数y=φ(x)
piancha= abs(x(i+1)-x(i)); xdpiancha= piancha/( abs(x(i+1))+eps);
i=i+1;xk=x(i);[(i-1) piancha xdpiancha xk]
end
if (piancha >1)&(xdpiancha>0.5)&(k>3)
disp('请用户注意:此迭代序列发散,请重新输入新的迭代公式')
return;
end
if (piancha < 0.001)&(xdpiancha< 0.0000005)&(k>3)
disp('祝贺您!此迭代序列收敛,且收敛速度较快')
return;
end
p=[(i-1) piancha xdpiancha xk]';
例 2.4.1 求方程
f (x) x 2x 10
的一个正根.
解 在 MATLAB 工作窗口输入程序
>> [k,piancha,xdpiancha,xk]= diedai1(2,5)
运行后输出用迭代公式
x
k1
(10 x
k
) / 2
的结果
[k,piancha,xdpiancha,xk]=
1.00000000000000 1.00000000000000 0.33333333333333 3.00000000000000
2.00000000000000 2.50000000000000 5.00000000000000 0.50000000000000
3.00000000000000 4.37500000000000 0.89743589743590 4.87500000000000
2
2