Re: NMinimize problem: fct minimized uses FindRoot
- To: mathgroup at smc.vnet.net
- Subject: [mg123702] Re: NMinimize problem: fct minimized uses FindRoot
- From: W Craig Carter <ccarter at mit.edu>
- Date: Fri, 16 Dec 2011 05:45:20 -0500 (EST)
- Delivered-to: l-mathgroup@mail-archive0.wolfram.com
- References: <201112101227.HAA19219@smc.vnet.net> <201112141100.GAA10112@smc.vnet.net>
Hello, I didn't understand the rationale for the "do not use Return" maxim, so I constructed a little experiment: (****** snip start *******) (*list of lists of random lengths*) temp = RandomInteger[{0, 100}, #] & /@ RandomInteger[{1, 100}, 100000]; (*artificial examples of using Throw or Return*) returnExample[x_] := Module[ {max, min}, If[Total[x] < 100, Return[0]]; {max, min} = {Max[x], Min[x]}; max^min ] throwExample[x_] := Module[ {max, min}, If[Total[x] < 100, Throw[0]]; {max, min} = {Max[x], Min[x]}; max^min ] (*timings*) Timing[returnExample /@ temp;] (*I get: {1.08535, Null}*) Timing[Catch[throwExample[#]] & /@ temp;] (*I get: {1.20134, Null}*) (*******snip end********) OK, this is artificial, but how do I understand why Return is eschewed when it appears to be faster and its construction is simpler? Thanks, Craig W Craig Carter Professor of Materials Science, MIT On Dec 14, 2011, at Wed, Dec 14, 11 ---6:00 AM, DrMajorBob wrote: > There's a large gap between "explained and justified" versus "worth the > trouble" or even "sensible". > > Do not use Return. It isn't worth the spit you'll need to polish it. > > Bobby > > On Tue, 13 Dec 2011 04:39:04 -0600, Andrzej Kozlowski <akoz at mimuw.edu.pl> > wrote: > >> >> On 12 Dec 2011, at 12:43, Oleksandr Rasputinov wrote: >> >>> For example, the erroneous usage: >>> >>> Block[{a = 1, b = 2}, Return[a]; Return[b]] >>> >>> gives: >>> >>> Return[1] >>> >>> but a correct usage: >>> >>> Do[Block[{a = 1, b = 2}, Return[a]; Return[b]], {1}] >>> >>> gives (because of the enclosing Do): >>> >>> 1 >> >> This is not quite the whole story. For example, while the above use of >> Return in Block does not work, this one (in a function call) does: >> >> f[] := Block[{a = 1, b = 2}, Return[a]; Return[b]] >> >> f[] >> >> 1 >> >> Moreover, if you replace the Do loop in your example with a While loop, >> you will get: >> >> n = 1; While[n < 10, Block[{a = 1, b = 2}, Return[a]; Return[b]]] >> >> Return[1] >> >> All of this is purposeful design and can be explained and justified but >> I don't think it's worth the bother since Mathematica has far superior >> means of flow control than this clumsy and arcane construct. >> >> Andrzej >> >> > > > -- > DrMajorBob at yahoo.com >
- References:
- NMinimize problem: fct minimized uses FindRoot
- From: "Doug Tinkham" <dtinkham@live.ca>
- Re: NMinimize problem: fct minimized uses FindRoot
- From: DrMajorBob <btreat1@austin.rr.com>
- NMinimize problem: fct minimized uses FindRoot