Take the 2-minute tour ×
Mathematica Stack Exchange is a question and answer site for users of Mathematica. It's 100% free, no registration required.

On applying a multiplication and subtraction on a list, like so:

x = 2y - 4;

Where y is a list containing fractions of complex numbers generated from dynamic input, instead of getting a new list with that operation applied to each element of the list, instead the output is simplified, in the form:

-4 + 2{element1, element2, element3, etc}

This means I can't then apply normal list functions to x. How can I convert this style of input into just one list:

{-4 + element1, -4 + element2, -4 + element3}

When I make y non-dynamic, it formats it correctly, so that seems to be part of the issue.

My exact code is this:

mirror[v_] := v^2
a = 3;
b = 4;
{Slider2D[Dynamic[{a, b}], {{-10, 0}, {10, 100}, 1}], Dynamic[{a, b}]}

y = Dynamic[Replace[t, Solve[-1/D[mirror[t], t] == (mirror[t] - b)/(t - a), t]]];
x = 2 y - a
share|improve this question
    
You do have a space (for multiplication) between 2 and y, right ? –  b.gatessucks May 4 '13 at 12:04
    
It doesn't make any difference either way. –  Varkor May 4 '13 at 12:08
    
Try making the multiplication explicit: x=2*y-4 –  bill s May 4 '13 at 12:20
    
@Varkor Maybe the issue is with the usage of Dynamic; could you post a more detailed example of your actual code ? –  b.gatessucks May 4 '13 at 12:43
    
I think Dynamic is the issue. I've edited my post with the code I've used. –  Varkor May 4 '13 at 12:57

1 Answer 1

up vote 1 down vote accepted

The head of y in your setup is Dynamic not List. That is why Plus and Times will not operate as you expected -- y is not a List. Perhaps this will have the behavior you seek:

mirror[v_] := v^2
a = 3;
b = 4;
{Slider2D[Dynamic[{a, b}], {{-10, 0}, {10, 100}, 1}], Dynamic[{a, b}]}

y := Replace[t, Solve[-1/D[mirror[t], t] == (mirror[t] - b)/(t - a), t]];
Dynamic[x = 2 y - a]

The general rule of thumb is to put Dynamic around what is to be displayed, not around component variables or expressions. (It is more complicated than this, of course, but most times, var = Dynamic[..] will not be the thing to do.)

Note also the use of SetDelayed (:=) in the assignment for y. This makes y represent a formula that is evaluated only when Dynamic[x = 2 y - a] is updated.

share|improve this answer
    
Thank you! I was using Dynamic when I should have been using SetDelayed – it makes much more sense now! –  Varkor May 5 '13 at 11:08

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.