點擊上方「科學計算編點程」,可添加關注
一元二次方程我們在初中就知道怎麼解了,一元三次方程也有解析解,但太複雜,沒多少人能記住。
除了少部分通過觀察可以進行因式分解求解,大部分都沒那麼簡單能一眼猜出來。
遇到這些高次方程,一般用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. 結論
迭代法很強大,更多知識請參考工科必修課「數值分析」。
Ref: https://eachcloudcn.blob.core.chinacloudapi.cn/clips/ZLYCV.htm版權歸原作者所有,如涉及版權等問題,請立即聯繫我們,我們會予以更改或刪除相關文章,保證您的權利。
(END)
1你一定要知道的十款主流畫圖軟體
2發表SCI論文有哪些實用工具?
3最值得學習的Matlab參考書有哪些?
4你一定要知道的幾款經典文本編輯器
5最常用的10個Matlab快捷鍵,助你編程更高效
6數學建模競賽前必須熟練掌握的十個算法
7半夜看小說傷眼睛怎麼辦?
8放學快走,你的電腦在實驗室自己喊啪嗒!
9買西瓜的高級玩法,用好你的智慧型手機
回復「熱門」查看更多信息
不定時po一些科研乾貨、編程中的經驗教訓、實用技巧、技術宅和好玩的東西,歡迎關注~