Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.graphics.apps.gnuplot > #412

Re: Function defined by a while loop

From Mauro <pippo@hotmail.com>
Newsgroups comp.graphics.apps.gnuplot
Subject Re: Function defined by a while loop
Date 2011-06-28 11:48 +0200
Organization C.U. srl News Server
Message-ID <iuc7v1$i7p$1@tdi.cu.mi.it> (permalink)
References <b935110d-6f8d-4b0d-919c-3151effdf59f@28g2000yqu.googlegroups.com> <iuaalu$14e$1@dont-email.me>

Show all headers | View raw


Il 27/06/2011 18:21, James Waldby ha scritto:
> On Mon, 27 Jun 2011 02:50:05 -0700, Antonio Lo Turco wrote:
>> I would like to take advantage of the new construct while (<expr>)
>> {<commands>} in gnuplot to define a function something like that
>> f(x,<parameters>,x0 (initial guess of x), eps (maximum error), niter
>> (maximum no of iterations) =
>> x=x0;i=1; while (abs(x-x0)>eps&&  i<niter) {x=some function of x and
>> parameters;i=i+1}
>>
>> Obviously I tried and it doesn't work!
>>
>> The only way I managed to obtained some sensible result is to use the
>> instruction "call dummy.plt<parameters>  x0 eps niter" where "dummy.plt"
>> script contains the while loop.
>>
>> However I would like (and I'm not able) to implement such solution as a
>> user defined function.
> ...
>
> Because you set x=x0 at start of f(), if eps is positive the condition
> abs(x-x0)>eps is always false and the while loop won't do anything.

Oh, I actually introduced a conceptual mistake that would give a wrong 
result, but it wasn't the matter, because gnuplot merely refuses to give 
any result...

>
> I have gnuplot 4.4.0 installed, which apparently doesn't have 'while'
> but a workaround like the following is possible.  In following,
> f(x,x0,eps,iter) is analogous to your f(...), and g(x,y) stands for
> your "some function of x and parameters".  (I left out x=x0 statement.)
>
> gnuplot>  g(x,y)=(x+y)/2.0;
> gnuplot>  f(x,x0,eps,iter) = abs(x-x0)>eps ? (iter? f(g(x,x0),x0,eps,iter-1) : x) : x;
> gnuplot>  print f(15,0,.5,9),f(16,0,.5,9),f(17,0,.5,9)
> 0.46875 0.5 0.265625
> gnuplot>  print f(15,0,.5,3),f(16,0,.5,3),f(17,0,.5,3)
> 1.875 2.0 2.125
>

A further demonstration that a good use of human brain generally 
overcomes the need of new software functions!!!

Thank you indeed

Mauro

Back to comp.graphics.apps.gnuplot | Previous | NextPrevious in thread | Next in thread | Find similar


Thread

Function defined by a while loop Antonio Lo Turco <antonio.lo.turco@gmail.com> - 2011-06-27 02:50 -0700
  Re: Function defined by a while loop James Waldby <not@valid.invalid> - 2011-06-27 16:21 +0000
    Re: Function defined by a while loop Mauro <pippo@hotmail.com> - 2011-06-28 11:48 +0200
  Re: Function defined by a while loop Hans-Bernhard Bröker <HBBroeker@t-online.de> - 2011-06-27 22:00 +0200
    Re: Function defined by a while loop Mauro <pippo@hotmail.com> - 2011-06-28 11:56 +0200

csiph-web