I’m trying to minimize a function. It’s a continuous function made up of
piecewise well-behaved functions of the form (k_0 / x) +( k_1 / x^2). It’s not
hard to solve these analytically, but since they’re piecewise functions each
with different coefficients, I figured I’d ask first: does the math package
have a built-in function minimization operator? I looked around a bit and found
the root-finder, but not a minimizer.
Well, what the heck; racket is compact, I might as well include some sample
code and a picture.
Any help appreciated!
#lang racket
(require math/statistics)
;; this file tries to determine the "best-fit" l for each user.
;; the model in this case is a one-parameter model, defining this
;; simplified learning function:
;; f(t) = (1 - t/l) when 0 < t < l
;; f(t) = 0 when t >= l
(require plot)
(define example-sequence
'(#(0 1)
#(400000 2/9)
#(700000 3/9)
#(800000 0)
#(1000000 0)))
(plot (list (points example-sequence)
(lines example-sequence))
#:x-max 1200000
#:width 1300)
;; this fitness function measures the mean squared distance
;; from the datapoints to Model_l.
;; I want to find the value of l that minimizes this function
(define (badness l)
(mean
(for/list ([pt (in-list example-sequence)])
(match-define (vector t e) pt)
(expt (cond [(< t l) (- e (- 1 (/ t l)))]
[else e])
2))))
(plot (function badness)
#:width 1300
#:x-min 1
#:x-max 1200000
#:y-min 0)
--
You received this message because you are subscribed to the Google Groups
"Racket Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.