Services & Resources / Wolfram Forums / MathGroup Archive
-----

MathGroup Archive 2010

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

Search the Archive

Re: Question about subscripts and polynomial

  • To: mathgroup at smc.vnet.net
  • Subject: [mg107455] Re: [mg107355] Question about subscripts and polynomial
  • From: DrMajorBob <btreat1 at austin.rr.com>
  • Date: Sat, 13 Feb 2010 05:22:14 -0500 (EST)
  • References: <201002100836.DAA21317@smc.vnet.net>
  • Reply-to: drmajorbob at yahoo.com

In the statement

listSum = SortBy[basicSum /. Plus -> List, order]

the first rule changes the sum to a List, each item of which is passed to  
the "order" function with the name "term". So, "term" is one of the things  
added together in basicSum.

The new "order" function,

Clear[order]
order[term_] :=
  Replace[term, x_?(FreeQ[#, Subscript] &) :> 1, {1}] /.
     Times -> Plus /. Power -> Times /. Subscript[_, k_] :> k

operates on one term, such as 2 Subscript[d, 1] Subscript[d, 2]  
Subscript[v, 1]

The level one parts of that are 2, Subscript[d, 1], Subscript[d, 2], and  
Subscript[v, 1].

The Replace statement in "order" looks for level one parts that do NOT  
have a subscript anywhere, in this case the coefficient 2, and replaces  
them with 1. The result is now Subscript[d, 1] Subscript[d, 2]  
Subscript[v, 1] (no coefficient).

Next the Times->Plus replacement changes Subscript[d, 1] Subscript[d, 2]  
Subscript[v, 1] to Subscript[d, 1] + Subscript[d, 2] + Subscript[v, 1].

Power->Times does nothing in this case, but it would change  
Power[Subscript[d, 2], 2] to 2 Subscript[d, 2], in a different term.

Next, subscripted variables become subscripts only, so Subscript[d, 1] +  
Subscript[d, 2] + Subscript[v, 1] changes to 1 + 2 + 1, or 4.

SortBy computes order applied to all the terms, like this:

order /@ (basicSum /. Plus -> List)

{3, 4, 5, 5, 6, 7, 4, 5, 6, 6, 7, 8, 5, 6, 7, 7, 8, 9}

and then sorts (basicSum /. Plus -> List) according to that, so that the  
new list is in the correct order:

listSum = SortBy[basicSum /. Plus -> List, order];
order /@ listSum

{3, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 9}

Bobby

On Fri, 12 Feb 2010 04:19:53 -0600, Luca Zanotti Fragonara  
<Luca.Zanottifragonara at polito.it> wrote:

> Thank you drmajorbob, you are getting me on my way.
>
> I have one question, the order[term_] script, I don't understand very  
> well what did you do in it. Because I want to understand very well what  
> you have done so that I'd be independent the next time.
> If I've understood correctely you have written a sort of rules, that  
> after you can use to sort the List of the terms.
> But how did you build this rule?
>
> With the command Subscript[_, k_] :> k you define k as the subscript of  
> each term, right?
> but what is term? If you can suggest me some section of the help to read  
> I'd be very thankful, but I don't get it the way that you have chosen to  
> solve the problem.
>
> And, the problem, as the moment, is that sometimes, the terms of the  
> polynomial are not in the order that I want, so that's why I want to  
> understand what you've done so that I could fix it!
>
> Thank you in advance,
>
> Luca
>
>
>
> DrMajorBob ha scritto:
>> I'm not entirely sure what ordering you want, but here's something to  
>> get you on the way.
>>
>> You can tweak the "order" function if needed.
>>
>> First, your original expansion:
>>
>> poly = d^2*v;
>> Subscript[q, 1] =
>>   poly /. {d -> Sum[Subscript[d, i], {i, 1, 3}]} /. {v ->
>>      Sum[Subscript[v, i], {i, 1, 3}]};
>> basicSum = Expand[Subscript[q, 1]]
>>
>> (ugly output omitted; it looks fine in Mathematica)
>>
>> Here's the same thing transformed to a List and sorted by the total  
>> order of each product:
>>
>> order[term_] :=
>>  term /. Times -> Plus /. Power -> Times /. Subscript[_, k_] :> k
>> listSum = SortBy[basicSum /. Plus -> List, order]
>>
>> (ugly output omitted; it looks fine in Mathematica)
>>
>> That's a List, not a sum; the following is also NOT a sum, but it looks  
>> like one, sorted the same as listSum:
>>
>> displaySum = Infix[listSum, "+"]
>>
>> (ugly output omitted; it looks fine in Mathematica)
>>
>> To get back the original:
>>
>> backToBasics = Plus @@ displaySum[[1]];
>> basicSum === backToBasics
>>
>> True
>>
>> Bobby
>>
>> On Wed, 10 Feb 2010 02:36:40 -0600, Luca Zanotti Fragonara  
>> <Luca.Zanottifragonara at polito.it> wrote:
>>
>>> Hello everybody,
>>>
>>> I would like to write a Polynomial, in this way:
>>>
>>> Poly = d^2*v
>>> Subscript[q, 1] =
>>>  Poly /. {d -> Sum[Subscript[d, i], {i, 1, 3}]} /. {v  
>>> ->Sum[Subscript[v,
>>> i], {i, 1, 3}]}
>>> Expand[Subscript[q, 1]]
>>>
>>> In this way I will obtain a polynomial in this form:
>>>
>>> d_1^2 v_1+2 d_1 d_2 v_1+d_2^2 v_1+2 d_1 d_3 v_1+2 d_2 d_3 v_1+d_3^2
>>> v_1+d_1^2 v_2+2 d_1 d_2 v_2+d_2^2 v_2+2 d_1 d_3 v_2+2 d_2 d_3 v_2+d_3^2
>>> v_2+d_1^2 v_3+2 d_1 d_2 v_3+d_2^2 v_3+2 d_1 d_3 v_3+2 d_2 d_3  
>>> v_3+d_3^2 v_3
>>>
>>> I would like to reorder the expanded polynomial in a way such that the
>>> terms with lower subcripts indexes will be at the beginning of the
>>> polynomial, and the terms with higher order of subscripts will be at  
>>> the
>>> end (a sort of order due to the subscript instead of the power terms).
>>> So the order should be something:
>>>
>>> Order 3: d_1^2 v_1
>>> Order 4: 2 d_1 d_2 v_1+d_1^2 v_2+...
>>> Order 5: d_2^2 v_1+2 d_1 d_3 v_1+...
>>> Order 6: 2 d_2 d_3 v_1+...
>>>
>>> I've tried to figure it out but I don't know which way to turn!!!
>>>
>>> Thank you in advance.
>>>
>>> Luca
>>>
>>>
>>>
>>
>>


-- 
DrMajorBob at yahoo.com


  • Prev by Date: Re: Re: Question about subscripts and
  • Next by Date: Re: Can Mathematica interpolate non-uniform scatter data?
  • Previous by thread: Re: Re: Question about subscripts and
  • Next by thread: errorbar