為什麼會想實作牛頓法呢?因為覺得如果能夠叫電腦幫我把方程式的根求出來很潮,所以…,嗯…。
牛頓法,是一種實數域及複數域上近似求解方程式的方法。
就不推導了(其實是推不出來),想要了解,請至維基百科或是線代啟示錄…。
主要是欲解多元一次方程式,所以透過牛頓法的公式來實作。
由公式來看
簡單講,就是讓反覆(瘋狂)迭代
,順利的話就會收斂到一個值,使
其與
的差值絕對值小於
,或是代回原式之值之絕對值小於
(理論上是要等於0,但跳出迭代的條件如果等於0,有可能會算到天荒地老都算不出結果),可為原式的一個根。(應該是吧?汗)
所以,需要準備的工具要有…
- 程式化的微分方法
- 初始值
- 迭代的迴圈
- 可接受的eps(
)
再來,整理一下思路…,虛擬碼(pseudocode)大guy4醬子…(亂寫)
============================================
牛頓法 演算法(Algorithm)
初始化起點、容許誤差eps(
) 、初始化次數
Do
Loop Until
程式結束
============================================
其時間複雜度為
接著…實作後,來看看…效果如何…。以 為例
採用初始值 開始迭代
最後就會得到一個實數解
代回去驗算一下,誤差大概為…,嗯…,應該還ok吧。
不過這樣子好像只能解到一個根,感覺不太夠用,所以我做了些調整…。
讓它跑三個值來試試看…,我寫了亂數,會隨機從1~1000,跟-1~-1000各挑1個值來當初始值,再搭配1個以0開始的初始值來run
最後得到了另一個實數解,代回驗算的誤差大約為
然後…,用了一下專業軟體確認過…,這個方程式確實只有兩個實數解,大概是這樣。