[Date Index]
[Thread Index]
[Author Index]
Re: How to Enable Automatic Recalculation
*To*: mathgroup at smc.vnet.net
*Subject*: [mg109899] Re: How to Enable Automatic Recalculation
*From*: Victor Roberts <xxx at lighting-research.com>
*Date*: Sat, 22 May 2010 00:40:28 -0400 (EDT)
*References*: <ht5oau$179$1@smc.vnet.net>
Murray,
You are correct. The example I gave is somewhat simpler
than the problem I am working on.
The problem is a definite integral of a piecewise function,
where that piecewise function depends upon the value of one
variable.
Based on prior experience with a different math program, I
had expected that after the integral was calculated, I could
go back and change the value of the variable and have the
value of the integral change automatically.
As I have said elsewhere, this was all based on a
misunderstanding of the design of the Mathematica interface,
and I now see that I can just change the value of the
variable, and then reevaluate the integral.
Thanks for your help.
--
Vic Roberts
Replace xxx with vdr in e-mail address.
On Fri, 21 May 2010 10:46:54 +0000 (UTC), Murray Eisenberg
<murray at math.umass.edu> wrote:
>Method 1's final result as I showed it is indeed dead wrong, due to an
>unfortunate copy-and-paste; thanks for catching that.
>
>But I see nothing "wrong" in method 2. I just checked the results
>against evaluation of the input lines shown (one per input cell) in a
>fresh Mathematica 7.0.1 notebook. But I don't deny there are potential
>pitfalls.
>
>I suspected that the O.P. was interested in something more complicated
>than the simple arithmetic example he used in his query.
>So I wanted to suggest the possibility that the sort of thing he was
>looking for could be treated by Dynamic, and not just SetDelayed.
>
>On 5/20/2010 6:39 AM, dh wrote:
>> Hi,
>> there seems to be two pitfalls in method 2 and 3.
>> Dynamic is thought to update screen outputs, not to recalculate
>> variables. If nothing is printed, Dynamic is not even evaluated.
>> Let's look at method2:
>> (* method 2: use Dynamic *)
>> Clear[a,b]
>> Dynamic[a]
>> a
>> a = 3; (* preceding output changes to 3 *)
>> b = 3 + a
>> 6
>> a = Pi;
>> b
>> 3 + Pi
>> The last answer is WRONG. b is definitly set to 6 and is NEVER
>> recalculated when a is changed. This is so because we use a un-delayed
>> assign.
>>
>> Method 3 is even more dangerous:
>> (* method 3: another way to use Dynamic *)
>> Clear[a,b]
>> a = 3;
>> Dynamic[b = 3 + a]
>> 6
>> a = Pi; (* preceding ouptput changes to 3 + Pi *)
>> b
>> 3 + Pi
>>
>> The last answer is again wrong in a devious way. The correct value is 6.
>> However, if you reevaluate b again, it is suddenly 3+Pi. The reason is,
>> that the Dynamic statement is evaluated AFTER b has been printed.
>> Therefore, b obtains its new value too late.
>>
>> What can we learn from this is that Dynamic should be used for display
>> jobs and not anything else. The right thing to do here is to use an
>> delayed assign as in method 1.
>> cheers, Daniel
>>
>> Am 20.05.2010 02:15, schrieb Murray Eisenberg:
>>> There IS a "simple" answer. Actually, two answers. it used to be that
>>> the only way to do this was to use SetDelayed ( := ) for the symbol you
>>> wanted to be recalculated whenever you changed another variable whose
>>> values was specified by Set ( = ). Since Mathematica 6, you also have
>>> the more sophisticated method of using Dynamic quantities.
>>>
>>> (* method 1: use SetDelayed instead of Set for b *)
>>> a = 5;
>>> b := 3 + a
>>> b
>>> 8
>>> a = Pi;
>>> b
>>> 3 + Pi
>>>
>>>
>>> (* method 2: use Dynamic *)
>>> Clear[a,b]
>>> Dynamic[a]
>>> a
>>> a = 3; (* preceding output changes to 3 *)
>>> b = 3 + a
>>> 6
>>> a = Pi;
>>> b
>>> 3 + Pi
>>>
>>> (* method 3: another way to use Dynamic *)
>>> Clear[a,b]
>>> a = 3;
>>> Dynamic[b = 3 + a]
>>> 6
>>> a = Pi; (* preceding ouptput changes to 3 + Pi *)
>>> b
>>> 3 + Pi
>>>
>>>
>>>
>>> On 5/19/2010 7:01 AM, Victor Roberts wrote:
>>>> I'm new to Mathematica, so perhaps there is a simple answer
>>>> to this question.
>>>>
>>>> How to I set Mathematica so that when I change the value
>>>> assigned to a variable it will automatically change all
>>>> later calculations that use that variable.
>>>>
>>>> For example, if I set
>>>>
>>>> a = 5
>>>>
>>>> and
>>>>
>>>> b = 3 + a
>>>>
>>>> I would like the value of b updated each time I change the
>>>> value of a.
>>>>
>>>> Right how, I need to recalculate each and every expression
>>>> that uses the variable a if I change its value. There must
>>>> be a better way.
>>>>
>>>>
>>>> --
>>>> Vic Roberts
>>>> Replace xxx with vdr in e-mail address.
>>>>
>>>
>>
>>
Prev by Date:
**Re: Numerical solution of differential equation**
Next by Date:
**Re: data in absolutetime**
Previous by thread:
**Re: How to Enable Automatic Recalculation**
Next by thread:
**Re: How to Enable Automatic Recalculation**
| |