Re: square roots in Q[r]
- To: mathgroup at smc.vnet.net
- Subject: [mg107791] Re: [mg107764] square roots in Q[r]
- From: Daniel Lichtblau <danl at wolfram.com>
- Date: Fri, 26 Feb 2010 04:06:01 -0500 (EST)
- References: <201002252235.RAA16943@smc.vnet.net>
Kent Holing wrote:
> Assume that we have f(x) an irreducible polynomial of degree
> n with rational coefficients and f(r) = 0 for r real. Given an
> element u in Q[r], is it an easy way, using mathematica, to check
> if u is a square in Q[r]?
> Kent Holing
Here is a more constructive method than the first I had sent, in that it
provides teh square root(s). We have a defining polynomial f(z). We are
given another polynomial, p(z), which we want to rewrite, if possible,
as a square in Q/f(z). We set up a second one of the form w^2-p(z). We
then find a defining polynomial for w (can use Resultant or
GroebnerBasis). If it factors, we use the individual factors in a
Groebner basis to see if w now becomes a polynomial in z, modulo f(z).
Examples (two are from my other reply, the third is rigged to be a less
obvious square).
In[112]:= defpoly = 1 - 7*z + 11*z^2 - 2*z^3 + z^5;
In[113]:= poly1 = z^2 + 2*z + 1; wpoly1 =
GroebnerBasis[{defpoly, w^2 - poly1}, w, z][[1]]
f1 = Factor[wpoly1]
Out[113]= -400 + 620 w^2 - 329 w^4 + 74 w^6 - 9 w^8 + w^10
We now try each factor separately and see what we get for w.
Out[114]= (20 - 30 w + 7 w^2 + 8 w^3 - 5 w^4 + w^5) (-20 - 30 w -
7 w^2 + 8 w^3 + 5 w^4 + w^5)
In[119]:= wsol1 =
Solve[Last[GroebnerBasis[{defpoly, w^2 - poly1, f1[[1]]}, {w, z}]] ==
0, w]
wsol2 = Solve[
Last[GroebnerBasis[{defpoly, w^2 - poly1, f1[[2]]}, {w, z}]] == 0, w]
Out[119]= {{w -> 1 + z}}
Out[120]= {{w -> -1 - z}}
Now try with a different p(z).
In[99]:= poly2 = 3*z^4 + z^2 + 2*z + 1;
wpoly2 = GroebnerBasis[{defpoly, w^2 - poly2}, w, z][[1]]
f2 = Factor[wpoly2]
Out[100]= -643837 + 689384 w^2 - 163076 w^4 - 5071 w^6 - 117 w^8 + w^10
Out[101]= -643837 + 689384 w^2 - 163076 w^4 - 5071 w^6 -
117 w^8 + w^10
It did not factor, so is not a square in Q/(f(z)).
Last example is to recover +-(3*z^4 + z^2 + 2*z + 1).
In[121]:= poly3 =
PolynomialReduce[(3*z^4 + z^2 + 2*z + 1)^2, defpoly, z][[2]]
wpoly3 = GroebnerBasis[{defpoly, w^2 - poly3}, w, z][[1]]
f3 = Factor[wpoly3]
wsoln1 = Solve[
Last[GroebnerBasis[{defpoly, w^2 - poly3, f3[[1]]}, {w, z}]] == 0, w]
wsoln2 = Solve[
Last[GroebnerBasis[{defpoly, w^2 - poly3, f3[[2]]}, {w, z}]] == 0, w]
Out[121]= 88 - 629 z + 1131 z^2 - 443 z^3 + 118 z^4
Out[122]= -414526082569 + 265261574232 w^2 - 33736172162 w^4 -
11065975 w^6 - 23831 w^8 + w^10
Out[123]= (-643837 + 689384 w - 163076 w^2 - 5071 w^3 - 117 w^4 +
w^5) (643837 + 689384 w + 163076 w^2 - 5071 w^3 + 117 w^4 + w^5)
Out[124]= {{w -> 1 + 2 z + z^2 + 3 z^4}}
Out[125]= {{w -> -1 - 2 z - z^2 - 3 z^4}}
Daniel Lichtblau
Wolfram Research
- References:
- square roots in Q[r]
- From: Kent Holing <KHO@statoil.com>
- square roots in Q[r]