1. 程式人生 > >牛頓法與牛頓下山法(切線法)

牛頓法與牛頓下山法(切線法)

牛頓法

原理:

注意:牛頓法對初值比較敏感,若初值給的不合適,系統很有可能會出現不收斂的情況。

主函式:

syms x

h=x^3+x^2-1;

x=newton_eq(h,1,1000)    %1是迭代初值   1000是迭代次數

子函式:

function result=newton_eq(h,x,n)    %n是迭代次數

f=matlabFunction(h);   %把H轉化為控制代碼

f1=matlabFunction(diff(h));     %對h求導轉為控制代碼

X(1)=x;                 %迭代的過程存寫在大寫的X中

i=2;

while 1;

   X(i)=X(i-1)-f(X(i-1))/f1(X(i-1));

    if abs(f(X(i)))<1e-6

       result=X(i);

       return;  

   end

   if i>n

       result=X(i);

       return;

   end

   i=i+1;

end

牛頓下山法

原理:

主函式:

syms x

h=x^3+x^2-1;

x=newton_eq(h,1,1000)    %1是迭代初值   1000是迭代次數

子函式:

functionresult=newton_eq(h,x,n)    %n是迭代次數

f=matlabFunction(h);   %把H轉化為控制代碼

f1=matlabFunction(diff(h));     %對h求導轉為控制代碼

X(1)=x;                 %迭代的過程存寫在大寫的X中

i=2;

lamda=1;

while  1;

    X(i)=X(i-1)-lamda*f(X(i-1))/f1(X(i-1));

    if abs(f(X(i)))<1e-6

        result=X(i);

        return;  

    end

    if abs(f(X(i)))<abs(f(X(i-1)))

        lamda=1;

    else

        lamda=lamda/2;

    end

    if i>n

        result=X(i);

        return;

    end

    i=i+1;

end