Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.graphics.apps.gnuplot > #412
| 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> |
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 | Next — Previous in thread | Next in thread | Find similar
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