MathGroup Archive 1999

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Why doesn't this work?

  • To: mathgroup at smc.vnet.net
  • Subject: [mg20529] Re: [mg20352] Why doesn't this work?
  • From: "Peter Weijnitz" <peter.weijnitz at perimed.se>
  • Date: Sat, 30 Oct 1999 00:13:50 -0400
  • References: <7ubmdi$sk4@smc.vnet.net>
  • Sender: owner-wri-mathgroup at wolfram.com

But it does work!
I tried it as you your first example and it worked fine?
(I use Mathematica 3.01 on nt4 )  {t->18.1648}


David Withoff skrev i meddelandet <7ubmdi$sk4 at smc.vnet.net>...
>> 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?
>>
>> Thanks,
>> -- Joe
>>
>> ,------------------------------------------------------------------.
>> |    Joseph J. Strout           Biocomputing -- The Salk Institute |
>> |    joe at strout.net             http://www.strout.net              |
>> `------------------------------------------------------------------'
>> Check out the Mac Web Directory!    http://www.strout.net/macweb.cgi
>
>The first argument in FindRoot is expected to be an equation (an
>expression of the form lhs==rhs):
>
>In[1]:= ?FindRoot
>FindRoot[lhs==rhs, {x, x0}] searches for a numerical solution to the
equation
>   lhs==rhs, starting with x=x0.
>
>The expression
>
>    (Dog[t]==0) /. { tau1->13.7, tau2->24.8}
>
>is not an equation.  It contains an equation, and if it is evaluated
>in a particular way (before FindRoot assigns a numerical value to t)
>it will evaluate to an equation, but that's not quite good enough.
>
>In most cases the best solution is to follow the documentation and
>enter something that is actually an equation, as in your second example.
>
>Another possibility is to force the evaluation to be done in a way
>that leads to an equation, such as
>
>In[2]:= Dog[t_] := (t/tau1)^6 Exp[-6 (t/tau1 - 1)] -
>                    (t/tau2)^6 Exp[-6 (t/tau2 - 1)]
>
>In[3]:= FindRoot[Evaluate[(Dog[t]==0) /. { tau1->13.7, tau2->24.8}], {t,
20}]
>
>Out[3]= {t -> 18.1648}
>
>or
>
>In[4]:= With[{eq = (Dog[t]==0) /. { tau1->13.7, tau2->24.8}},
>                   FindRoot[eq, {t, 20}]]
>
>Out[4]= {t -> 18.1648}
>
>Dave Withoff
>Wolfram Research
>




  • Prev by Date: Solving TD/TI Schrod eq in 2/3 dimen
  • Next by Date: Re: Q about using Round.
  • Previous by thread: Re: Why doesn't this work?
  • Next by thread: OOP in Mathematica -- please help a newbie