MATLAB實例:不動點迭代法求一元函數方程的根


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM