|||
一元三次方程aX^3+bX^2+cX+d=0,(a,b,c,d∈R,且a≠0)。
重根判别式:
A=b^2-3ac;
B=bc-9ad;
C=c^2-3bd,
总判别式:
Δ=B^2-4AC。
当A=B=0时,盛金公式①:
X1=X2=X3=-b/(3a)=-c/b=-3d/c。
当Δ=B^2-4AC>0时,盛金公式②:
X1=(-b-((Y1)^(1/3)+(Y2)^(1/3)))/(3a);
X2,3=(-2b+(Y1)^(1/3)+(Y2)^(1/3)±3^(1/2)((Y1)^(1/3)-(Y2)^(1/3))i)/(6a),
其中Y1,2=Ab+3a(-B±(B^2-4AC)^(1/2))/2,i^2=-1。
当Δ=B^2-4AC=0时,盛金公式③:
X1=-b/a+K;
X2=X3=-K/2,
其中K=B/A,(A≠0)。
当Δ=B^2-4AC<0时,盛金公式④:
X1=(-b-2A^(1/2)cos(θ/3))/(3a);
X2,3=(-b+A^(1/2)(cos(θ/3)±3^(1/2)sin(θ/3)))/(3a),
其中θ=arccosT,T= (2Ab-3aB)/(2A^(3/2)),(A>0,-1<T<1)。
验算如下:
验算方程:x^3+3X^2+x+3=0;
a=1,b=3,c=1,d=3;
A=b^2-3ac = 3*3-3*1*1=6;
B=bc-9ad = 3*1-9*1*3=-24;
C=c^2-3bd = 1*1-3*3*3=-26,
总判别式:
Δ=B^2-4AC = (-24)*(-24)-4 * 6*(-26)= 1200。
当Δ=B^2-4AC=1200>0时,盛金公式②:
Y1=Ab+3a(-B+(B^2-4AC)^(1/2))/2=6*3+3*1*(24+Sqrt(1200))/2=27+10*sqrt(3)~=44.32
Y2=Ab+3a(-B-(B^2-4AC)^(1/2))/2=27-10*sqrt(3)~=9.68
程序算出的Y1=65.46,Y2=-38.46,出现差异了!
发现Bug:
公式为:Y1=Ab+3a(-B+(B^2-4AC)^(1/2))/2
程序错为:Y1:= DA * Fb + 3*Fa*(-Fb+sqrt(DD))/2;应该为Y1:= DA * Fb + 3*Fa*(-DB+sqrt(DD))/2;
把-DB误用了Fb,原来错在这!
bug修复后,程序计算结果为:
-3+0i
3.70074341541719E-17+1i
3.70074341541719E-17-1i
非常正确。现在,一元三次方程在Δ>0时,能解对了。<0时也测试过了。
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-11-23 13:21
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社