Re: Why doesn't this work?
- To: mathgroup at smc.vnet.net
- Subject: [mg20362] Re: [mg20352] Why doesn't this work?
- From: BobHanlon at aol.com
- Date: Sun, 17 Oct 1999 02:45:37 -0400
- Sender: owner-wri-mathgroup at wolfram.com
Joe, In the first case, you need to use Evaluate since FindRoot has the attribute HoldAll. Attributes[FindRoot] {HoldAll, Protected} Dog[t_] := (t/tau1)^6 * Exp[-6 * (t/tau1 - 1)] - (t/tau2)^6 * Exp[-6 * (t/tau2 - 1)] FindRoot[Evaluate[(Dog[t] == 0) /. { tau1 -> 13.7, tau2 -> 24.8}], {t, 20}] {t -> 18.1648} Bob Hanlon In a message dated 10/16/1999 5:26:04 AM, joe at strout.net writes: >I'm trying to understand why a temporary is needed in the following >case. I've got a function of one parameter and two constants. I >define the constants on the fly with "/.". I want to find a root of >this equation. When I use "/." in FindRoot, it doesn't work, but if I >create another function that has these as true constants (rather than >symbols), FindRoot works. I don't understand why these two cases are >different. > >Here's my function (a difference of gaussians): > >Dog[t_] := (t/tau1)^6 * Exp[-6 * (t/tau1 - 1)] - (t/tau2)^6 * Exp[-6 * >(t/tau2 - 1)] > >Here's my first attempt to find a root, and the result: > >FindRoot[(Dog[t]==0) /. { tau1->13.7, tau2->24.8}, {t, 20}] >FindRoot::frnum: Function {False} is not a length 1 list of numbers at >{t} = {20.}. > >Here, I define a temporary function, and a FindRoot which should come >out to the exact same thing as above -- but this one works: > >Dog2[t_] = Dog[t] /. { tau1->13.7, tau2->24.8} >FindRoot[Dog2[t]==0, {t,20}] >{t->18.1648} > >Why is this? I've looked at it every way I can think of, thrown in >extra parens for grouping, checked that Dog2[t]==0 is exactly the same >as (Dog[t]==0) /. { tau1->13.7, tau2->24.8}, etc., but I can't figure >it out. Any clues? >