Re: from Rumen, MEXICO, petition
- To: mathgroup at smc.vnet.net
- Subject: [mg118130] Re: from Rumen, MEXICO, petition
- From: "Stephen Luttrell" <steve at _removemefirst_stephenluttrell.com>
- Date: Wed, 13 Apr 2011 05:54:56 -0400 (EDT)
- References: <io17i2$i7g$1@smc.vnet.net>
For this problem you can use the Method option to get an error-free result: f[z_?NumericQ] := 11 Exp[-(z/135)] + 10.5` Exp[-(z/425)] + 4.899` Exp[-(z/1754)] + 2.02912`; FindMinimum[Abs[f[x + I y]], {{x, -58.01}, {y, 478.8}}, Method -> "PrincipalAxis"] which gives -- Stephen Luttrell West Malvern, UK "DrMajorBob" <btreat1 at austin.rr.com> wrote in message news:io17i2$i7g$1 at smc.vnet.net... > As frequently (almost always) happens with FindMinimum, I'm unable to find > a combination of WorkingPrecision, PrecisionGoal, and AccuracyGoal that > doesn't yield an error "beep": > > Clear[f] > f[z_?NumericQ] := > 11 Exp[-(z/135)] + 10.5` Exp[-(z/425)] + 4.899` Exp[-(z/1754)] + > 2.02912`; > FindMinimum[Abs[f[x + I y]], {{x, -58.01}, {y, 478.8}}] > > {2.04123*10^-7, {x -> -55.0724, y -> 546.446}} > > Why is that? > > If I specify 100 digits of precision, I get an error term about 3.7 x > 10^-10 -- that's pretty good! -- AND AN ERROR BEEP: > > FindMinimum[Abs[f[x + I y]], {{x, -58.01}, {y, 478.8}}, > WorkingPrecision -> 100] > > {3.7417291260789341618520296735945444149828986724060086999088525772094\ > 72656250000000000000000000000000*10^-10, {x -> \ > -55.072371653747465948819809486578026882606265653690941720656235026717\ > 07064618557852507862459624203599, > y -> 546.44562649186209162707047010589625017824622590382086270949585\ > 77673240377626127957248849440925278654}} > > That result (for x and y) agrees with the previous one to 4 decimals, so > surely if I only request 4-digits of precision, FindMinimum can satisfy > itself, yes? > > But no: > > FindMinimum[Abs[f[x + I y]], {{x, -58.01}, {y, 478.8}}, > WorkingPrecision -> 100, PrecisionGoal -> 4] > > {0.0004481017216523239016408297619165068681468255817890167236328125000\ > 000000000000000000000000000000000000, {x -> \ > -55.076570390485819928017008351162075996398925781250000000000000000000\ > 00000000000000000000000000000000, > y -> 546.44783762081999611837090924382209777832031250000000000000000\ > 00000000000000000000000000000000000000}} > > Still an error beep. > > Is the accuracy goal too high? Let's ask for only TWO digits: > > FindMinimum[Abs[f[x + I y]], {{x, -58.01}, {y, 478.8}}, > WorkingPrecision -> 100, PrecisionGoal -> 2, AccuracyGoal -> 2] > > {0.0291102550424682353369387755037678289227187633514404296875000000000\ > 0000000000000000000000000000000000, {x -> \ > -55.377760257873731575273268390446901321411132812500000000000000000000\ > 00000000000000000000000000000000, > y -> 546.40671819512863294221460819244384765625000000000000000000000\ > 00000000000000000000000000000000000000}} > > Still an error beep. > > What am I not getting? > > Bobby > > On Mon, 11 Apr 2011 06:05:18 -0500, Stephen Luttrell > <steve at _removemefirst_stephenluttrell.com> wrote: > >> The roots are complex-valued. Here is a way of finding them: >> >> Define the function whose roots you want. >> >> f[z_] := 11 Exp[-(z/135)] + 10.5` Exp[-(z/425)] + 4.899` Exp[-(z/1754)] + >> 2.02912`; >> >> Contour plot the absolute value over a large enough region to get a feel >> for >> what the function looks like. >> >> ContourPlot[Abs[f[x + I y]], {x, -200, 300}, {y, -3000, 3000}, Contours >> -> >> 50] >> >> The zeros all lie at around Re(z) = -50, and they repeat periodically in >> Im(z) as you would expect from the exponential dependence of f(z) on z. >> >> Use your mouse to grab the approximate position of one of the zeros (I >> got >> {-58.01, 478.8}), and find the minimum. >> >> FindMinimum[Abs[f[x + I y]], {{x, -58.01}, {y, 478.8}}] >> >> which gives >> >> {2.04123*10^-7,{x->-55.0724,y->546.446}} >> > > > -- > DrMajorBob at yahoo.com >