如何通俗易懂地講解牛頓迭代法求開方?數值分析?

時間 2021-05-12 01:02:32

1樓:Mnizjc

若有所疏漏請多指正.

理解的方法並不難,用中學的知識理解應該夠了,但這種方法可能有些歪門邪道了

用求根號2做例子, ,影象如下

Geogebra不是很熟練

原函式:

求導一次:

切線函式:(c為常數,"用不著")

其中x=2和y軸都和x軸成直角,兩角相等,且α和其對頂角相等,可得 .

設 B的橫座標是,A的橫座標是

此處求的是切線x軸截距,即 時x的值

由一次函式的性質得知,影象y軸截距等於常數項,所以由 得,即

(這裡的 直接用 代替了)

如此迭代下去就變成了

x的值也就越來越趨近於

不過這只是一種理解方法,或許麻煩了點.至於其他的細節見 @馬同學 的回答.

(LaTeX真**好用(手動滑稽))

2樓:Owen Qing

(define

(abs x)

(cond

((> x0

)x)((

= x0)

0)((< x0

)(- x

))))

(define

(improvexy

)(* 0.5(+

y(/ x

y))))

(define

(precisionxy

)(-(

* yy)

x))(define (ok

num)

(if(<

(abs

num)

0.000000001)1

0))(define

(newton_sqrtxy

)(if (= (

ok(precisionx(

improvexy

)))1)y

(newton_sqrtx(

improvexy

))))

(newton_sqrt251

);;; 5.000023178253949

3樓:

覺得你們都不夠『通俗易懂』。

#include

int main()

{ int i, n;

double temp, t;

printf("Please enter an integer for its root: ");

scanf("%d",&n);

temp = n/2;

for(i=1; i<=30; i++)

t = n/temp;

temp = (temp + t)/2;

printf("\n%.16f",t);

當然,作為乙個務實的人,我也不知道這個迭代法是不是牛頓迭代法。

4樓:鍵山怜奈

說一下理論上的問題(很淺顯)。牛頓迭代法顧名思義當然是迭代法的一種,所謂迭代法顧名思義就是重複地進行某種運算。進行到何時為止全憑個人好噁,但是理想情況下應該是計算的次數越多離真正的解就越近。

為了用迭代法近似地解乙個方程,我們有兩個問題。問題一是迭代是否收斂,問題二是收斂時是否收斂於我們想要的解。

相比之下問題二比較容易回答,所以我們總是先考慮問題二。

問題二的解決辦法很簡單,因為根據收斂的原理,當我們令 時(其中 連續),如果 成立,那麼一定有 成立。因此,任何迭代操作總是可以表示成為 ,其中 是連續函式並且滿足 ;

當然了,如果 就是我們想要解的方程,那麼直接定義 就可以成為解這個方程的迭代式。

具體的例子,比如我們想要通過解 而得到 的近似值,那麼我們就可以令 ,並從 開始進行近似。以下給出資料:

x0=3.0(1位)

x1=3.1411...(4位)

x2=3.14159265357...(11位)

x3=3.1415926535897932384626433832795020...(34位)

x4=3....(102位)

x5=3....(301位)

收斂速度快的驚人,有效數字幾乎以 的速度增長。這可比 或者 之流要快得多。

當然例子不總是正面的,比如我們想要計算 的值,此時我們令 ,並試圖通過 來近似計算。從1.4開始,我們會發現:

x0=1.4

x1=1.44

x2=1.37...

x3=1.50...

x4=1.25...

x5=1.69...

我們發現它的抖動幅度越來越大,根本就沒有收斂的趨勢。要想讓它正確收斂,我們需要減少振幅,比如令 ,此時我們會發現:

x0=1.4

x1=1.42

x2=1.4118

x3=1.4152...

x4=1.4138...

x5=1.41438...

雖然緩慢但是振幅確實在慢慢地減小

更一般地,對於方程 ,我們總可以令 ; 的絕對值越小意味著每一次迭代的變化就越小,反之絕對值越大每一次迭代的變化就越大。當然了,變化小就導致收斂慢,變化大就收斂快,所以最好能在確保不影響收斂性的情況下讓 的絕對值盡可能地大。牛頓迭代法通過計算導數動態地調節 的值,因此能夠成為一種較為通用的方法。

接下來回答第乙個問題。牛頓迭代法是一種很棒的迭代法。棒就棒在它在大部分情況下都收斂,而且收斂速度就像之前我計算 的時候那樣,有效數字位數以指數級增長。

證明非常簡單,只要會洛必達或者泰勒展開就行。

令 是待解方程,滿足 二階連續可導並且 , 構造迭代式

剩下來的問題就是計算 ,只需要用洛必達或者泰勒級數就行,真的很簡單。以下省略極限算符

反正閒得很,補個 計算好了

因此每進行一次迭代有效數字位數翻3倍

以及補個 的計算

因此每進行一次迭代有效數字增加0.3位

5樓:秋水

有乙個利用「將長方形變得更像正方形」的思路也可以得到求 的算數平方根的迭代公式

算是通俗易懂地得到了這個迭代公式(不過並沒有體現牛頓法的求導等過程,那個用拋物線的切線看是比較直觀的,別的回答裡已經有了)。

首先是考慮是面積為的正方形的邊長,如果畫乙個鄰邊不等的面積是 長方形,設這個長方形的長為,寬為,那麼怎樣能讓這個長方形變得更像乙個正方形呢?是要把長變得短一點,寬變得長一點,可以用長和寬的平均數來作為新的長 ,在面積不變的條件下,新的寬是 。這樣不斷操作下去,長方形的長和寬會越來越接近,就是一直趨近與 了。

這裡更新長方形長的方法

也就是求 的迭代公式。

附上兩張康奈爾大學的課件,來自 L1courseIntro.ppt [Compatibility Mode],我是從這裡看到這個方法的。

6樓:翟毅飛

defsquareRoot(x

,eplison

):"""x 需要求開根號的數值 eplison 誤差值a 需要求開方的值

f(x) = x^2 - a

f(x)的一次導

f'(x) = 2x

牛頓拉復生法求開方

Xn+1 = Xn - f(xn)/f'(Xn)即 Xn+1 = Xn - Xn的偏差值/Xn的一次導Xn 為第N次迭代後開方的猜想值

"""assert

x>=0,

u"x 必須不是乙個負數 "

+str(x

)assert

eplison

>0,u"偏差值必須大於零 "

+str

(eplison)x

=float(x

)guess=x

#x開根號後的猜想值,初始為x的本身

#猜想值的2次方與 x本身的偏差值,如果誤差小於eplison誤差值,則guees為x的開方猜想值

diff

=guess**2

-xctr=

1print

"guess:

%fdiff:

%fctr: %d"

%(guess

,diff

,ctr

)while

abs(

diff

)>eplison

andctr

<=100:

guess

=guess

-diff/(

2*guess

)diff

=guess**2

-xctr+=

1print

"guess:

%fdiff:

%fctr:%d"

%(guess

,diff

,ctr

)print

"guess:

%fiteration: %d"

%(guess

,ctr

)squareRoot(10

,0.01

)guess

:10.000000

diff

:90.000000

ctr:

1guess

:5.500000

diff

:20.250000

ctr:

2guess

:3.659091

diff

:3.388946

ctr:

3guess

:3.196005

diff

:0.214448

ctr:

4guess

:3.162456

diff

:0.001126

ctr:

5guess

:3.162456

iteration:5

7樓:

我覺得吧,不能做無用的重複,這裡已經有乙個非常詳盡的說法了,而且有乙個很棒的gif,一看就明白。

求牛頓開方法的演算法及其原理,此演算法能開任...

8樓:

只是試試.純憑印象.錯誤請指正.

----

1,求方程f(x)=0的根即求曲線y=f(x)與y=0的交點的橫座標.

2,牛頓法:

也就是從估計點x0出發,以y=f(x0)+f'(x0)(x-x0)作為對y=f(x)的估計,求得根x1.

x1=x0-f(x0)/f'(x0)

依次迭代.

3,關於"以y=f(x0)+f'(x0)(x-x0)對y=f(x)近似的解釋"

也就是對曲線y=f(x),那麼使用經過(x0,f(x0))點的其切線,進行近似.

顯然該切線的斜率等於曲線的斜率k=f'(x0),

那麼該切線的方程為y=f'(x0)(x-x0)+f(x0).

(這裡是牛頓法的核心,也就是使用切線對曲線進行近似)

4,對於求開方

也就是求x^2=a的解

這裡f(x)=x^2-a,f'(x)=2x.

所以利用上式:

以y=2x0(x-x0)+x0^2,則其根為

x1=x0-(x0^2-a)/2x0=(x0+a/x0)/2

5,例子

x^2=2.

x0=2,

x1=(2+0.5)/2=1.4998

x2=(x1+1/x1)/2=1.4167

x3=1.4142...

如何通俗易懂地給外行講解金融知識?

金融的本質,是投資與融資。融資的模式,無外乎股權融資 債權融資兩種,主要區別在於是否有明確的融資期限和融資利率。股權融資,就是有福同享 有難同當的融資模式。債權融資,就是賺了不多分 虧了不免單的融資模式。所有融資端的金融產品,都是圍繞著這兩個基本點展開的。投資,其實就是融資的反向操作而已。 惠子 比...

如何通俗易懂地講解網路七層協議?

龍江六叔 你作為使用者想發個快遞,你叫來了順豐,順豐快遞員從你手裡拿走了快遞,又裝進乙個盒子,然後把乙個快遞單子貼在了上面。快遞員回到集散中心,將快遞往那一扔不管了,分揀員把快遞按投遞的省市分開,發往同一地區的快遞放進乙個大快遞包。快遞包上有乙個單子。晚上大車司機來了,把按他的行進路線把所有大包放上...

閘道器到底是什麼求通俗易懂講解

塗鴉鐵皮 yoooo,題主好啊。由於藍芽 Mesh 裝置沒有直接上網的能力,所以需要一種裝置,同時具有藍芽通訊能力和聯網能力,這個裝置就是閘道器。其實非常形象,閘道器就是網路關口,就像大門一樣,藍芽裝置的所有聯網資料都要通過這個 大門 上傳 下發。所以閘道器是一種特殊的裝置,擁有閘道器的藍芽 Mes...