牛頓法與二分法的比較—matlab實現

來源:互聯網
上載者:User

剛學完牛頓迭代法,為了驗證收斂的速率,用Matlab做了比較

首先是牛頓迭代法

%比較牛頓迭代法、
function [x,i]=newtonmethod(x0,f,ep,Nmax)%x0—初值,f—測試函數,ep—精度,Nmax—迭代的最大次數
i=1;
x(1)=x0;
while(i<=Nmax)
    [g1,g2]=f(x(i));
    if abs(g2)<=ep
        %error('error');
        disp('derivative is too smal')
        return
    end
    x(i+1)=x(i)-g1/g2;
    b=x(i+1)-x(i);
    if(abs(b)<ep)
        return;
    end
    i=i+1;
end
x

i

二分法

%二分法
function [x,k]=bisection(a,b,f,ep)%[a,b]區間,f—函數控制代碼,ep—最大二分次數
k=1;
eep=b-a;%eep區間長度
while(abs(eep)>ep)
    x(k)=a+eep./2;
    if(f(x(k)).*f(a)<0)
        b=x(k);
    else
        a=x(k);
    end
    eep=b-a;
    k=k+1;
end

 函數f

function [fx,f1x]=f221(x)
% 課本p.42, 實驗2.2, I中的函數及其導數, 含根區間為[1,2]
fx=x*x*x+4*x*x-10;
f1x=3*x*x+8*x;
ps:自己直接寫的求導後的函數,為了方便

主指令檔,即運行

%牛頓法選初始值1.5,二分法的含根區間為[1,2],
[x,i]=newtonmethod(1.5,@f221,0.00001,100);%@f221——擷取函數控制代碼
[xx,k]=bisection(1,2,@f221,0.00001);
plot(x,'-rd');
hold on
plot(xx,'-gs');
xlabel('迭代序列');
ylabel('迭代結果');
title('shiyan');
legend('牛頓迭代法','二分法' );
hold off

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.