2005-11-07 20:27:34 -05:00
|
|
|
IN: math-contrib
|
2006-09-05 01:29:26 -04:00
|
|
|
USING: kernel sequences errors namespaces math vectors errors prettyprint io tools ;
|
2005-11-07 20:27:34 -05:00
|
|
|
|
|
|
|
|
: setup-range ( from to -- frange )
|
2006-11-15 13:36:57 -05:00
|
|
|
>r step-size get r> <frange-no-endpt> ;
|
2005-11-07 20:27:34 -05:00
|
|
|
|
|
|
|
|
: integrate-rect ( from to f -- x )
|
2006-11-15 13:36:57 -05:00
|
|
|
>r setup-range r>
|
|
|
|
|
[ step-size get * + ] append >r 0 r> reduce ;
|
2005-11-07 20:27:34 -05:00
|
|
|
|
|
|
|
|
: integrate-trap ( from to f -- x )
|
|
|
|
|
>r setup-range r>
|
2006-07-29 20:36:25 -04:00
|
|
|
map dup 1 tail >r >vector dup pop drop r>
|
2005-11-07 20:27:34 -05:00
|
|
|
[ + 2 / step-size get * ] 2map sum ;
|
|
|
|
|
|
2006-11-15 13:36:57 -05:00
|
|
|
SYMBOL: num-steps 180 num-steps set-global
|
2005-11-09 17:48:55 -05:00
|
|
|
: setup-simpson-range ( from to -- frange )
|
|
|
|
|
[ swap - num-steps get /f ] 2keep swapd <frange> ;
|
|
|
|
|
|
|
|
|
|
: generate-simpson-weights ( seq -- seq )
|
2006-11-15 13:36:57 -05:00
|
|
|
[ { 1 4 } % length 2 / 2 - [ { 2 4 } % ] times 1 , ] { } make ;
|
2005-11-09 17:48:55 -05:00
|
|
|
|
|
|
|
|
: integrate-simpson ( from to f -- x )
|
|
|
|
|
>r setup-simpson-range r> dupd map dup generate-simpson-weights
|
2006-11-15 13:36:57 -05:00
|
|
|
0 [ * + ] 2reduce swap [ third ] keep first - 6 / * ;
|
|
|
|
|
|
2005-11-07 20:27:34 -05:00
|
|
|
|
2006-11-15 13:36:57 -05:00
|
|
|
: quadrature ( from to f -- x ) integrate-simpson ;
|
2005-11-16 19:41:27 -05:00
|
|
|
|