Re: Starting values with FindRoot

• To: mathgroup at smc.vnet.net
• Subject: [mg20664] Re: [mg20620] Starting values with FindRoot
• From: "David Park" <djmp at earthlink.net>
• Date: Sun, 7 Nov 1999 02:10:02 -0500
• Sender: owner-wri-mathgroup at wolfram.com

```Benoit,

The function you need is Sequence. Check it out in Help. Sequence @@ x0 replaces the
list of starting approximations by a sequence of arguments.

f[x0]
f[{{z[1], 1.5}, {z[2], 2.5}}]

f[Sequence @@ x0]
f[{z[1], 1.5}, {z[2], 2.5}]

Since FindRoot has the attributes HoldAll, we have to Evaluate it in the statement.

FindRoot[eq, Evaluate[Sequence @@ x0]]
Out[4]=
{z[1] -> 1.41421, z[2] -> 2.}

David Park

>
>I am fairly new to Mathematica. I have to solve numerically a large set
>of nonlinear equations. My question is: How can I set the starting
>values without having to explicitly name every variable? Here is an
>example of what I mean: Suppose I try to solve numerically the following
>two equations:
>eq = Table[z[i]\^2 == 2  i, {i, 2}]
>
>It would be nice if starting values could be set as a List. Example:
>
>x0 = Table[{z[i], i +  .5}, {i, 2}]
>
>and to solve the equations with the following statement:
>
>FindRoot[eq,x0]
>
>Unfortunetly, it does not work. Mathematica does not seem to accept
>starting values as lists. The problem appears to be the outer {}. In
>place of x0 above, Mathematica looks for something like
>{z[1],1.5},{z[2],2.5}, while x0={ {z[1],1.5},{z[2],2.5} }. There is an
>extra set of {}.
>
>I have found a solution by using a chain of  FullForm[], ToString[],
>StringDrop[] and ToExpression[]. Here is my solution:
>
>ToExpression[ToString[FindRoot] <> "[" <> ToString[FullForm[eq]] <> ","
><>
>    StringDrop[StringDrop[ToString[x0], 1], -1] <> "]"]
>
>Althought this works OK, it is nevertheless a very roundabout way of
>doing a simple thing. Anyone knows a more elegant way of doing this?
>
>
>
>
>Benoit Carmichael
>Professeur
>Departement d'economique
>Pavillon J.-A. de Seve
>Cite Universitaire
>Ste-Foy (Quebec)