Re: Selecting Element from List via Pattern Matching
- To: mathgroup at smc.vnet.net
- Subject: [mg89409] Re: [mg89396] Selecting Element from List via Pattern Matching
- From: Andrzej Kozlowski <akoz at mimuw.edu.pl>
- Date: Mon, 9 Jun 2008 02:25:52 -0400 (EDT)
- References: <200806080632.CAA02645@smc.vnet.net> <CC89ADB4-D93E-4280-8D6F-2133700137C6@mimuw.edu.pl> <DB78D68A-54D4-4457-ABEF-5A3CD4C8A7AC@mac.com>
Well, it seems to me very strange that one would voluntarily choose to
do so much unnecessary work, beginning with converting the original
expression into a list, but there is no accounting for tastes...
Even if you really love pattern matching there is no need to convert
the original expression to a list - you can simply do:
Cases[Expand[Sum[Subscript[a, i], {i, 1, 5}]^3],
_.*Subscript[a, 2]^2]
{3 Subscript[a, 1]
SubsuperscriptBox[ a , 2 , 2 ], 3
SubsuperscriptBox[ a , 2 , 2 ] Subscript[a, 3], 3
SubsuperscriptBox[ a , 2 , 2 ] Subscript[a, 4], 3
SubsuperscriptBox[ a , 2 , 2 ] Subscript[a, 5]}
More importantly, note that your method will not work if you change
your expression only slightly. Try
t = Apply[List,
Subscript[a, 1]^2 + Expand[(Sum[Subscript[a, i], {i, 1, 5}])^3]];
Your method gives:
Select[t, MemberQ[#1, Subscript[a, 1]^2] & ]
{3*Subscript[a, 1]^2*Subscript[a, 2],
3*Subscript[a, 1]^2*Subscript[a, 3],
3*Subscript[a, 1]^2*Subscript[a, 4],
3*Subscript[a, 1]^2*Subscript[a, 5]}
But the correct answer is:
Cases[t, (_.)*Subscript[a, 1]^2]
{Subscript[a, 1]^2, 3*Subscript[a, 1]^2*
Subscript[a, 2], 3*Subscript[a, 1]^2*
Subscript[a, 3], 3*Subscript[a, 1]^2*
Subscript[a, 4], 3*Subscript[a, 1]^2*
Subscript[a, 5]}
Andrzej
On 8 Jun 2008, at 20:32, Immanuel Bloch wrote:
> Hello Andrzej,
>
> Select[t, MemberQ[#, Power[Subscript[a, 1], 2]] &]
>
> seems to have solved my problem.
>
> Thanks!
>
> Immanuel
>
> On Jun 8, 2008, at 9:16 , Andrzej Kozlowski wrote:
>
>> On 8 Jun 2008, at 15:32, immanuel.bloch at googlemail.com wrote:
>>
>>> Hello,
>>>
>>> I am trying to extract from a Power Series all elements with a
>>> certain exponent, e.g.
>>> let us say I have generated a list via
>>>
>>> t = Apply[List, Expand[(Sum[Subscript[a, i], {i, 1, 5}])^3]]
>>>
>>> How can I then extract all terms with e.g. a_2^2 in it or any other
>>> exponent?
>>>
>>> I have tried something like
>>>
>>> Cases[t, Times[_, Power[Subscript[a,2],2]]]
>>>
>>> but this somehow only works with the exponent n=1 and no others...
>>>
>>> Does anybody know a solution to this pattern matching problem?
>>>
>>> Thanks!
>>> Immanuel
>>>
>>
>> But what's wrong with simply doing this:
>>
>> Expand[Coefficient[Sum[Subscript[a, i], {i, 1, 5}]^3, Subscript[a,
>> 2]^2]*
>> Subscript[a, 2]^2]
>>
>> 3*Subscript[a, 1]*Subscript[a, 2]^2 +
>> 3*Subscript[a, 3]*Subscript[a, 2]^2 +
>> 3*Subscript[a, 4]*Subscript[a, 2]^2 +
>> 3*Subscript[a, 5]*Subscript[a, 2]^2
>>
>> ???
>>
>>
>> Andrzej Kozlowski
>>
>
- References:
- Selecting Element from List via Pattern Matching
- From: immanuel.bloch@googlemail.com
- Selecting Element from List via Pattern Matching