牛頓迭代法求根

2021-07-08 10:07:32 字數 1384 閱讀 9610

幫朋友做的乙個題目,關於牛頓迭代法求方程的根. 不難,但是費了我很長時間,以前的知識,重新拾起來卻很耗時間。今天做一記錄,一來加深印象,二來備必要時檢視。

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 下...