zoukankan      html  css  js  c++  java
  • 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}, 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
    

  • 相关阅读:
    bootstrap学习笔记
    java-多态
    java-重写
    java-继承
    java-包
    java-封装
    java-可变参数
    java-标准输入
    java-构造方法
    private、public、this关键字
  • 原文地址:https://www.cnblogs.com/kailugaji/p/13832330.html
Copyright © 2011-2022 走看看