Services & Resources / Wolfram Forums
-----
 /
MathGroup Archive
2004
*January
*February
*March
*April
*May
*June
*July
*August
*September
*October
*November
*December
*Archive Index
*Ask about this page
*Print this page
*Give us feedback
*Sign up for the Wolfram Insider

MathGroup Archive 2004

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

Search the Archive

Re: argMax

  • To: mathgroup at smc.vnet.net
  • Subject: [mg51290] Re: argMax
  • From: "Peltio" <peltio at twilight.zone>
  • Date: Tue, 12 Oct 2004 01:57:58 -0400 (EDT)
  • References: <ckaj3i$m3r$1@smc.vnet.net> <ckd63b$52f$1@smc.vnet.net>
  • Reply-to: "Peltio" <peltioNOSP at Mdespammed.com.invalid>
  • Sender: owner-wri-mathgroup at wolfram.com

"Peltio" wrote

>I've written this without any testing, so I can't tell whether it's faster
>or not than your solution (if it happens to be so, it won't be much faster,
>though).

>    ArgMax[f_, arglist_List] :=
>      Module[
>        {spectrum},
>        spectrum = f /@ arglist;
>        Flatten[Take[arglist, #] & /@ Position[spectrum, Max[spectrum]]]
>    ]

It is indeed a little bit faster, and this version is just a bit more so
(please note the numericization of the list, remove N[ ] if that is a
problem):

    ArgMax[f_, arglist_List] :=
      With[
        {spectrum = N[f /@ arglist]},
        Apply[arglist[[#]] & , Position[spectrum, Max[spectrum]], 1]
        ]

f[x_] := -x^2 + 7x
arglist = {-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
ArgMax[f, arglist]

>Or a multidimensional one, that can give you a list of coordinates of the
>points giving you a max.
>
>    ArgMax[f_, arglist_List] :=
>      Module[
>        {spectrum},
>        spectrum = Map[f, arglist, -1];
>        Take[arglist, #] & /@ Position[spectrum, Max[spectrum]]
>    ]
>

Sorry, this won't work. Try this instead for functions of several variables:

    ArgMax[f_, arglist_List] :=
      Module[
        {newarg = Flatten[arglist, Depth[arglist] - 3], spectrum},
        spectrum = N[Apply[f, newarg, {-2}]];
        Apply[newarg[[#]] & , Position[spectrum, Max[spectrum]], 1]
    ]

f[x_, y_] := Sin[x] - Cos[3y]
{arglist = Flatten[Table[{x, y}, {x, 0, 3}, {y, 2, 4}], 1], ArgMax[f,
arglist]}
{arglist = Table[{x, y}, {x, 0, 3}, {y, 2, 4}], ArgMax[f, arglist]}

f[x_, y_, z_] := Sin[x] - Cos[3y] + z
{arglist = Table[{x, y, z}, {x, 0, 3}, {y, 2, 4}, {z, -1, 1}],
  ArgMax[f, arglist]}

cheers,
Peltio
Invalid address in reply-to. Crafty demunging required to mail me.


  • Prev by Date: Re: Strange PV results from Integrate
  • Next by Date: Re: Export with jLink
  • Previous by thread: Re: Re: argMax
  • Next by thread: plotting groups of polynomial roots