為什麼會想實作牛頓法呢?因為覺得如果能夠叫電腦幫我把方程式的根求出來很潮,所以…,嗯…。

牛頓法,是一種實數域及複數域上近似求解方程式的方法。

就不推導了(其實是推不出來),想要了解,請至維基百科或是線代啟示錄…。

主要是欲解多元一次方程式,所以透過牛頓法的公式來實作。

由公式來看

簡單講,就是讓反覆(瘋狂)迭代,順利的話就會收斂到一個值,使其與的差值絕對值小於或是代回原式之值之絕對值小於(理論上是要等於0,但跳出迭代的條件如果等於0,有可能會算到天荒地老都算不出結果),可為原式的一個根。(應該是吧?汗)

所以,需要準備的工具要有…

  1. 程式化的微分方法
  2. 初始值
  3. 迭代的迴圈
  4. 可接受的eps()

 再來,整理一下思路…,虛擬碼(pseudocode)大guy4醬子…(亂寫)

============================================

牛頓法    演算法(Algorithm)

初始化起點、容許誤差eps() 、初始化次數

Do

Loop Until   

程式結束

============================================

其時間複雜度為

接著…實作後,來看看…效果如何…。以  為例

採用初始值 開始迭代

最後就會得到一個實數解

代回去驗算一下,誤差大概為…,嗯…,應該還ok吧。

不過這樣子好像只能解到一個根,感覺不太夠用,所以我做了些調整…。

讓它跑三個值來試試看…,我寫了亂數,會隨機從1~1000,跟-1~-1000各挑1個值來當初始值,再搭配1個以0開始的初始值來run

最後得到了另一個實數解,代回驗算的誤差大約為

然後…,用了一下專業軟體確認過…,這個方程式確實只有兩個實數解,大概是這樣。

文章標籤
全站熱搜
創作者介紹
創作者 haruka 的頭像
haruka

【wei*2】

haruka 發表在 痞客邦 留言(0) 人氣(588)