幫朋友做的乙個題目,關於牛頓迭代法求方程的根. 不難,但是費了我很長時間,以前的知識,重新拾起來卻很耗時間。今天做一記錄,一來加深印象,二來備必要時檢視。
1、牛頓迭代法的基本知識
參考資料:newton』s method and loops
上面的資料闡述很詳細,我就不多加補充。
2、問題簡述
用牛頓迭代法求 9x
2−si
nx−=
0 在[0,1]內的乙個根。
3、問題求解
1、建立equanewton.m檔案
function [k,x,f_value]=equanewton
(f,df,x0,eps,n)
fprintf( ' k x f\n');
f_value=f(x0);
for k=1:n
x=x0-f_value/df(x0);
f_value=f(x);
fprintf( '%3d, %12.11f, %12.11f\n',k,x,f_value)
ifabs(x-x0)return
else
x0=x;
if k==n
warning('演算法超出最大迭代次數!');
endendend
引數解釋:
f:原函式
df: 原函式的導數
x0:初始迭代值
eps:結果的精度
n: 最大的迭代次數
2、命令列視窗執行
f=inline(『9*x^2 - sin(x) - 1』);df=inline(『18*x - cos(x)』);
x0=1;
eps=1e-5;
n=1e5;
執行:
equanewton(f,df,x0,eps,n)
結果:
equanewton(f,df,x0,eps,n)k x f
1, 0.58999696669, 1.57650928396
2, 0.42894795297, 0.24005282000
3, 0.39370649299, 0.01142925889
4, 0.39185206418, 0.00003160878
5, 0.39184690704, 0.00000000024
ans =
5
取最後的結果:0.39184690704
牛頓迭代法求根
給定乙個正數a,不用庫函式求其平方根。設其平方根為x,則有x2 a,即x2 a 0。設函式f x x2 a,則可得圖示紅色的函式曲線。在曲線上任取一點 x0,f x0 其中x0 0那麼曲線上該點的切線方程為 求該切線與x軸的交點得 因為1 2式中x0作為分母,所以在之前限定了一下初始值不要選0。那麼...
牛頓迭代法 求 根
這是乙個求根很牛皮的乙個方法,迭代幾次後精度也變得非常的高了.假設我們求 2的值,用牛頓迭代法.大致過程就是隨便選取乙個自認為離根比較近的,離譜點也沒事,假如選x 4,然後不斷進行如下操作 不斷令 x x f x f x f x x 2 a a 2 所以就是 x 4 14 8 2.25 再一次 x ...
C 迭代法求開方 牛頓迭代法求根近似值
include include double f double x double f2 double x int main printf lf s2 利用牛頓迭代法求方程的根 有這麼乙個方程2x 3 4x 2 3x 6 0 則令f x 2x 3 4x 2 3x 6 求出f x 6x 2 8x 3 下...