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

2021-08-26 18:37:14 字數 1167 閱讀 6538

剛學完牛頓迭代法,為了驗證收斂的速率,用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

endx(i+1)=x(i)-g1/g2;

b=x(i+1)-x(i);

if(abs(b)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);

endeep=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

牛頓迭代法 二分法

牛頓迭代法 用牛頓迭代法求f x 0在x0附近的乙個實根的方法是 1 選乙個接近於x的真實根的近似根x1 2 通過x1求出f x1 在幾何上就是作x x1,交f x 於f x1 3 過f x1 作f x 的切線,交x軸於x2。可以用公式求出x2。由於f x1 f x1 x2 x1 故x2 x1 f ...

二分法 牛頓法開根號

牛頓法 public static double sqrtn1 double value,double accurary double init 1.0 while math.abs init init value accurary return init 二分法和牛頓法的時間複雜度都是o logn...

二分法和牛頓迭代法

先說乙個面試題 問 1.2 0.2 1 答案是false!為什麼?其原因在於十進位制和二進位制的轉換上,計算機先要把十進位制的數轉化為二進位制,然後再計算。但是,在轉化中,浮點數轉化為二進位制,就出問題了,例如 十進位制的 0.1,轉化為二進位制是 0.00011001100110011001100...