41 lines
821 B
Forth
41 lines
821 B
Forth
fvariable step
|
|
|
|
defer method ( fn F: x -- fn[x] )
|
|
|
|
: left execute ;
|
|
: right step f@ f+ execute ;
|
|
: mid step f@ 2e f/ f+ execute ;
|
|
: trap
|
|
dup fdup left
|
|
fswap right f+ 2e f/ ;
|
|
: simpson
|
|
dup fdup left
|
|
dup fover mid 4e f* f+
|
|
fswap right f+ 6e f/ ;
|
|
|
|
: set-step ( n F: a b -- n F: a )
|
|
fover f- dup 0 d>f f/ step f! ;
|
|
|
|
: integrate ( xt n F: a b -- F: sigma )
|
|
set-step
|
|
0e
|
|
0 do
|
|
dup fover method f+
|
|
fswap step f@ f+ fswap
|
|
loop
|
|
drop fnip
|
|
step f@ f* ;
|
|
\ testing similar to the D example
|
|
: test
|
|
' is method ' 4 -1e 2e integrate f. ;
|
|
|
|
: fn1 fsincos f+ ;
|
|
: fn2 fdup f* 4e f* 1e f+ 2e fswap f/ ;
|
|
|
|
7 set-precision
|
|
test left fn2 \ 2.456897
|
|
test right fn2 \ 2.245132
|
|
test mid fn2 \ 2.496091
|
|
test trap fn2 \ 2.351014
|
|
test simpson fn2 \ 2.447732
|