Suppose I have the following results:
a=FindInstance[2*b^2 + b^3 == b^4 + t && t < 10 && t > -1, {b, t},
Integers, 20]
{{b -> -1, t -> 0}, {b -> 0, t -> 0}, {b -> 1, t -> 2}, {b -> 2,
t -> 0}}
How can I get rid of the "b->" and just get the array of b answers? I can get halfway there with:
a[[All,1]]
{b -> -1, b -> 0, b -> 1, b -> 2}
but how can I get to just:
{-1, 0, 1, 2}
Thanks
-
The right answer, thanks to Will, is simply
b /. a
Following is my original, much more roundabout answer:
b /. # & /@ a
That's also robust to the order that the found instances are given in.
Explanation:
foo[... # ...]&
is shorthand forFunction[x, foo[... x ...]]
expr /. {a->b, c->d}
is shorthand forReplaceAll[expr, {a->b, c->d}]
func /@ list
is shorthand forMap[func, list]
So the following, for example, is a more verbose version of
b /. # & /@ a
Map[Function[x, b /. x], a]
Basically, it's going through the list that FindInstance returns and pulling the value of
b
in each element.If you knew that
b
would be first in the returned list, you could also do this:a[[All,1]][[All,2]]
dreeves : Please switch the accepted answer to Will's!dreeves : Since my answer is still the Accepted Answer months later, I figured I should edit it to actually be correct. (My original answer wasn't actually wrong but was highly inelegant.) -
I might be missing something from dreeves' answer, but the way I always believed you do this was simply by writing:
b /. a
There is an example of this in the "Basic Examples" section of the documentation for the
Solve
function, which uses the same output style.dreeves : Wow, that's embarrassing. I just assumed you had to explicitly map over the list of rules to get each value of `b`. But, you're right, just `b /. a` knows to give a list of the b's for each rule in the list. You win this round, Will Robertson!
0 comments:
Post a Comment