(精算師考試必會)如何利用計算器求解高次方程
利用普通計算器求解高次方程的解(轉自人人)
原文鏈接:http://blog.renren.com/share/299339926/14463405093
摘要:介紹了一種利用普通計算器求解高次方程解的方法,具有很強實用性。
關鍵詞:普通計算器,一元三次方程,牛頓迭代法
0 引言
一元二次方程我們在初中就知道怎麼解了,一元三次方程也有解析解,但太複雜,沒多少人能記住,除了少部分通過觀察可以進行因式分解求解,大部分都沒那麼簡單能一眼猜出來。
遇到這些高次方程,一般用matlab求下,很簡單,但其最大的缺點是要用電腦。
其實只要我們手上有下圖所示「計算器」就可以解一般的三次方程,甚至是更複雜的高次方程。這裡所謂的「普通計算器」是指一般學生使用的卡西歐計算器等,如下圖,普及率應該很高。
以求一元三次方程 2x^3-7x^2+x-15=0 為例,
1 原理
原理為迭代法,「數值分析」的知識就強大在這裡。
對於一般的方程:f(x)=0
求 x0 使得 f(x0)=0 。
轉化 f(x) 的形式,f(x)=x-G(x) ,x=G(x)
使用牛頓迭代法,G(x) 的形式為:G(x)=x - f(x)/f(x) ,(牛頓!),帶入可見 f(x)=0 自然成立。
我們給 G(x) 中的 x 一個初值,計算得到的值可以再作為 x 帶入G(x) 計算,直到 x 穩定在某一個值,此時 G(x0)=x0 ,這個穩定的值 x0 就是方程的一個根,(不動點)。
2、原理完了,就是實際的操作。
圖示計算器內置有10個變數,A-F,X,Y,M,以及Ans,可以分別賦值並帶入表達式計算。
其中,Ans是一個很特別的變數,它是每次計算的結果,"Answer"。我們要用的就是它!
f(x) 的導數,f(x)=6x^2-14x+1
在計算器中輸入,
Ans-(2Ans^3-7Ans^2+Ans-15)/(6Ans^2-14Ans+1)
2Ans表示2*Ans,乘號可省略,「/」 是除號。Ans鍵就在計算器右下角,等號旁邊的那個。
好戲開始了。
輸入完畢,按等號鍵「=」,出現一個值,什麼都別動,再按一次「=」,出現的值變了吧。
繼續按個7、8次。前幾個值會相差很大,到最後,結果會逐漸穩定,直到穩定在
3.871283138
接下來,你再按個幾萬次,它都不會變了。哈哈~~,這個就是方程的一個解。
知道了一個根,其他兩個通過因式分解就很容易求解,
展開上式,得到 b=0.742, c=3.875
然後就是解一元二次方程了,得到兩個虛根,
-0.186 + 1.382i
-0.186 - 1.382i
至此,上面一元三次方程的三個根都解出來了。
在Matlab中,只要輸入一行代碼就搞定,roots([2,-7,1,-15]) 。
Matlab的結果(準確解):
3.8713
-0.1856 + 1.3794i
-0.1856 - 1.3794i
是不是很有意思?呵呵~
3、再介紹下給 Ans 賦初值
不同的初值迭代速度不同。有的初值甚至不收斂,也就是怎麼按等號,結果也不會穩定。牛頓迭代法的收斂速度是很快的(二階收斂),所以一般按個10次,結果還沒穩定,可以換個初值試試。而且不同初值可能收斂到不同的結果,那更好,只要收斂,那麼所得結果就是一個根。
言歸正傳,給Ans變數賦初值,在計算器中隨便輸入個數值,例如10,或0,或-5等,按一次等號「=」,Ans就被賦予以上你輸入的值了。接著輸入那一串的式子,Ans……。操作類似。
也可以換不同的初值試試,而且不需要再次輸入那一串長式子,圖示的計算器有存儲功能,這個用過的人應該都知道。給 Ans 換個值,按「向上鍵」調出之前的式子,接著按「=」號就可以了,很簡單吧。
更複雜的高次方程也可借鑒上面的方法試試,如果確定有實根,並且知道解的範圍,不難得到結果,只是找到所有解包括虛根就有些困難。
4 結論
迭代法很強大,更多知識請參考工科研究生必修課「數值分析」。 PS:牛頓不是一般人
推薦閱讀:
TAG:精算師 |