MATLAB实例:不动点迭代法求一元函数方程的根
作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/
之前写过一篇博客:MATLAB用二分法、不动点迭代法及Newton迭代(切线)法求非线性方程的根 - 凯鲁嘎吉 - 博客园 ,后来发现这篇博客中的不动点迭代法程序有问题,实际上是用牛顿迭代法求解的。这里,重新写了不动点迭代法的MATLAB程序,并绘制出函数图,直观理解方程的根。
问题描述:
求方程
$f(x)={{x}^{3}}-x-1=0$
在${{x}_{0}}=1.5$附近的根${{x}^{*}}$
解:
将上述方程改为如下形式:
$x=sqrt[3]{x+1}$
据此建立迭代公式
${{x}_{k+1}}=sqrt[3]{{{x}_{k}}+1}, ext{ }k=0,1,2,cdots .$
MATLAB程序
clear clc % Author:凯鲁嘎吉 https://www.cnblogs.com/kailugaji/ % f(x)=x^3-x-1; % x=(x+1)^(1/3); x=1.5; % 初始值 esp=1e-6; % 迭代终止条件 N=100; % 最大迭代次数 y=zeros(N, 1); % 暂存x变量的空间 for t=1:N x=fun(x); y(t)=x; fprintf('第 %d 次, x=%f ', t, x); if t>1 if abs(y(t)-y(t-1))<esp break; end end end % 画出函数曲线 xx=0:0.01:3; yy=xx.^3-xx-1; figure(1) plot(xx, real(yy)); hold on z=0*ones(1, length(xx)); plot(xx, z, 'r'); xlabel('x'); ylabel('y'); title('y=x^3-x-1'); saveas(gcf,sprintf('不动点迭代法.jpg'),'bmp'); function x=fun(x) x=(x+1).^(1./3); % x的迭代函数 end
结果
第 1 次, x=1.357209 第 2 次, x=1.330861 第 3 次, x=1.325884 第 4 次, x=1.324939 第 5 次, x=1.324760 第 6 次, x=1.324726 第 7 次, x=1.324719 第 8 次, x=1.324718 第 9 次, x=1.324718