複製鏈接
請複製以下鏈接發送給好友

一元四次方程

鎖定
只含有一個未知數,並且未知數項的最高次數是4的整式方程叫做一元四次方程。
一元四次方程的標準形式是ax4+bx3+cx2+dx+e=0(a,b,c,d,e∈R,且a≠0)。
中文名
一元四次方程
外文名
Quartic equation with one unknown
解    釋
只有一個未知數,最高為4次
學    科
數學
一般式
ax^4+bx^3+cx^2+dx+e=0(a,b,c,d,e∈R,且a≠0)
根的個數
1-4個

一元四次方程滿足條件

(a,b,c,d,e∈R,且a≠0)
一元四次方程必須滿足以下三個條件:
①是整式方程,即等號兩邊都是整式;方程中如果有分母,且未知數在分母上,那麼這個方程就是分式方程不是一元四次方程;方程中如果有根號,且未知數在根號內,那麼這個方程也不是一元四次方程,這點請注意!
②只含有一個未知數;
③未知數項的最高次數是4(即a≠0)。
注:如果方程滿足條件①,化簡後不滿足條件②和③,則該方程不是一元四次方程

一元四次方程方程形式

一般形式:
ax4+bx3+cx2+dx+e=0(a,b,c,d,e∈R,且a≠0)
一元四次方程的四個根(root) 一元四次方程的四個根(root)
通常我們也把它寫成四次項係數為1的形式:
x4+bx3+cx2+dx+e=0(b,c,d,e∈R)

一元四次方程解不含三次項的四次方程

一元四次方程求根公式
一元四次方程求根公式(7張)
一般的一元四次方程可以通過
的代換消掉三次項,得到一個不含三次項的四次方程,然後用配平方法求解。
下面我們通過解一個具體的方程來説明不含三次項的一元四次方程的解法。(我們在學習一元一次方程二元一次方程組分式方程的時候也是先學具體的方程的解法,並沒有學習係數用字母表示的一般形式方程的解法。這裏為了通俗易懂就選了一個具體的四次方程來解)
首先我們把x4換成(x²+y)²,其中y是任取的。由於後者與前者相差2yx²+y²,需要在方程右邊加上2yx²+y²,等式才能成立,於是方程變為
移項,得
左邊已經是完全平方,需要正確選取y值,把右邊也配成完全平方
一個二次三項式ax²+bx+c能寫成完全平方的條件是△=b²-4ac=0。所以我們讓右邊的二次三項式的△=0,即
展開後得到
這是一個關於y的一元三次方程,利用三次方程的求根公式可以求得其中一個解為y=1(可以選擇方程三根中任何一個實數根
代入原來的方程,得到
此時方程右邊也可以寫成完全平方的形式
兩邊同時開方,就可以得到兩個一元二次方程
總共有四個解
在上面的例子中,求出的三次方程的根y比較簡單,代入y的值後方程的右邊是x²-4x+4,很容易看出完全平方為(x-2)²。然而,絕大多數三次方程的根都是無理數。三次方程的根比二次方程複雜很多,二次方程的無理根能用單層根號精確表示,而要想精確表示一個三次方程的無理根,至少需要兩層根號。三次方程的根已經複雜到至少需要兩層根號才能精確表示,四次方程至少需要三層,而五次方程的根完全沒有辦法用根號表示。由於根的精確表達式極為複雜,用這樣的結果進行後面的代數運算會很麻煩,所以往往取近似值簡化運算。這就是我們通常所説的,高次方程精確解無意義,因為表達式過於複雜,難以運算。
如果求出的y值帶有根號,或者只是一個近似值(解三次方程的時候直接列豎式筆算開平方和開立方,得到的是近似解),可以用下面的方法寫出完全平方。
已知△=b²-4ac=0,所以c=b²/4a,因此
這就是最終的完全平方形式。在上面的例子中,a=2y-1=1,b=-4,代入之後得到的就是(x-2)²。
解四次方程使用的配平方法和解二次方程使用的配方法有着細微的差別。解二次方程是通過加一個常數來配方,而解四次方程則是通過確定二次項係數常數項中的參數y來配方。

一元四次方程常用解法

一元四次方程費拉里法

方程兩邊同時除以四次項的係數可得
(1)
移項可得 x4+bx3=-cx2-dx-e (2)
兩邊同時加上
,可將(2)式左邊配成完全平方,
方程成為
(3)
在(3)式兩邊同時加上
可得
(4)
(4)式中的y是一個參數。當(4)式中的x為原方程的根時,不論y取什麼值,(4)式都應成立。
特別,如果所取的y值使(4)式右邊關於x的二次三項式也能變成一個完全平方式,則對(4)對兩邊同時開方可以得到次數較低的方程。 為了使(4)式右邊關於x的二次三項式也能變成一個完全平方式,只需使它的判別式變成0,即
(5)
這是關於y的一元三次方程,可以通過塔塔利亞公式來求出y應取的實數值。
把由(5)式求出的y值代入(4)式後,(4)式的兩邊都成為完全平方,兩邊開方,可以得到兩個關於x的一元二次方程
解這兩個一元二次方程,就可以得出原方程的四個根。
費拉里法經過簡化後,實際上可以這樣表述:
先將一元四次方程化為x4+bx3+cx2+dx+e=0
此方程是以下兩個一元二次方程的解: 
2x2+(b+M)x+2(y+N/M)=0
2x2+(b-M)x+2(y-N/M)=0
其中
M=√(8y+b2-4c);N=by-d,(M≠0)
y是一元三次方程8y3-4cy2-(8e-2bd)y-e(b2-4c)-d2=0的任一實根
費拉里發現的上述解法的創造性及巧妙之處在於:第一次配方得到(3)式後引進參數y,並再次配方把(3)式的左邊配成含有參數y的完全平方,即得到(4)式,再利用(5)式使(4)的右邊也成為完全平方,從而把一個一元四次方程的求解問題化成了一個一元三次方程及兩個一元二次方程的求解問題。 不幸的是,就象塔塔利亞發現的一元三次方程求根公式被誤稱為卡當公式一樣,費拉里發現的一元四次方程求解方法也曾被誤認為是波培拉發現的。

一元四次方程笛卡爾法

一般的四次方程還可以待定係數法解,這種方法稱為笛卡爾法,由笛卡爾於1637年提出。
先將四次方程化為x4+ax3+bx2+cx+d=0的形式。
,整理後得到
(1)
比較方程(1)對應項係數,得t+m-k2=p,k(m-t)=q,tm=r
設k≠0,把t和m當作未知數,解前兩個方程,得
再代入第三個方程,得
。即k6+2pk4+(p2-4r)k2-q2=0
解這個方程,設k0是它的任意一根,t0和m0是k=k0時t和m的值那麼方程(1)就成為
解方程y2+k0y+t0=0和y2-k0y+m0=0就可以得出方程(1)的四個根,各根加上-a/4就可以得出原方程的四個根。

一元四次方程計算公式

一元四次方程費拉里法

費拉里法求解一元四次方程
的步驟如下
(取模較大的數值)
(若 u 為零,則 v 也取值為零)
y有三種取值
上面兩個公式中,
分別代入
,就能得到三組(y,m)。請選擇
最大或
的一組作為 y,m 的數值。
若m=0則一元四次方程有兩對重根計算公式如下:
若 m 不等於零,則一元四次方程的求根公式如下:
算例1:
上式中
,可算得
y 取
時,m = 0。這個 y 不合適,換一個再試試
y 取
時,
可算得四個根為
算例2:
上式中
,可算得
y 有三重根
,可算得 m = 0。
因此,一元四次方程有兩對重根,即

一元四次方程求根公式費拉里法

對費拉里計算方法整理後,即可得到一元四次方程
的求根公式
如果
那麼
否則
若 u 不為零,
,否則 v 為零
上面三個公式中的 k 可取值1,2,3,用來區別費拉里法中一元三次方程的三個根。請選擇
最大的那組(m,S,T)。
如果
的最大值仍為零,則
一元四次方程的四個根為:
其中

一元四次方程求根公式planetmath

網站planetmath.org上列出了方程
的求根公式 [1] 
查看這個公式,需要非常的耐心和細心。將其分拆後,可以得到如下公式:
四個根為(n = 1,2,3,4)
可見,這個公式是“求根公式(費拉里法)”的一個特例。
這個公式不僅複雜,而且有很多問題:
1、當u=0 時
會計算失敗;
2、當
時,求根計算會失敗。

一元四次方程Excel求解四次方程

Excel求解四次方程 Excel求解四次方程
一元四次方程的求根公式主要有兩種。
第一種是用y=u+v+w推導出來的只含三層根號的公式,形式為x=-b/4a±1√L±2√M±3√N,其中L、M、N是某三次方程的三根。公式中的分母只含a,不含其它任何字母,可以求解任意四次方程。但公式中含有虛數ω,計算比較繁瑣。
第二種是用配平方法、待定係數法等方法推導出來的含有四層根號的公式。公式中不含虛數,但是分母中含有a以外的字母,當q=0時無法利用這些求根公式求解。
這裏我們選擇第一種公式求解。
A~E欄填寫方程的係數(實數)
G欄計算參數p:
=(8*A2*C2-3*B2*B2)/(8*A2*A2)
H欄計算參數q:
=(8*A2*A2*D2-4*A2*B2*C2+B2*B2*B2)/(8*A2*A2*A2)
I欄計算參數r:
=(256*A2*A2*A2*E2-64*A2*A2*B2*D2+16*A2*B2*B2*C2-3*B2*B2*B2*B2)/(256*A2*A2*A2*A2)
J欄計算2p³+27q²-72pr:
=2*G2*G2*G2+27*H2*H2-72*G2*I2
K欄計算p²+12r:
=G2*G2+12*I2
L欄計算參數L:
=IMDIV(IMSUM(-2*G2,IMCBRT(IMDIV(IMSUM(J2,IMSQRT(J2*J2-4*K2*K2*K2)),2)),IMCBRT(IMDIV(IMSUB(J2,IMSQRT(J2*J2-4*K2*K2*K2)),2))),12)
M欄計算參數M:
=IMDIV(IMSUM(-2*G2,IMCBRT(IMDIV(IMSUM(J2,IMSQRT(J2*J2-4*K2*K2*K2)),2),1),IMCBRT(IMDIV(IMSUB(J2,IMSQRT(J2*J2-4*K2*K2*K2)),2),2)),12)
N欄計算參數N:
=IMDIV(IMSUM(-2*G2,IMCBRT(IMDIV(IMSUM(J2,IMSQRT(J2*J2-4*K2*K2*K2)),2),2),IMCBRT(IMDIV(IMSUB(J2,IMSQRT(J2*J2-4*K2*K2*K2)),2),1)),12)
O欄為q√L√M√N的值,用來判斷方程的類別:
=IMROUND(IMPRODUCT(H2,IMSQRT(L2),IMSQRT(M2),IMSQRT(N2)),6)
當q√L√M√N<0時為A類方程,q√L√M√N>0時為B類方程,q√L√M√N=0時為AB類方程。
P欄為A類方程第一個根:
=IMROUND(IMSUM(-B2/(4*A2),IMSQRT(L2),IMSQRT(M2),IMSQRT(N2)),6)
Q欄為A類方程第二個根:
=IMROUND(IMSUM(-B2/(4*A2),IMSQRT(L2),IMOPPSITE(IMSQRT(M2)),IMOPPSITE(IMSQRT(N2))),6)
R欄為A類方程第三個根:
=IMROUND(IMSUM(-B2/(4*A2),IMOPPSITE(IMSQRT(L2)),IMSQRT(M2),IMOPPSITE(IMSQRT(N2))),6)
S欄為A類方程第四個根:
=IMROUND(IMSUM(-B2/(4*A2),IMOPPSITE(IMSQRT(L2)),IMOPPSITE(IMSQRT(M2)),IMSQRT(N2)),6)
T欄為B類方程第一個根:
=IMROUND(IMSUM(-B2/(4*A2),IMSQRT(L2),IMSQRT(M2),IMOPPSITE(IMSQRT(N2))),6)
U欄為B類方程第二個根:
=IMROUND(IMSUM(-B2/(4*A2),IMSQRT(L2),IMOPPSITE(IMSQRT(M2)),IMSQRT(N2)),6)
V欄為B類方程第三個根:
=IMROUND(IMSUM(-B2/(4*A2),IMOPPSITE(IMSQRT(L2)),IMSQRT(M2),IMSQRT(N2)),6)
W欄為B類方程第四個根:
=IMROUND(IMSUM(-B2/(4*A2),IMOPPSITE(IMSQRT(L2)),IMOPPSITE(IMSQRT(M2)),IMOPPSITE(IMSQRT(N2))),6)
當方程為AB類時,PQRS欄和TUVW欄都是方程的根。
X欄檢驗A類方程第一個根的誤差:
=IMROUND(IMSUM(IMPRODUCT(A2,P2,P2,P2,P2),IMPRODUCT(B2,P2,P2,P2),IMPRODUCT(C2,P2,P2),IMPRODUCT(D2,P2),E2),6)
Y欄檢驗A類方程第二個根的誤差:
=IMROUND(IMSUM(IMPRODUCT(A2,Q2,Q2,Q2,Q2),IMPRODUCT(B2,Q2,Q2,Q2),IMPRODUCT(C2,Q2,Q2),IMPRODUCT(D2,Q2),E2),6)
Z欄檢驗A類方程第三個根的誤差:
=IMROUND(IMSUM(IMPRODUCT(A2,R2,R2,R2,R2),IMPRODUCT(B2,R2,R2,R2),IMPRODUCT(C2,R2,R2),IMPRODUCT(D2,R2),E2),6)
AA欄檢驗A類方程第四個根的誤差:
=IMROUND(IMSUM(IMPRODUCT(A2,S2,S2,S2,S2),IMPRODUCT(B2,S2,S2,S2),IMPRODUCT(C2,S2,S2),IMPRODUCT(D2,S2),E2),6)
AB欄檢驗B類方程第一個根的誤差:
=IMROUND(IMSUM(IMPRODUCT(A2,T2,T2,T2,T2),IMPRODUCT(B2,T2,T2,T2),IMPRODUCT(C2,T2,T2),IMPRODUCT(D2,T2),E2),6)
AC欄檢驗B類方程第二個根的誤差:
=IMROUND(IMSUM(IMPRODUCT(A2,U2,U2,U2,U2),IMPRODUCT(B2,U2,U2,U2),IMPRODUCT(C2,U2,U2),IMPRODUCT(D2,U2),E2),6)
AD欄檢驗B類方程第三個根的誤差:
=IMROUND(IMSUM(IMPRODUCT(A2,V2,V2,V2,V2),IMPRODUCT(B2,V2,V2,V2),IMPRODUCT(C2,V2,V2),IMPRODUCT(D2,V2),E2),6)
AE欄檢驗B類方程第四個根的誤差:
=IMROUND(IMSUM(IMPRODUCT(A2,W2,W2,W2,W2),IMPRODUCT(B2,W2,W2,W2),IMPRODUCT(C2,W2,W2),IMPRODUCT(D2,W2),E2),6)
其中用到的三個自定義函數(按Alt+F11,在彈出的窗口中添加模塊):
Function IMCBRT(x, Optional w As Integer = 0)
    If WorksheetFunction.Imaginary(x) = 0 Then
        IMCBRT = WorksheetFunction.Power(x, 1 / 3)
    Else
        IMCBRT = WorksheetFunction.ImPower(x, 1 / 3)
    End If
    
    If w Mod 3 = 1 Then
        w1 = WorksheetFunction.Complex(-1 / 2, VBA.Sqr(3) / 2)
        IMCBRT = WorksheetFunction.ImProduct(w1, IMCBRT)
    ElseIf w Mod 3 = 2 Then
        w2 = WorksheetFunction.Complex(-1 / 2, -VBA.Sqr(3) / 2)
        IMCBRT = WorksheetFunction.ImProduct(w2, IMCBRT)
    End If
End Function
Function IMROUND(x, Optional n As Integer = 0)
    real = WorksheetFunction.Round(WorksheetFunction.ImReal(x), n)
    imag = WorksheetFunction.Round(WorksheetFunction.Imaginary(x), n)
    IMROUND = WorksheetFunction.Complex(real, imag)
End Function
Function IMOPPSITE(x)
    If x = 0 Then
        IMOPPSITE = 0
    Else
        real = -WorksheetFunction.ImReal(x)
        imag = -WorksheetFunction.Imaginary(x)
        IMOPPSITE = WorksheetFunction.Complex(real, imag)
    End If
End Function
函數的用法:
IMCBRT(x)求x的算術立方根,IMCBRT(x,1)和IMCBRT(x,2)求x的其他兩個立方根
IMROUND(x,n)讓複數x四捨五入保留n位小數
IMOPPSITE(x)求複數x的相反數-x
AB類方程
一元四次方程分為三類:A類、B類、AB類。
AB類方程屬於簡單四次方程。A類、B類方程屬於複雜四次方程。
若一個一元四次方程滿足q√L√M√N=0,這個方程就是AB類方程。且q√L√M√N=0一定是因為q=0。(q的分子為8a²d-4abc+b³)
AB類方程之所以又叫簡單四次方程,是因為這類方程形式上非常簡單,主要包括
(1)只含四次項和常數項的方程:ax4+e=0
證明:因為b=c=d=0,q的分子為0,所以q=0,方程屬於AB類
(2)雙二次方程:ax4+cx2+e=0
證明:因為b=d=0,q的分子為0,所以q=0,方程屬於AB類
(3)能直接用配四次方法求解的四次方程,如x4+4x3+6x2+4x-5=0,可以配成(x+1)4-6=0
證明:方程能用配四次方法直接求解,説明x=y-b/4a換元后得到的方程y4+py2+qy+r=0不含三、二、一次項。因此p=q=0。因q=0,所以方程屬於AB類
配平方法和待定係數法得到的求根公式無法求解AB類四次方程。 [2] 
證明:這個命題等價於“無論p和r為何值,若q=0,則分母2y-p=0,利用求根公式無法計算x的值”。
在前面的推導過程中已經知道配平方法和待定係數法得到的公式是等價的,所以下面僅考慮配平方法的公式。
推導過程中關於y的三次方程是8y³-4py²-8ry+4pr-q²=0,顯然當q=0時,y=p/2是方程的一個根。
但三次方程一共有三個根,y=p/2只是其中一個根在需要證明根據y的公式算出來的y確實等於p/2,而不是三次方程的其他兩根,否則沒有説服力。
y的公式裏面含有兩個三次根號,每個三次根號裏面又含有一個二次根號。二次根號裏面的內容是相同的。
當q=0時,二次根號裏面的內容是(2p³-72pr)²-4(p²+12r)³,展開後是-432p4r+3456p2r2-6912r3。提取公因式-432r,得到-432r(p4-8p2r+16r2),括號內是一個完全平方式,於是因式分解成-432r(p²-4r)²。
這下二次根號就可以開出來一些因式了。因為432=12×12×3,所以√[-432r(p²-4r)²]=12(p²-4r)√(-3r)。
第一個三次根號裏面就可以化簡成:p³-36pr+6(p²-4r)√(-3r)
第二個三次根號裏面可以化簡成:p³-36pr-6(p²-4r)√(-3r)
開三次方的結果分別為p+2√(-3r)和p-2√(-3r)。
所以y=[p+p+2√(-3r)+p-2√(-3r)]/6=3p/6=p/2 => 2y-p=0,得證。
這充分説明,配平方法和待定係數法得到的求根公式無法求解所有的一元四次方程。
只有x=u+v+w法得到的只含三層根號的求根公式,才能求解所有的一元四次方程。對於AB類簡單方程,q=0,且u、v、w這三個數中肯定有一個為0,所以±u±v±w只能算出四種結果,對應方程的四個根。
A類、B類複雜方程,q、u、v、w都不為0,±u±v±w算出來是八種結果,其中四種結果是方程的四個根,另外四種結果是增根。
對於實係數四次方程,計算出來的p、q、r也是實數,對應的三次方程也是實係數,三次方程的三根u²、v²、w²只有兩種情況:①三個都是實數;②一個實數,一對共軛虛數。所以uvw相乘一定是實數,不會出現uvw相乘為虛數,無法判斷方程類別的情況。
x=u+v+w法得到的四次方程求根公式中含有虛數i的原因:u²、v²、w²是某三次方程的三根,而三次方程求根公式裏面,第一個根的公式不含虛數i,而第二、第三個根的公式含有虛數i。

一元四次方程計算程序代碼

一元四次方程費拉里法VC++

#include <math.h>
#include <float.h>
#include <complex.h>
/******************************************************************************\
對一個複數 x 開 n 次方
\******************************************************************************/
std::complex<double> sqrtn(const std::complex<double>&x,double n)
{
double r = _hypot(x.real(),x.imag()); //模
if(r > 0.0)
{
double a = atan2(x.imag(),x.real()); //輻角
n = 1.0 / n;
r = pow(r,n);
a *= n;
return std::complex<double>(r * cos(a),r * sin(a));
}
return std::complex<double>();
}
/******************************************************************************\
使用費拉里法求解一元四次方程 a*x^4 + b*x^3 + c*x^2 + d*x + e = 0
\******************************************************************************/
void Ferrari(std::complex<double> x[3]
,std::complex<double> a
,std::complex<double> b
,std::complex<double> c
,std::complex<double> d
,std::complex<double> e)
{
a = 1.0 / a;
b *= a;
c *= a;
d *= a;
e *= a;
std::complex<double> P = (c * c + 12.0 * e - 3.0 * b * d) / 9.0;
std::complex<double> Q = (27.0 * d * d + 2.0 * c * c * c + 27.0 * b * b * e - 72.0 * c * e - 9.0 * b * c * d) / 54.0;
std::complex<double> D = sqrtn(Q * Q - P * P * P,2.0);
std::complex<double> u = Q + D;
std::complex<double> v = Q - D;
if(v.real() * v.real() + v.imag() * v.imag() > u.real() * u.real() + u.imag() * u.imag())
{
u = sqrtn(v,3.0);
}
else
{
u = sqrtn(u,3.0);
}
std::complex<double> y;
if(u.real() * u.real() + u.imag() * u.imag() > 0.0)
{
v = P / u;
std::complex<double> o1(-0.5,+0.86602540378443864676372317075294);
std::complex<double> o2(-0.5,-0.86602540378443864676372317075294);
std::complex<double>&yMax = x[0];
double m2 = 0.0;
double m2Max = 0.0;
int iMax = -1;
for(int i = 0;i < 3;++i)
{
y = u + v + c / 3.0;
u *= o1;
v *= o2;
a = b * b + 4.0 * (y - c);
m2 = a.real() * a.real() + a.imag() * a.imag();
if(0 == i || m2Max < m2)
{
m2Max = m2;
yMax = y;
iMax = i;
}
}
y = yMax;
}
else
{//一元三次方程,三重根
y = c / 3.0;
}
std::complex<double> m = sqrtn(b * b + 4.0 * (y - c),2.0);
if(m.real() * m.real() + m.imag() * m.imag() >= DBL_MIN)
{
std::complex<double> n = (b * y - 2.0 * d) / m;
a = sqrtn((b + m) * (b + m) - 8.0 * (y + n),2.0);
x[0] = (-(b + m) + a) / 4.0;
x[1] = (-(b + m) - a) / 4.0;
a = sqrtn((b - m) * (b - m) - 8.0 * (y - n),2.0);
x[2] = (-(b - m) + a) / 4.0;
x[3] = (-(b - m) - a) / 4.0;
}
else
{
a = sqrtn(b * b - 8.0 * y,2.0);
x[0] =
x[1] = (-b + a) / 4.0;
x[2] =
x[3] = (-b - a) / 4.0;
}
}

一元四次方程驗算代碼VC++

void Test_QuarticEquation()
{
std::complex<double> x[4];
std::complex<double> x1(2.0,0.0); //隨便填
std::complex<double> x2(2.0,0.0); //隨便填
std::complex<double> x3(2.0,0.0); //隨便填
std::complex<double> x4(2.0,0.0); //隨便填
std::complex<double> a ( 1.0,0.0); //隨便填(不為零即可)
std::complex<double> b = a * (-x1-x2-x3-x4);
std::complex<double> c = a * (x1 * x2 + x1 * x3 + x1 * x4 + x2 * x3 + x2 * x4 + x3 * x4);
std::complex<double> d = a * (-x2 * x3 * x4 - x1 * x3 * x4 - x1 * x2 * x4 - x1 * x2 * x3);
std::complex<double> e = a * (x1 * x2 * x3 * x4);
Ferrari(x,a,b,c,d,e); //驗證費拉里法
}
參考資料