argmin.frink

Download or view argmin.frink in plain text format



/** This contains functions to find the "argmin" of a function, that is,
    given a single-argument function and a list of input values, returns an
    array of the input value(s) where the function has the minimum value.
*/

argmin[f, data] :=
{
   min = undef
   results = new array

   for arg = data
   {
      val = f[arg]
      if min == undef
      {
         min = val
         results.push[arg]
      } else
      {
         if val < min    // New minimum, replace results list
         {
            results = [arg]
            min = val
         } else
            if val == min  // Identical min, push arg to arg list
               results.push[arg]
      }
   }

   return results
}

/** This contains functions to find the "argmax" of a function, that is,
    given a single-argument function and a list of input values, returns an
    array of the input value(s) where the function has the maxmium value.
*/

argmax[f, data] :=
{
   max = undef
   results = new array

   for arg = data
   {
      val = f[arg]
      if max == undef
      {
         max = val
         results.push[arg]
      } else
      {
         if val > max    // New maximum, replace results list
         {
            results = [arg]
            max = val
         } else
            if val == max  // Identical max, push arg to arg list
               results.push[arg]
      }
   }

   return results
}


/*
// Example usages
squareFunc = {|x| x^2}
data = [-1, 1, -2]
println["argmin: " + argmin[squareFunc, data]]
println["argmax: " + argmax[squareFunc, data]]
println[]

data = [[2,-3],[3,5],[2,5],[-2,3],[-2,-3]]
product = getFunction["product", 1]
println["argmin: " + argmin[product, data]]
println["argmax: " + argmax[product, data]]
*/


Download or view argmin.frink in plain text format


This is a program written in the programming language Frink.
For more information, view the Frink Documentation or see More Sample Frink Programs.

Alan Eliasen was born 20152 days, 21 hours, 45 minutes ago.