Example of computations with trigonometric constants
Consider the problem:
Let
. Simplify
.
We can solve it by noting that involved numbers can be expressed in terms of roots of
, Namely,
first we express trigonometric functions in terms of complex exponentials. Since
is
a rational multiple of
we get root of
, in this case root of degree
. But we also
need
, which leads to root of degree
. Corresponding field is extention by cyclotomic
polynomial, so we build it:
fricas
(1) -> cyclotomic(36)$CyclotomicUtilities
Type: SparseUnivariatePolynomial
?(Integer)
fricas
)set output algebra on
fricas
)set output tex off
cF := SAE(FRAC(INT), SUP(FRAC(INT)), %)
(2)
SimpleAlgebraicExtension
Fraction(Integer)
,
SparseUnivariatePolynomial(Fraction(Integer))
,
12 6
? - ? + 1
Type: Type
fricas
)set output tex on
fricas
)set output algebra off
Now, we can express all ingredients in terms of generator:
fricas
et := (generator()$cF)^10
Type: SimpleAlgebraicExtension
?(Fraction(Integer),
SparseUnivariatePolynomial
?(Fraction(Integer)),
?^12+(-(?^6))+1)
fricas
ct := (et + 1/et)/2
Type: SimpleAlgebraicExtension
?(Fraction(Integer),
SparseUnivariatePolynomial
?(Fraction(Integer)),
?^12+(-(?^6))+1)
fricas
st := (et - 1/et)/(2*(generator()$cF)^9)
Type: SimpleAlgebraicExtension
?(Fraction(Integer),
SparseUnivariatePolynomial
?(Fraction(Integer)),
?^12+(-(?^6))+1)
and our expression is:
fricas
ex := (4*ct + 1)*st/ct
Type: SimpleAlgebraicExtension
?(Fraction(Integer),
SparseUnivariatePolynomial
?(Fraction(Integer)),
?^12+(-(?^6))+1)
Now we can find minimal polynomial and find its roots:
fricas
minimalPolynomial(%)
Type: SparseUnivariatePolynomial
?(Fraction(Integer))
and we see that the result is
.
We could also observe that the expression above is a member of smaller cyclotomic field and from
that infer expression
.
Consder now expression
Now we need root of
of degree
, so we build the field:
fricas
cyclotomic(28)$CyclotomicUtilities
Type: SparseUnivariatePolynomial
?(Integer)
fricas
)set output algebra on
fricas
)set output tex off
cF2 := SAE(FRAC(INT), SUP(FRAC(INT)), %)
(9)
SimpleAlgebraicExtension
Fraction(Integer)
,
SparseUnivariatePolynomial(Fraction(Integer))
,
12 10 8 6 4 2
? - ? + ? - ? + ? - ? + 1
Type: Type
fricas
)set output tex on
fricas
)set output algebra off
Root of degree
that is generator to power
gives us imaginary unit
, Suare of generator gives
us primitive root of degree
, that is
:
fricas
im2 := generator()$cF2^7
Type: SimpleAlgebraicExtension
?(Fraction(Integer),
SparseUnivariatePolynomial
?(Fraction(Integer)),
?^12+(-(?^10))+?^8+(-(?^6))+?^4+(-(?^2))+1)
fricas
e1 := generator()$cF2^2
Type: SimpleAlgebraicExtension
?(Fraction(Integer),
SparseUnivariatePolynomial
?(Fraction(Integer)),
?^12+(-(?^10))+?^8+(-(?^6))+?^4+(-(?^2))+1)
We express trigonometric functions in terms of this
fricas
c1 := (e1 + 1/e1)/2
Type: SimpleAlgebraicExtension
?(Fraction(Integer),
SparseUnivariatePolynomial
?(Fraction(Integer)),
?^12+(-(?^10))+?^8+(-(?^6))+?^4+(-(?^2))+1)
fricas
e2 := e1^2
Type: SimpleAlgebraicExtension
?(Fraction(Integer),
SparseUnivariatePolynomial
?(Fraction(Integer)),
?^12+(-(?^10))+?^8+(-(?^6))+?^4+(-(?^2))+1)
fricas
c2 := (e2 + 1/e2)/2
Type: SimpleAlgebraicExtension
?(Fraction(Integer),
SparseUnivariatePolynomial
?(Fraction(Integer)),
?^12+(-(?^10))+?^8+(-(?^6))+?^4+(-(?^2))+1)
fricas
s2 := (e2 - 1/e2)/(2*im2)
Type: SimpleAlgebraicExtension
?(Fraction(Integer),
SparseUnivariatePolynomial
?(Fraction(Integer)),
?^12+(-(?^10))+?^8+(-(?^6))+?^4+(-(?^2))+1)
fricas
e3 := e1^3
Type: SimpleAlgebraicExtension
?(Fraction(Integer),
SparseUnivariatePolynomial
?(Fraction(Integer)),
?^12+(-(?^10))+?^8+(-(?^6))+?^4+(-(?^2))+1)
fricas
c3 := (e3 + 1/e3)/2
Type: SimpleAlgebraicExtension
?(Fraction(Integer),
SparseUnivariatePolynomial
?(Fraction(Integer)),
?^12+(-(?^10))+?^8+(-(?^6))+?^4+(-(?^2))+1)
fricas
s3 := (e3 - 1/e3)/(2*im2)
Type: SimpleAlgebraicExtension
?(Fraction(Integer),
SparseUnivariatePolynomial
?(Fraction(Integer)),
?^12+(-(?^10))+?^8+(-(?^6))+?^4+(-(?^2))+1)
fricas
e4 := e1^4
Type: SimpleAlgebraicExtension
?(Fraction(Integer),
SparseUnivariatePolynomial
?(Fraction(Integer)),
?^12+(-(?^10))+?^8+(-(?^6))+?^4+(-(?^2))+1)
fricas
c4 := (e4 + 1/e4)/2
Type: SimpleAlgebraicExtension
?(Fraction(Integer),
SparseUnivariatePolynomial
?(Fraction(Integer)),
?^12+(-(?^10))+?^8+(-(?^6))+?^4+(-(?^2))+1)
fricas
s4 := (e4 - 1/e4)/(2*im2)
Type: SimpleAlgebraicExtension
?(Fraction(Integer),
SparseUnivariatePolynomial
?(Fraction(Integer)),
?^12+(-(?^10))+?^8+(-(?^6))+?^4+(-(?^2))+1)
fricas
e5 := e1^5
Type: SimpleAlgebraicExtension
?(Fraction(Integer),
SparseUnivariatePolynomial
?(Fraction(Integer)),
?^12+(-(?^10))+?^8+(-(?^6))+?^4+(-(?^2))+1)
fricas
c5 := (e5 + 1/e5)/2
Type: SimpleAlgebraicExtension
?(Fraction(Integer),
SparseUnivariatePolynomial
?(Fraction(Integer)),
?^12+(-(?^10))+?^8+(-(?^6))+?^4+(-(?^2))+1)
fricas
s5 := (e5 - 1/e5)/(2*im2)
Type: SimpleAlgebraicExtension
?(Fraction(Integer),
SparseUnivariatePolynomial
?(Fraction(Integer)),
?^12+(-(?^10))+?^8+(-(?^6))+?^4+(-(?^2))+1)
Using this we can compute the expression:
fricas
im2*(5*s5 - 5*s4 + 5*s3 - 5*s2) - 5*c5 + 5*c4 - 5*c3 + 5*c2 - 10*c1 + 6
Type: SimpleAlgebraicExtension
?(Fraction(Integer),
SparseUnivariatePolynomial
?(Fraction(Integer)),
?^12+(-(?^10))+?^8+(-(?^6))+?^4+(-(?^2))+1)