       Re: Why doesn't this work?

• To: mathgroup at smc.vnet.net
• Subject: [mg20378] Re: [mg20352] Why doesn't this work?
• From: "Andrzej Kozlowski" <andrzej at tuins.ac.jp>
• Date: Sun, 17 Oct 1999 02:45:49 -0400
• Sender: owner-wri-mathgroup at wolfram.com

```FindRoot has the HoldAll attribute. That means it does not evaluate its
arguments before checking if they have the expected form.  It  expects the
first argument to have  the form eqn== something or, if it does not, then it
interprets it as  expr==0. For example, FindRoot[x^3-1,{x,2}] is the same as
FindRoot[x^3-1==0,{x,2}].

There are two simple ways to get around this without using any temporary
variable. The first is to wrap Evaluate around the first argument:

In:=
Dog[t_] := (t/tau1)^6 * Exp[-6 * (t/tau1 - 1)] - (t/tau2)^6 * Exp[-6 *
(t/tau2 - 1)]

In:=
FindRoot[Evaluate[(Dog[t] == 0) /. {tau1 -> 13.7, tau2 -> 24.8}], {t, 20}]
Out=
{t -> 18.1648}

The second way is to omit ==

In:=
FindRoot[Dog[t] /. {tau1 -> 13.7, tau2 -> 24.8}, {t, 20}]
Out=
{t -> 18.1648}

-
Andrzej Kozlowski
Toyama International University
JAPAN
http://sigma.tuins.ac.jp
http://eri2.tuins.ac.jp

----------
>From: Joe Strout <joe at strout.net>
To: mathgroup at smc.vnet.net
>To: mathgroup at smc.vnet.net
>Subject: [mg20378] [mg20352] Why doesn't this work?
>Date: Sat, Oct 16, 1999, 13:47
>

> 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
>
> P.S. How do I copy a notebook in plain text format?  I tried "Copy As >
> Plain Text" (and many others in that submenu) but it always gives me
> text befuddled by lots of markup tags.  I had to paste the above line
> by line, and fix the "->" and "==" symbols which came through as
> foreign characters.
>
> --
> ,------------------------------------------------------------------.
> |    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
>

```

• Prev by Date: Re: what is Global`Class?
• Next by Date: Re: how to open all cells?
• Previous by thread: Re: Why doesn't this work?
• Next by thread: Re: Why doesn't this work?