一元四次方程
只含有一个未知数,并且未知数项的最高次数是4的整式方程叫做一元四次方程。
一元四次方程的一般形式是ax4+bx3+cx2+dx+e=0(a,b,c,d,e∈R,且a≠0)。
中文名
一元四次方程
外文名
Quarticequationofoneunknown
解释
只有一个未知数,最高为4次
学科
数学
一般式
ax^4+bx^3+cx^2+dx+e=0(a,b,c,d,e∈R,且a≠0)
快速
导航
方程形式解不含三次项的四次方程常用解法计算公式Excel求解四次方程计算程序代码
满足条件
(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)
通常我们也把它写成四次项系数为1的形式:
x4+bx3+cx2+dx+e=0(b,c,d,e∈R)
解不含三次项的四次方程
一般的一元四次方程可以通过
的代换消掉三次项,得到一个不含三次项的四次方程,然后用配方法求解(这里的配方指的是配平方)。
共7张
一元四次方程求根公式
下面我们通过解一个具体的方程来说明不含三次项的一元四次方程的解法。(我们在学习一元一次方程,二元一次方程组和分式方程的时候也是先学具体的方程的解法,并没有学习系数用字母表示的一般形式方程的解法。这里为了通俗易懂就选了一个具体的四次方程来解)
解方程:
首先我们把x4换成(x2+y)2,其中y是任取的。由于后者与前者相差2yx2+y2,需要在方程右边加上2yx2+y2,等式才能成立,于是方程变为
移项,得
左边已经是完全平方,现在需要正确选取y值,把右边也配成完全平方
一个二次三项式ax2+bx+c能写成完全平方的条件是△=b2-4ac=0。所以我们让右边的二次三项式的△=0,即
展开后得到
这是一个关于y的一元三次方程,利用三次方程的求根公式可以求得其中一个解为y=1(可以选择方程三根中任何一个实数根)
代入原来的方程,得到
此时方程右边也可以写成完全平方的形式
两边同时开方,就可以得到两个一元二次方程
总共有四个解
在上面的例子中,求出的三次方程的根y比较简单,代入y的值后方程的右边是x2-4x+4,很容易看出完全平方为(x-2)2。然而,绝大多数三次方程的根都是无理数。三次方程的根比二次方程复杂很多,二次方程的无理根能用单层根号精确表示,而要想精确表示一个三次方程的无理根,至少需要两层根号。三次方程的根已经复杂到至少需要两层根号才能精确表示,四次方程至少需要三层,而五次方程的根完全没有办法用根号表示。由于根的精确表达式极为复杂,用这样的结果进行后面的代数运算会很麻烦,所以往往取近似值简化运算。这就是我们通常所说的,高次方程的精确解无意义,因为表达式过于复杂,难以运算。
如果求出的y值带有根号,或者只是一个近似值(解三次方程的时候直接列竖式笔算开平方和开立方,得到的是近似解),可以用下面的方法写出完全平方。
已知△=b2-4ac=0,所以c=b2/4a,因此
这就是最终的完全平方形式。在上面的例子中,a=2y-1=1,b=-4,代入之后得到的就是(x-2)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)
设
比较dy对应项系数,得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。
因此,一元四次方程有两对重根,即
求根公式(费拉里法)
对费拉里计算方法整理后,即可得到一元四次方程
的求根公式
如果
|Q-D|"data-data-data-owner="两个水煎包"data-mode="formula-img">那么
否则
若u不为零,
,否则v为零
上面三个公式中的k可取值1,2,3,用来区别费拉里法中一元三次方程的三个根。请选择
最大的那组(m,S,T)。
如果
的最大值仍为零,则
,
,
一元四次方程的四个根为:
其中
求根公式(planetmath)
网站planetmath.org上列出了方程
的求根公式[1]
查看这个公式,需要非常的耐心和细心。将其分拆后,可以得到如下公式:
四个根为(n=1,2,3,4)
可见,这个公式是“求根公式(费拉里法)”的一个特例。
这个公式不仅复杂,而且有很多问题:
1、当u=0时
会计算失败;
2、当时,求根计算会失败。
Excel求解四次方程
Excel求解四次方程
一元四次方程的求根公式主要有两种。
第一种是用x=u+v+w推导出来的只含三层根号的公式,形式为x=±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栏计算2p3+27q2-72pr:
=2*G2*G2*G2+27*H2*H2-72*G2*I2
K栏计算p2+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√N0时为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,在弹出的窗口中添加模块):
FunctionIMCBRT(x,OptionalwAsInteger=0)
IfWorksheetFunction.Imaginary(x)=0Then
IMCBRT=WorksheetFunction.Power(x,1/3)
Else
IMCBRT=WorksheetFunction.ImPower(x,1/3)
EndIf
IfwMod3=1Then
w1=WorksheetFunction.Complex(-1/2,VBA.Sqr(3)/2)
IMCBRT=WorksheetFunction.ImProduct(w1,IMCBRT)
ElseIfwMod3=2Then
w2=WorksheetFunction.Complex(-1/2,-VBA.Sqr(3)/2)
IMCBRT=WorksheetFunction.ImProduct(w2,IMCBRT)
EndIf
EndFunction
FunctionIMROUND(x,OptionalnAsInteger=0)
real=WorksheetFunction.Round(WorksheetFunction.ImReal(x),n)
imag=WorksheetFunction.Round(WorksheetFunction.Imaginary(x),n)
IMROUND=WorksheetFunction.Complex(real,imag)
EndFunction
FunctionIMOPPSITE(x)
Ifx=0Then
IMOPPSITE=0
Else
real=-WorksheetFunction.ImReal(x)
imag=-WorksheetFunction.Imaginary(x)
IMOPPSITE=WorksheetFunction.Complex(real,imag)
EndIf
EndFunction
函数的用法:
IMCBRT(x)求x的算术立方根,IMCBRT(x,1)和IMCBRT(x,2)求x的其他两个立方根
IMROUND(x,n)让复数x四舍五入保留n位小数
IMOPPSITE(x)求复数x的相反数-x
计算程序代码
费拉里法(VC++)
#include
#include
#include
/******************************************************************************\
对一个复数x开n次方
\******************************************************************************/
std::complexsqrtn(conststd::complex&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(r*cos(a),r*sin(a));
}
returnstd::complex();
}
/******************************************************************************\
使用费拉里法求解一元四次方程a*x^4+b*x^3+c*x^2+d*x+e=0
\******************************************************************************/
voidFerrari(std::complexx[3]
,std::complexa
,std::complexb
,std::complexc
,std::complexd
,std::complexe)
{
a=1.0/a;
b*=a;
c*=a;
d*=a;
e*=a;
std::complexP=(c*c+12.0*e-3.0*b*d)/9.0;
std::complexQ=(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::complexD=sqrtn(Q*Q-P*P*P,2.0);
std::complexu=Q+D;
std::complexv=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::complexy;
if(u.real()*u.real()+u.imag()*u.imag()>0.0)
{
v=P/u;
std::complexo1(-0.5,+0.86602540378443864676372317075294);
std::complexo2(-0.5,-0.86602540378443864676372317075294);
std::complex&yMax=x[0];
doublem2=0.0;
doublem2Max=0.0;
intiMax=-1;
for(inti=0;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
{
m2Max=m2;
yMax=y;
iMax=i;
}
}
y=yMax;
}
else
{//一元三次方程,三重根
y=c/3.0;
}
std::complexm=sqrtn(b*b+4.0*(y-c),2.0);
if(m.real()*m.real()+m.imag()*m.imag()>=DBL_MIN)
{
std::complexn=(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++)
voidTest_QuarticEquation()
{
std::complexx[4];
std::complexx1(2.0,0.0);//随便填
std::complexx2(2.0,0.0);//随便填
std::complexx3(2.0,0.0);//随便填
std::complexx4(2.0,0.0);//随便填
std::complexa(1.0,0.0);//随便填(不为零即可)
std::complexb=a*(-x1-x2-x3-x4);
std::complexc=a*(x1*x2+x1*x3+x1*x4+x2*x3+x2*x4+x3*x4);
std::complexd=a*(-x2*x3*x4-x1*x3*x4-x1*x2*x4-x1*x2*x3);
std::complexe=a*(x1*x2*x3*x4);
Ferrari(x,a,b,c,d,e);//验证费拉里法
}
神级无限融合提示您:看后求收藏(同创文学网http://www.tcwxx.com),接着再看更方便。