Squares in Q[r], a question about algebraic numbers in mathematica
- To: mathgroup at smc.vnet.net
- Subject: [mg127630] Squares in Q[r], a question about algebraic numbers in mathematica
- From: Ralph Dratman <ralph.dratman at gmail.com>
- Date: Wed, 8 Aug 2012 21:36:20 -0400 (EDT)
- Delivered-to: l-mathgroup@mail-archive0.wolfram.com
- Delivered-to: l-mathgroup@wolfram.com
- Delivered-to: mathgroup-newout@smc.vnet.net
- Delivered-to: mathgroup-newsend@smc.vnet.net
- References: <20120808071845.CE1DA6859@smc.vnet.net>
Kent,
Not having enough knowledge of algebraic fields, I don't really
understand what you are doing, but in trying to follow it, I moved
your Mathematica function code back into the regular global code area.
Maybe the output from the code in this form will help you understand
what is going on.
I do not recommend you use "Quiet" while testing, as it hides error
messages which you will want to see. Also, I suggest removing the
semicolons ( ; ) from your lines when trying things out in global code, so
you can see the output of each line separately. (However, you must
always use the semicolons inside a module).
I suggest you start every notebook with the following two lines of code:
messageHandler = If[Last[#], Interrupt[]] & ;
Internal`AddHandler["Message", messageHandler];
The above will make Mathematica halt when any error message is issued.
Please paste the following code, one line at a time, into
a new notebook, such that you get a separate Mathematica
cell for each line. Alternatively, paste all the code into Mathematica
at once, then separate each line into its own cell, using cmd-D (Mac)
or ctrl-D (Windows).
When you test the code, run each line separately by
clicking in its cell and pressing Enter. That allows you to
see individual output below each input cell.
========================================
Code to be entered into Mathematica, one cell per line:
========================================
ClearAll[a7,a,p,r,pExpanded,f,q]
a7 = Root[x^4 + (5/8) x^2 + (5/8) x + (205/256), x, 1]
(* --- function arguments to sq (the same function as SqrtQr) --- *)
a = a7
p = (r^2 + 1)^2 /. r -> a
(* --- end of function arguments --- *)
pExpanded = Expand[p]
f = Check[ToNumberField[Sqrt[pExpanded], a], "non-square"]
q = AlgebraicNumberPolynomial[f, r]
Plus[q]^2
=======================================
End of code to be entered into Mathematica
=======================================
For your information, following is the same code, shown as each
input line followed by the output line I obtained for it. You
might need to check your output from each input line against
what is shown here, in case the email causes errors to appear.
=========================================================
(This should not be pasted into Mathematica, as it contains extraneous text.)
=========================================================
In[13]:= a7 = Root[x^4 + (5/8) x^2 + (5/8) x + (205/256), x, 1]
Out[13]= Root[205 + 160 #1 + 160 #1^2 + 256 #1^4 &, 1]
(* --- function arguments to sq (which is the same function as SqrtQr) --- *)
In[14]:= a = a7
Out[14]= Root[205 + 160 #1 + 160 #1^2 + 256 #1^4 &, 1]
p = (r^2 + 1)^2 /. r -> a
Out[11]= (1 + Root[205 + 160 #1 + 160 #1^2 + 256 #1^4 &, 1]^2)^2
(* --- end of function arguments --- *)
In[15]:= pExpanded = Expand[p]
Out[15]= 1 + 2 Root[205 + 160 #1 + 160 #1^2 + 256 #1^4 &, 1]^2 +
Root[205 + 160 #1 + 160 #1^2 + 256 #1^4 &, 1]^4
In[16]:= f = Check[ToNumberField[Sqrt[pExpanded], a], "non-square"]
Out[16]= AlgebraicNumber[
Root[205 + 40 #1 + 10 #1^2 + #1^4 &, 1], {1, 0, 1/16, 0}]
In[17]:= q = AlgebraicNumberPolynomial[f, r]
Out[17]= 1 + r^2/16
In[18]:= Plus[q]^2
Out[18]= (1 + r^2/16)^2
=========================================================
Good luck!
Ralph Dratman
On Wed, Aug 8, 2012 at 3:18 AM, Kent Holing <KHO at statoil.com> wrote:
> The code below confuses me:
> I thought that it should return for example (r^2+1)^2 when applied to (r^2+1)^2 whatever a is.
> The code is supposed to do the following:
> Given an element p (say polynomial) in Q[r] for a root r of a given polynomial in Q[x], the code should return p as q^2 for q the square root q of p as an element (polynomial) of Q[r] if q exists.
> But, it does not! When applied to (r2+1)^2 it returns in fact (r^2/16+1)^2, using r/4 instead of r?
>
> The code:
> SquareQrQ[a_,u_]:=Head@ToNumberField[Sqrt@u,a] === AlgebraicNumber//Quiet;
> SqrtQr[a_,p_]:=Module[{f,q},
> f=Check[ToNumberField[Sqrt[p//Expand],a],"non-square"]//Quiet;
> q=AlgebraicNumberPolynomial[f,r]//Quiet;
> Plus[q]^2];
> sq[a_,p_]:=SqrtQr[a,p];
>
> If
> a=Root[x^4+5/8x^2+5/8x+205/256,x,1];
> then
> sq[a,(r^2+1)^2/.r->a] returns (r^2/16+1)^2, not (r^2+1)^2.
>
> Any comments are highly appreciated.
> Kent Holing, Norway
- References:
- Squares in Q[r], a question about algebraic numbers in mathematica
- From: Kent Holing <KHO@statoil.com>
- Squares in Q[r], a question about algebraic numbers in mathematica