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},\text{ }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\n', 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