一元三次方程

一元三次方程

只含有一個未知數(即“元”),並且未知數的最高次數為3(即“次”)的整式方程叫做一元三次方程(英文名:cubic equation of one unknown)。一元三次方程的標準形式(即所有一元三次方程經整理都能得到的形式)是ax3+bx2+cx+d=0(a,b,c,d為常數,x為未知數,且a≠0)。一元三次方程的公式解法有卡爾丹公式法與盛金公式法。兩種公式法都可以解標準型的一元三次方程。由於用卡爾丹公式解題存在複雜性,相比之下,盛金公式解題更為直觀,效率更高。

基本信息

公式解法

卡爾丹公式法

特殊型一元三次方程X^3+pX+q=0,(p、q∈R)。
判別式Δ=(q/2)^2+(p/3)^3。

卡爾丹公式
X1=(Y1)^(1/3)+(Y2)^(1/3);
X2= (Y1)^(1/3)ω+(Y2)^(1/3)ω^2;
X3=(Y1)^(1/3)ω^2+(Y2)^(1/3)ω,
其中ω=(-1+i3^(1/2))/2;Y(1,2)=-(q/2)±((q/2)^2+(p/3)^3)^(1/2)。

標準型一元三次方程aX^3+bX^2+cX+d=0,(a,b,c,d∈R,且a≠0)。
令X=Y—b/(3a)代入上式,
可化為適合卡爾丹公式直接求解的特殊型一元三次方程Y^3+pY+q=0。

卡爾丹判別法
當Δ=(q/2)^2+(p/3)^3>0時,方程有一個實根和一對共軛虛根
當Δ=(q/2)^2+(p/3)^3=0時,方程有三個實根,其中有一個兩重根;
當Δ=(q/2)^2+(p/3)^3<0時,方程有三個不相等的實根。

盛金公式法

三次方程套用廣泛。用根號解一元三次方程,雖然有著名的卡爾丹公式,並有相應的判別法,但使用卡爾丹公式解題比較複雜,缺乏直觀性。范盛金推導出一套直接用a、b、c、d表達的較簡明形式的一元三次方程的一般式新求根公式--盛金公式,並建立了新判別法--盛金判別法。

盛金公式1盛金公式1

盛金定理

當Δ=0(d≠0)時,使用卡爾丹公式解題仍存在開立方。與卡爾丹公式相比較,盛金公式的表達形式較簡明,使用盛金公式解題較直觀、效率較高;盛金判別法判別方程的解較直觀。重根判別式A=b^2-3ac;B=bc-9ad;C=c^2-3bd是最簡明的式子,由A、B、C構成的總判別式Δ=B^2-4AC也是最簡明的式子(是非常美妙的式子),其形狀與一元二次方程的根的判別式相同;盛金公式②中的式子(-B±(B^2-4AC)^(1/2))/2具有一元二次方程求根公式的形式,這些表達形式體現了數學的有序、對稱、和諧與簡潔美。
盛金公式解法的以上結論,發表在《海南師範學院學報(自然科學版)》(第2卷,第2期;1989年12月,中國海南。國內統一刊號:CN46-1014),第91—98頁。范盛金,一元三次方程的新求根公式與新判別法。(NATURAL SCIENCE JOURNAL OF HAINAN TEACHERES COLLEGE , Hainan Province,China.Vol.2,No.2;Dec,1989),A new extracting formula and a new distinguishing means on the one variable cubic equation,Fan Shengjin.PP·91—98。

通用求根公式

當一元三次方程的係數是複數時,直接使用卡爾丹公式求解,有時會出現問題。此時,可使用下面的公式:

通用求根公式(一)通用求根公式(一)
通用求根公式(二)通用求根公式(二)

方程故事

一元三次方程一元三次方程
很久以前,人們就解決了一元一次方程與一元二次方程的求解問題。(在初一和初二就會學習到有關內容)然而對一元三次方程的求解卻使眾多的數學家們陷入了困境,許多人的努力都以失敗而告終。
1494年,義大利數學家帕西奧利(1445—1509年),對三次方程進行過艱辛的探索後作出 極其悲觀的結論,他認為在當時的數學中,求解三次方程,猶如化圓 為方問題一樣,是根本不可能的。這種對以前失敗的悲嘆聲,卻成為16世紀義大利數學家迎接挑戰的號角。以此為序曲引出了我們要講述的關於三次方程求解的故事。
故事中第一個出場的人物:大學教授,費羅(Scipione del Ferro, 1465-1526)。
費羅在帕西奧利作出悲觀結論不久,大約在1500 年左右,得到了x3+mx=n這樣一類缺項三次方程的求解公式。在求解三次方程的道路上,這是一個不小的成功。但出乎我們意料的是,他並沒有馬上發表自己的成果以廣為傳播自己的成功。相反,他對自己的解法絕對保密!這在“不發表即發霉”的今天,真是不可思議之事!在當時卻有其原因。那時一個人若想要保住自己的大學職位,必須在與他人的學術論爭中不落敗。因此,一個重要的新發現就成了一件論爭中處於不敗之地的有力武器。
故事中第二個出場的人物:費羅的學生菲奧爾。
最後直到費羅臨終前,大約1510年左右,他才將自己的這一“殺手鐧”傳給兩個人:他的女婿和他的一個學生。 他那不學無術的女婿不久就將此拋之腦後了,這樣他的學生菲奧爾以 這一“殺手鐧”唯一傳人的角色在我們的故事中作為第二個人物露面了。菲奧爾本人的數學才能並不突出,但他卻因獨得費羅秘技而以之炫耀於世。只不過他“獨此一家,別無分店”的招牌卻沒有掛太長的時間,一個厲害的挑戰者塔塔利亞 出現在他的面前。
故事中第三個出場的人物:塔塔利亞(Niccolo Tartaglia of Brescia, 1499-1557) 。
這是我們故事中出場的第三個人物,其原名豐塔納。1512年,在 一次戰亂中他被一法國兵用刀砍傷臉部,頭部口舌多處受傷,其後雖僥倖活命,卻留下了口吃的後遺症。於是就得了“塔塔利亞”的綽號,義大利語就是“口吃者”的意思。那時他還只有13歲。然而這並沒有 妨礙這位有才能的頑強的少年主要通過自學的方式在數學上達到極高 的成就。1534年他宣稱自己已得到了形如x3+mx2=n這類沒有一次項的三次方程的解的方法。不久,菲奧爾就聽到了挑戰者的叫板聲,於是我們故事中的兩位人物開始碰面了。
二人相約在米蘭進行公開比賽。雙方各出三十個三次方程的問題,約定誰解出的題目多就獲勝。塔塔利亞在1535年2月13日,在參加比賽前夕經過多日的苦思冥想後終於找到了多種類型三次方程的解法。於是在比賽中,他只用了兩個小時的時間就輕而易舉地解出了對方的所有題目,而對方對他的題目卻一題都做不出來。這樣他以30:0的戰績大獲全勝。這次輝煌的勝利為塔塔利亞帶來了轟動一時的榮譽,同時也意味著菲奧爾可以在我們的故事中以不體面的方式先行退場了。
塔塔利亞為這次勝利所激勵,更加熱心於研究一般三次方程的解法。到1541年,終於完全解決了三次方程的求解問題。或許是出於與費羅同樣的考慮,或許是想在進一步醞釀後寫一本關於三次方程解法的書的緣故,塔塔利亞沒有將自己的成果很快發表。於是,風波驟起,本應進入尾聲的故事,由於又一個重要人物的出場而被引入了一個完全不同的方向。
故事中出場的奇特人物卡爾達諾(Girolamo Cardano, 1501 -1576)。
卡爾達諾,這位半路殺出來的“程咬金”,或許是數學史中最奇特的人物。他的本行是醫生,並且是一個頗受歡迎的醫生。但其才能並沒有局限於此,他在各種知識領域裡顯示出自己的天賦。除了是一個極好的醫生外,他還是哲學家和數學家,同時是一個占星術家,並在這些知識領域裡都獲得了重要成果。他行為有些怪異,性好賭博,人品看來也不太佳。在他去世後一百年,偉大的萊布尼茲概括了他的一生:“卡爾達諾是一個有許多缺點的偉人;沒有這些缺點,他將舉世無雙。”在我們故事中卡爾達諾所要扮演的正是一個將才能與不佳的人品集於一身的不太光彩角色。
在塔塔利亞與菲爾奧的競賽後不久,卡爾達諾聽說了這一故事。在此之前他對三次方程求解問題已進行過長時間的研究,卻沒有得到結果。於是可以想像得到他是多么急於想知道塔塔利亞這位解三次方程大師的奇妙技巧。為此他多次向塔塔利亞求教三次方程的解法,開始都被塔塔利亞拒絕了。但最終在卡爾達諾立下永不泄密的誓言後,他於1539年3月25日向卡爾達諾公開了自己的秘密。故事的轉折就這樣開始了。
故事中最後一個出場的人物:費拉里(Ludovico Ferrari, 1522-1565)。
卡爾達諾並沒有遵守自己的諾言,1545年他出版《大術》一書,將三次方程解法公諸於眾,從而使自己在數學界名聲鵲起。當然,如果說句公道話的話,卡爾達諾的《大術》一書並非完全抄襲之作,其中也包含著他自己獨特的創造。然而,這種失信畢竟大大激怒了塔塔利亞。1546年他在《各式各樣的問題與發明》一書中嚴斥卡爾達諾的 失信行為,於是一場爭吵無可避免地發生了。一時間,充滿火藥味的信件在雙方之間飛來飛去。1548年8月10日在米蘭的公開辯論使這場衝突達到白熱化。卡爾達諾在這場公開辯論中自己避不出席而是派遣了一位學生出馬。這個學生的名字叫費拉里,是我們故事中出場的最後一個人物。
費拉里15歲時充當卡爾達諾的家僕。主人發現了他的出眾才能,接受他為學生和助手。18歲時接替卡爾達諾在米蘭講學。其最大的貢獻是發現四次方程的一般解法。現在這位以脾氣暴躁著稱且又忠誠的學生要報答老師的知育之恩了。在這場公開的辯論中,塔塔利亞先以三次方程的迅速解答取得優勢,而費拉里則指摘對方不能解四次方程。於是一場數學論爭逐漸演變成一場無聊的謾罵。最後客場作戰的塔塔利亞以失敗而告終,後者宣稱了自己勝利。由於卡爾達諾最早發表了求解三次方程的方法,因而數學上三次方程的解法至今仍被稱為“卡爾達諾公式”,塔塔利亞之名反而湮沒無聞了。這對塔塔利亞來說似乎是太不公平了。不過,這又怎么樣呢?在歷史上,這類爭奪優先權的論戰又何止這一樁呢?隨著時間的推移,多少年過去後,在當時對於個人如此重要的事,對後人而言卻不過是“古今多少事,都付笑談中”而已。

計算程式代碼

通用求根公式(VC++)

#include<math.h>
#include<float.h>
#include<complex>
/******************************************************************************\
對一個複數x開n次方
\******************************************************************************/
std::complex<double>sqrtn(conststd::complex<double>&x,doublen)
{
doubler=_hypot(x.real(),x.imag());//模
if(r>0.0)
{
doublea=atan2(x.imag(),x.real());//輻角
n=1.0/n;
r=pow(r,n);
a*=n;
returnstd::complex<double>(r*cos(a),r*sin(a));
}
returnstd::complex<double>();
}
/******************************************************************************\
求解一元三次方程a*x^3+b*x^2+c*x+d=0
\******************************************************************************/
voidCubicEquation(std::complex<double>x[3]
,std::complex<double>a
,std::complex<double>b
,std::complex<double>c
,std::complex<double>d)
{
a=1.0/a;
b*=a;
c*=a;
d*=a;
std::complex<double>u=((9.0*c-2.0*b*b)*b-27.0*d)/54.0;
std::complex<double>v=3.0*((4.0*c-b*b)*c*c+((4.0*b*b-18.0*c)*b+27.0*d)*d);
v=sqrtn(v,2.0)/18.0;
std::complex<double>m=u+v;
std::complex<double>n=u-v;
if(n.real()*n.real()+n.imag()*n.imag()>m.real()*m.real()+m.imag()*m.imag())
{
m=n;
}
a=b/-3.0;
if(m.real()*m.real()+m.imag()*m.imag()>0.0)
{
m=sqrtn(m,3.0);
n=(b*b-3.0*c)/(9.0*m);
std::complex<double>o1(-0.5,+0.86602540378443864676372317075294);
std::complex<double>o2(-0.5,-0.86602540378443864676372317075294);
x[0]=m+n+a;
x[1]=o1*m+o2*n+a;
x[2]=o2*m+o1*n+a;
}
else
{
x[0]=
x[1]=
x[2]=a;
}
}

驗算代碼(VC++)

voidTest_CubicEquation()
{
std::complex<double>x[3];
std::complex<double>x1(1.0,0.0);//隨便填
std::complex<double>x2(2.0,0.0);//隨便填
std::complex<double>x3(3.0,0.0);//隨便填
std::complex<double>a(4.5,0.0);//隨便填(不為零即可)
std::complex<double>b=a*(-x1-x2-x3);
std::complex<double>c=a*(x2*x3+x1*x3+x1*x2);
std::complex<double>d=a*(-x1*x2*x3);
CubicEquation(x,a,b,c,d);
}

相關搜尋

熱門詞條

聯絡我們