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.

My question is probably best illustrated with this small sample code:

Manipulate[
 Plot[{eqn1, eqn2, eqn1-eqn2}, {x,-5,5}],
 {{eqn1,r-x,"y1="}},{{eqn2,E^-x,"y2="}},
 {r,-2,2}
]

I would like to be able to have the user input two equations which including a variable r, and then use the slider to manipulate this variable. The issue is that Manipulate changes r within the input field, and then doesn't update the graphs.

Is there a way of allowing the user to input an equation which contains one of Manipulate's variables without having it change that variable within the input field?

share|improve this question
1  
I wonder, why did you gave the title "Prevent..." when you explicitly want to have interdependence? –  István Zachar Sep 27 '12 at 11:59
    
@IstvánZachar Well, I guess it depends what you see as being interdependent. I want the variable r to be interdependent, but not the controls themselves, so that change one control won't affect the input field itself. So essentially, the variable r is dependent on all controls, but the controls shouldn't be interdependent of each other. –  Josh Sep 27 '12 at 15:19
    
So you only want to retain eqn1 as r - x in the InputField instead of e.g. 1-x (if r is 1)? If I'm correct, than indeed my first example is the way to do it. –  István Zachar Sep 27 '12 at 17:01
    
Yep, that's correct, and indeed your first answer achieved exactly what I was hoping. The rest of the answer is an interesting exploration of the way Manipulate behaves, but isn't strictly answering my question. –  Josh Sep 27 '12 at 23:19
    
Then I will split my answer and move the irrelevant parts to a new thread. –  István Zachar Sep 28 '12 at 9:05

1 Answer 1

up vote 7 down vote accepted

The symbol r that is controlled by the slider is automatically localized so manually entering an expression containing (global) r does not work.

How about a simple replacement of r -> rr where rr is the Manipulate-d variable?

The undocumented option Evaluated -> True is used to retain individual line styles.(1)(2)

Manipulate[
 Plot[{eqn1, eqn2, eqn1 - eqn2} /. r -> rr, {x, -5, 5}, Evaluated -> True],
 {{eqn1, r - x, "y1="}},
 {{eqn2, E^-x, "y2="}},
 {{rr, -2, "r"}, -2, 2}]

Edited

Moved off-topic discussion on variable decoupling to this new post.

share|improve this answer
    
István, I edited your answer. I included an explanation of the need for the replacement rule as well as an option to preserve the unique line styling. I also found that the second form you showed did not work for me so I removed it; please add it back if you see fit. I hope this edit is not stepping on your toes; instead my intent is to enhance this answer rather than posting a competing one. –  Mr.Wizard Sep 27 '12 at 6:11
    
Thanks Mr.Wizard, no toestepping at all. I wanted to include some explanations but wasn't able to figure out, so I left it for a later rewriting. You were faster, as usually :) I'm still not sure I understand though: if r is local to the slider, how come it is updated in the InputField, and not in the body of the Manipulate? My second solution works consistently on my end (though I don't like it, would rather wrap the whole thing in DynamicModule)... are you using v6 or 7? What could cause this discrepancy of versions? –  István Zachar Sep 27 '12 at 6:28
    
@Mr.Wizard, Nasser: Please check update and provide some insight if you could. –  István Zachar Sep 27 '12 at 12:00
    
@Nasser: you are right in that this example is not useful for the OP, but the underlying problem is that the initial value definition in a Manipulate is not enough to trigger body updates. My example is a remedy for that. –  István Zachar Sep 27 '12 at 12:28
    
It is also possible to force the re-evaluation of x in the minimal example by making it dynamic. So Manipulate[{Dynamic[x], r}, {{x, r}}, {r, 0, 1}] will see both values being changed. In the context of the initial question however, this is not that useful since the input field is also modified. –  Josh Sep 27 '12 at 15:33

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.