Func
©~cubic(p,v) Roots of cubic equ
p - cubic equ
v - independent var
Local p,r,q,ù,a,b,u,v,w
If getType(é)≠"EXPR":Return "p\cubic:arg must be a cubic eq"
p\coef(é,ý)→ù
If dim(ù)≠4:Return "p\cubic:arg must be a cubic eq"
string(cZeros(é,ý))→w
If inString(w,".")=0 and w≠"{}":Return expr(w)
ù[2]/(ù[1])→p
ù[3]/(ù[1])→q
ù[4]/(ù[1])→r
(3*q-p^2)/3→a
(2*p^3-9*p*q+27*r)/27→b
(√(3*(4*a^3+27*b^2))-9*b)^(1/3)*2^(2/3)/(2*3^(2/3))→w
If getType(w)="NUM" Then
If w=0 Then
If p=0 Then
⁻1→u
1→v
Else
0→u
0→v
EndIf
Else
ω-a/(3*ω)→u
ω+a/(3*ω)→v
EndIf
Else
ω-a/(3*ω)→u
ω+a/(3*ω)→v
EndIf
{α-p/3,⁻α/2+√(3)/2**β-p/3,⁻α/2-√(3)/2**β-p/3,α=u,β=v,ω=w}
©Copyright 1998,1999 Glenn E. Fisher
EndFunc
quartic():
quartic(pp,ý)
Func
©~quartic(p,v) Roots of 4th degree
© polynomial
© p - the polynomial
© v - variable
Local qq,ù,ú,r,d,e,y,j,k
If getType(ý)≠"VAR": Return "p\quartic:2nd arg must be a VAR"
p\coef(pp,ý)→ù
If dim(ù)≠5: Return "p\quartic:1st arg must be a 4th degree"
cZeros(pp,ý)→r
If inString(string(r),".")=0: Return r
ù/(ù[1])→ù
ý^3-ù[3]*ý^2+(ù[4]*ù[2]-4*ù[5])*ý+4*ù[3]*ù[5]-ù[4]^2-ù[2]^2*ù[5]→qq
p\cubic(qq,ý)→ú
p\evalrt(ú)→ú
0→k
For j,1,dim(ú)
If real(ú[j])=ú[j] Then
j→k
6 - 10