95 lines
2.0 KiB
Scheme
95 lines
2.0 KiB
Scheme
(module plot mzscheme
|
|
(require
|
|
(lib "list.ss")
|
|
(lib "etc.ss")
|
|
(lib "math.ss" "plot")
|
|
(lib "view.ss" "plot")
|
|
(lib "renderer-helpers.ss" "plot")
|
|
(lib "renderers.ss" "plot")
|
|
(lib "fit.ss" "plot")
|
|
(lib "class.ss"))
|
|
|
|
; plot : plottable (option value)*
|
|
(define-syntax plot
|
|
(syntax-rules ()
|
|
[(_ ren )
|
|
(instantiate 2d-view% () (renderer ren))]
|
|
[(_ ren (option value) ...)
|
|
(instantiate 2d-view% () (renderer ren) (option value) ...)]))
|
|
|
|
(define-syntax plot3d
|
|
(syntax-rules ()
|
|
[(_ ren )
|
|
(instantiate 3d-view% () (renderer ren))]
|
|
[(_ ren (option value) ...)
|
|
(instantiate 3d-view% () (renderer ren) (option value) ...)]))
|
|
|
|
; mix-int : renderer renderer -> renderer
|
|
; creates a renderer that will renderer both of the inputs
|
|
(define (mix-int renderer1 renderer2)
|
|
(lambda (view)
|
|
(send view reset-to-default)
|
|
(renderer1 view)
|
|
(send view reset-to-default)
|
|
(renderer2 view)))
|
|
|
|
; mix : renderer+ -> renderer
|
|
; combine any number of renderers
|
|
(define (mix r1 . the-rest)
|
|
(if (empty? the-rest)
|
|
r1
|
|
(mix-int r1 (apply mix the-rest))))
|
|
|
|
; make-2d-renderer : (2d-view% -> void)
|
|
; provides a user with the ability to create their own renderers
|
|
; without providing the implimentation
|
|
(define custom identity)
|
|
|
|
;;
|
|
(define-syntax fit
|
|
(syntax-rules ()
|
|
[(_ func ((param guess) ...) data)
|
|
(fit-int func
|
|
'((param guess) ...)
|
|
data)]))
|
|
|
|
(provide
|
|
|
|
;fitting
|
|
fit
|
|
(struct fit-result (rms
|
|
variance
|
|
names
|
|
final-params
|
|
std-error
|
|
std-error-percent
|
|
function))
|
|
; to make plots
|
|
plot
|
|
plot3d
|
|
|
|
; to combine/create renderers
|
|
mix
|
|
custom
|
|
|
|
; 2d-renderers
|
|
error-bars
|
|
points
|
|
line
|
|
vector-field
|
|
contour
|
|
shade
|
|
; 3d-rendereres
|
|
surface
|
|
mesh3d
|
|
|
|
; from math-tools
|
|
derivative
|
|
gradient
|
|
make-vec
|
|
|
|
|
|
))
|
|
|
|
|