Services & Resources / Wolfram Forums
-----
 /
MathGroup Archive
2007
*January
*February
*March
*April
*May
*June
*July
*August
*September
*October
*Archive Index
*Ask about this page
*Print this page
*Give us feedback
*Sign up for the Wolfram Insider

MathGroup Archive 2007

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

Search the Archive

Re: Is there a way to rewrite Roots[#n] result in easier to read form?

  • To: mathgroup at smc.vnet.net
  • Subject: [mg80351] Re: [mg80315] Is there a way to rewrite Roots[#n] result in easier to read form?
  • From: DrMajorBob <drmajorbob at bigfoot.com>
  • Date: Sat, 18 Aug 2007 05:38:27 -0400 (EDT)
  • References: <17134341.1187333659867.JavaMail.root@m35>
  • Reply-to: drmajorbob at bigfoot.com

ToRadicals will (sometimes) eliminate Root objects, but that will  
generally make things MORE complicated, not less. There are some things 
you can do instead, however.

First I suggest avoiding subscripts (for ease in posting Q&A, if nothing 
else):

Clear[x, y]
ode11 = y'[x] ==
   1/Sqrt[a[4]*x^4 + a[3]*x^3 + a[2]*x^2 + a[1]*x + a[0]]
y[x_] = y[x] /. First@DSolve[ode11, y[x], x];

There are 36 instances of Root in the result, but only four are distinct:

Cases[y[x], _Root, \[Infinity]];
% // Length
roots = %% // Union

36

{Root[a[0] + a[1] #1 + a[2] #1^2 + a[3] #1^3 + a[4] #1^4 &, 1],
  Root[a[0] + a[1] #1 + a[2] #1^2 + a[3] #1^3 + a[4] #1^4 &, 2],
  Root[a[0] + a[1] #1 + a[2] #1^2 + a[3] #1^3 + a[4] #1^4 &, 3],
  Root[a[0] + a[1] #1 + a[2] #1^2 + a[3] #1^3 + a[4] #1^4 &, 4]}

Hence we can simplify display of y[x] this way:

displayable = y[x] /. Root[_, k_] :> r[k]

C[1] - (2 EllipticF[
      ArcSin[Sqrt[((x - r[1]) (r[2] - r[4]))/((x - r[2]) (r[1] -
          r[4]))]], ((r[2] - r[3]) (r[1] - r[4]))/((r[1] -
         r[3]) (r[2] - r[4]))] (x -
       r[2])^2 Sqrt[((-r[1] + r[2]) (x - r[3]))/((x - r[2]) (-r[1] +
        r[3]))] (r[1] -
       r[4]) Sqrt[((x - r[1]) (r[1] - r[2]) (x - r[4]) (r[2] -
        r[4]))/((x - r[2])^2 (r[1] - r[4])^2)])/(Sqrt[
     a[0] + x (a[1] + x (a[2] + x (a[3] + x a[4])))] (-r[1] +
       r[2]) (r[2] - r[4]))

If, at any time, you still want to display subscripts, it's simple enough  
to do so:

displayable /. {a[k_] :> Subscript[a, k], r[k_] :> Subscript[r, k],
   C[k_] :> Subscript[c, k]}

Subscript[c, 1] - (2 EllipticF[
      ArcSin[Sqrt[((x - Subscript[r, 1]) (Subscript[r, 2] - Subscript[
          r, 4]))/((x - Subscript[r, 2]) (Subscript[r, 1] - Subscript[
          r, 4]))]], ((Subscript[r, 2] - Subscript[r, 3]) (Subscript[r,
          1] - Subscript[r, 4]))/((Subscript[r, 1] - Subscript[r,
         3]) (Subscript[r, 2] - Subscript[r, 4]))] (x - Subscript[r,
       2])^2 Sqrt[((-Subscript[r, 1] + Subscript[r, 2]) (x - Subscript[
        r, 3]))/((x - Subscript[r, 2]) (-Subscript[r, 1] + Subscript[r,
         3]))] (Subscript[r, 1] - Subscript[r,
       4]) Sqrt[((x - Subscript[r, 1]) (Subscript[r, 1] - Subscript[r,
        2]) (x - Subscript[r, 4]) (Subscript[r, 2] - Subscript[r,
        4]))/((x - Subscript[r, 2])^2 (Subscript[r, 1] - Subscript[r,
        4])^2)])/(Sqrt[
     Subscript[a, 0] +
      x (Subscript[a, 1] +
         x (Subscript[a, 2] +
            x (Subscript[a, 3] + x Subscript[a, 4])))] (-Subscript[r,
        1] + Subscript[r, 2]) (Subscript[r, 2] - Subscript[r, 4]))

y[x] is still intact, but you can also retrieve the long-form result as

displayable /. Thread[r /@ Range[4] -> roots];
y[x] == %

True

I hope that helps.

Bobby

On Fri, 17 Aug 2007 00:52:15 -0500, Nasser Abbasi <nma at 12000.org> wrote:

> Hello;
> This is Mathematica 6.01
>
> Is there a way to make the output of the following DSolve more readable?  
> It
> contains lots of Root[] with #n in it.
>
>
> Remove["Global`*"]
> ode11 = Derivative[1][y][x] -
>      1/Sqrt[Subscript[a, 4]*x^4 + Subscript[a, 3]*x^3 +
>         Subscript[a, 2]*x^2 + Subscript[a, 1]*x + Subscript[a, 0]] ==
>     0;
> DSolve[ode11, y[x], x]
>
> here is a pic of the output:
>
> http://12000.org/tmp/081507/output.PNG
>
> I understand what #'s are for, but was wondering if the output can be
> written using more 'traditional' form so it will easier to read? i.e  
> having
> the polynomial whose Roots are being called for, to be explicitly written
> out or something along those lines?...I tried Simplify[].
>
> thanks,
> Nasser
>
>
>



-- 
DrMajorBob at bigfoot.com


  • Prev by Date: Re: 3DPlot in Mathematica 6
  • Next by Date: Re: What determines what is assigned to Out[]?
  • Previous by thread: Re: Is there a way to rewrite Roots[#n] result in easier to read form?
  • Next by thread: generalized 2d IFS for D_n Cartan group using MathWorld DihedralGroupMatrices