Re: extract from Reduce
- To: mathgroup at smc.vnet.net
- Subject: [mg130361] Re: extract from Reduce
- From: Peter Pein <petsie at dordos.net>
- Date: Thu, 4 Apr 2013 22:32:36 -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: <kjkc5k$7n0$1@smc.vnet.net>
Am 04.04.2013 19:10, schrieb hamiltoncycle at gmail.com:
> I have a result from the command Reduce that looks like this (as an example):
>
> a:= x==3||x==4||x==7
>
> I need to extract the numbers but I can't find a nice way to handle the case when there is only one equation, for instance:
>
> a:= x==6
>
> currently I check what the head of the expression is (Head[a]) and handle the case Head[a]=Or with a Map[] and the case Head[a]="Equal" with a[[2]]. Not very nice, but I guess that there is a neat way to do it.
>
> cheers, Robert
>
Hi Robert,
say you've got a quite simple result of Reduce:
In[1]:= InputForm[a = Reduce[Mod[x, 3] == Mod[1 + x^2, 5], x, Integers]]
Out[1]//InputForm=
Element[C[1], Integers] && (x == 3 + 15*C[1] || x == 10 + 15*C[1] ||
x == 11 + 15*C[1] || x == 12 + 15*C[1] || x == 14 + 15*C[1])
then
In[2]:= Cases[LogicalExpand[a] /. And | Or -> List,
HoldPattern[Equal[v___, x, w___]] :> Sequence[v, w],
Infinity] // InputForm
Out[2]//InputForm=
{3 + 15*C[1], 10 + 15*C[1], 11 + 15*C[1], 12 + 15*C[1], 14 + 15*C[1]}
in your even simpler case
a= x==3||x==4||x==7
Refine[x, #]& /@ List @@ a
would be sufficient to get
{3, 4, 7}
hth,
Peter