功課至上

Thursday, January 11, 2007

牛頓法開平方

前言

以前上大一上微積分的時候,老師曾經提過牛頓法,這是一個運用泰勒展開式來求取近似值的方法,我想說如果運用matlab,就可以直接寫程式來計算開方的近似值,這似乎也是計算機計算的原理,算的上是運用的一環。


背景說明
牛頓法(Newton's method)又稱為牛頓-拉夫遜方法(Newton-Raphson method),它是一種在實數域和複數域上近似求解方程的方法,利用函數f(x)的泰勒級數的前面幾項來尋找方程式f(x) = 0的根。首先,選擇一個接近函數f(x)零點的x0,計算相應的f(x0)和切線斜率f'(x0) (這裡f'表示函數f的導數),然後我們計算穿過點(x0,f(x0))並且斜率為f'(x0)的直線和x軸的交點的x坐標, 也就是求如下方程的解:



我們將新求得的點的x坐標命名為x1,通常x1會比x0更接近方程f(x) = 0的解,因此我們現在可以利用x1開始下一輪計算。計算公式可化簡為如下所示:






程式內容:
------------------------------------------------------------------------------------------
%newton2.m
x=input('請輸入一整數值:'); % 輸入一整數
if x>0
delta = 0.001;% set convergence tolerance=0.001
r=1;rold=2;% 設r和rold的初始值
it=0;%設定計數
maxit=30;%設定最大計數次數
while abs(rold-r)> delta & itrold = r;%save old value for convergence test
r =0.5*(rold + x/rold);%牛頓近似式
it = it + 1;
if abs(rold-r)< delta%當abs(rold-r)< delta 則跳出程式,不再計算
break;
end
end
else
fprintf('你輸入的數非正整數!');
return; %當輸入負數,則return to calling function
end
fprintf('\n %d^(1/2)=%g,共計數=%d次',x,r,it);
------------------------------------------------------------------------------------------
執行結果

>> new請輸入一整數值:456

456^(1/2)=21.3542,共計數=8次

>>

0 Comments:

Post a Comment

<< Home