MathGroup Archive 2011

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

Search the Archive

Re: Mathematica loop help

On 8/31/11 at 6:05 AM, anshumanbgg at (Anshu) wrote:

>I'm new to mathematica and I'm running into trouble with loops.

>I have some parameters, say {a,b,c} and some variables, say {x,y}. I
>want to solve two non linear equations in x and y using FindRoot for
>a range of parameter space, say {a,0,100} and {b,-20,20} and
>{c,55,95}, say, all integers and in increments of 1 and store the
>solutions in a matrix. varying one parameter at a time so I can keep
>track of things.

>My FindRoot is spitting out solutions when I run it one by one,
>punching in different parameter values but I would like to loop it,
>store the solutions and then print it out in a table.

>So I wanna do something like this:

>While {a,0,100,1}
>A[i,j]:= FindRoot[{ f(x,y)==0&& g(x,y)==0},{{x,40},{y,200}}] end

There are several issues with the code above which will prevent
it from working.

First, the syntax for While is wrong. But perhaps this was
intentionally not meant to be valid Mathematica syntax. Look up
While in the Document Center for correct syntax.

Next, you would not want to used DelayedSet (":=") for the
purpose you have described. Using DelayedSet will assign a
definition for A[i,j] but will not actually evaluate the
FindRoot part until you use A[i,j] elsewhere.

The syntax A[i,j] in Mathematica means a function named A with
arguments i and j. It is not truly an array even though it might
be convenient to think of A[i,j] as an element of an array at times.

The syntax that would do what you appear to want would be
something like

sol = Table[FindRoot[{ f[x,y]==0, g[x,y]==0},{{x,40},{y,200}}], {=

Notice, I've made several changes to your call to FindRoot

Replace f(x,y} with f[x,y] since I assume you intended f(x,y) to
be a function f with arguments x and y. In Mathematica
parathesis are used only for grouping. The syntax f(x) is
evaluated as the product of a variable f and a variable y.
f(x,y) isn't valid f{y,x} would evaluate as {f*x,f*y}. Note, the
difference between [], {} and (). These are not interchangeable
in Mathematica.

The FindRoot syntax for doing simultaneous equations has all of
the equations present as a list of equations and does not
require the And operator. See the documentation center for
FindRoot syntax.

I've intentionally omitted i,j from the Table call since these
are not ever assigned values in your code. That is if you just
corrected the syntax for While and replaced the () with square
brackets using f[x,y] etc for your arguments to FindRoot, the
loop would have created the same delayed assignment to A[i,j]
101 times.

I've also omitted the variable a since it does not appear to be
used by your FindRoot call.

  • Prev by Date: Re: TransformedDistribution
  • Next by Date: Problem with complex integration in Mathematica 7.0.1
  • Previous by thread: Re: TransformedDistribution
  • Next by thread: Re: Mathematica loop help