MathGroup Archive 2012

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

Search the Archive

Re: FindRoot with a vector of unknowns

  • To: mathgroup at smc.vnet.net
  • Subject: [mg125077] Re: FindRoot with a vector of unknowns
  • From: Szabolcs Horvát <szhorvat at gmail.com>
  • Date: Mon, 20 Feb 2012 02:53:00 -0500 (EST)
  • Delivered-to: l-mathgroup@mail-archive0.wolfram.com
  • References: <jhqmed$f70$1@smc.vnet.net>

On 2/19/2012 1:29 PM, Sam Takoy wrote:
> Hi,
>
> Is there an elegant way to implement what I am trying to do here, that
> is solve for a vector of unknowns:
>
> FindRoot[x - {1, 2, 3} == {0, 0, 0}, {x, {1, 1, 1}}]
>
> I can do this writing a loop, but hoping for a "vectorized" solution.
>

The documentation explicitly mentions that FindRoot supports vector 
variables.  So what's wrong here?  You'll immediately see the problem if 
you evaluate the equation alone:

In[6]:= x - {1, 2, 3} == {0, 0, 0}

Out[6]= {-1 + x, -2 + x, -3 + x} == {0, 0, 0}

Plus[] has attribute Listable which means that it will auto-thread over 
lists.

## What is the workaround?

One way is defining a function to use in FindRoot:

f[x : {__?NumericQ}] := x - {1, 2, 3}

FindRoot[f[x], {x, {1, 1, 1}}]

(* ==> {x -> {1., 2., 3.}} *)

The special pattern used in the definition of f[] is essential:  it 
prevents f[] from evaluating when symbols (not numbers) are passed to it.


## This is good when f[] is a big function, but are there easier 
workarounds for tiny functions this this one?

I am not aware of any, but I'd very much like to see some! (Looking 
forward to the answers)



-- 
Szabolcs Horvát
Visit Mathematica.SE:  http://mathematica.stackexchange.com/



  • Prev by Date: Re: saving a Notebook as pdf or xml
  • Next by Date: Re: Equation solving problem
  • Previous by thread: Re: FindRoot with a vector of unknowns
  • Next by thread: Re: FindRoot with a vector of unknowns