Mathematica 9 is now available
Services & Resources / Wolfram Forums / MathGroup Archive
-----

MathGroup Archive 2011

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

Search the Archive

Re: iteration question

  • To: mathgroup at smc.vnet.net
  • Subject: [mg122620] Re: iteration question
  • From: Szabolcs Horvát <szhorvat at gmail.com>
  • Date: Thu, 3 Nov 2011 03:48:04 -0500 (EST)
  • Delivered-to: l-mathgroup@mail-archive0.wolfram.com
  • References: <j8r9b8$3ie$1@smc.vnet.net>

On 2011.11.02. 12:25, Francisco Gutierrez wrote:
> Dear Group:
>
> I have a function, and I iterate it using fixedpoint. Something of this sort:
>
> FixedPointList[
>   function[arg1,arg2,arg3, #]&, arg4,
>   SameTest ->  (Max[Abs[Flatten[#1] - Flatten[#2]]]<  0.01&)]
>
>
> I would like to know how many steps it takes this function to converge. I have tried with EvaluationMonitor to no avail:
>
> Block[{veamos, c = 0},
>    veamos = FixedPoint[
>      function[arg1,arg2,arg3, #]&, arg4,
>      SameTest ->  (Max[Abs[Flatten[#1] - Flatten[#2]]]<  0.01&)];
>    EvaluationMonitor :>  c++; {veamos, c}]
>
>
> The iterator c simply does not move, and the previous function works ok but returns the value of c as 0.
>
> I tried if this was true with Length[FixedPointList[...]] and the answer was 20 (which should be the value of c in the immediately previous function). In principle, this would solve my problem, but it seems
> rather inefficient, especially when the convergence criterion is severe (not 0.01, but say 10^-4).
>
> Is there an efficient and nice way to solve this?
>

Neither FixedPoint, not Block take the option EvaluationMonitor.  Also, 
the option was included incorrectly in Block.  Options must be separated 
by a colon, not semicolon.

I seriously doubt that FixedPointList would be measurably slower than 
FixedPoint (have you measured it?), but if you really want to avoid 
FixedPointList, you can use

Module[{result, c = 0},
   result = FixedPoint[(c++; f[#])&, value];
   {result, c}
]

I'd recommend {Last[#], Length[#]}& @ FixedPointList[ ... ] though.

I hope this helps.

References:

http://reference.wolfram.com/mathematica/ref/CompoundExpression.html
http://reference.wolfram.com/mathematica/ref/Block.html

--
Szabolcs Horvát
Mathematica on SO: http://stackoverflow.com/questions/tagged/mathematica



  • Prev by Date: Re: Bernoulli Numbers
  • Next by Date: Re: Bernoulli Numbers
  • Previous by thread: Re: iteration question
  • Next by thread: Re: iteration question