MathGroup Archive 2012

[Date Index] [Thread Index] [Author Index]

Search the Archive

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



  • Prev by Date: Re: Symmetrizing function arguments
  • Next by Date: Simplify Binomial
  • Previous by thread: Squares in Q[r], a question about algebraic numbers in mathematica
  • Next by thread: Squares in Q[r], a question about algebraic numbers in mathematica