牛頓法及牛頓下山法求零點
阿新 • • 發佈:2018-12-26
牛頓法
difffun該函式的導函式
a在a附近求零點
ep容忍誤差
k迭代次數
function [x_star,k]=MyNewton(fun,difffun,a,ep) k=1 x_k=a f_xk=feval(fun,x_k) fdiff_xk=feval(difffun,x_k) x_k1=x_k-f_xk/fdiff_xk while abs(x_k-x_k1)>ep k=k+1 x_k=x_k1 f_xk=feval(fun,x_k) fdiff_xk=feval(difffun,x_k) x_k1=x_k-f_xk/fdiff_xk end x_star=x_k1 end
牛頓下山法
function [x_star,k]=MyNewton_xiashan(fun,difffun,a,ep) k=1 x_k=a f_xk=feval(fun,x_k) fdiff_xk=feval(difffun,x_k) x_k1=x_k-f_xk/fdiff_xk f_xk1=feval(fun,x_k1) while abs(x_k-x_k1)>ep r=1; while abs(f_xk1)>abs(f_xk) r=r/2 x_k1=x_k-r*f_xk/fdiff_xk f_xk1=feval(fun,x_k1) end k=k+1 x_k=x_k1 f_xk=feval(fun,x_k) fdiff_xk=feval(difffun,x_k) x_k1=x_k-f_xk/fdiff_xk f_xk1=feval(fun,x_k1) end x_star=x_k1 end