login  home  contents  what's new  discussion  bug reports help  links  subscribe  changes  refresh  edit
 Topics FrontPage SandBox SandBox Numerical Integration <-- You are here. On March 10, 2006 10:53 PM Donald J Bindner wrote: I'm trying to learn a bit about compiling packages for Axiom, so I chose a small task to cut my teeth on. I want to implement for myself a simpler simpson() function that does numerical integration. I've got a working package after browsing through numquad.spad. However the prototype for my function is:  simpson( Float->Float, Segment Float )  So I can perform calculations like:  simpson( x +-> 1/x, 1..2 )  However I'd like to use a syntax more similar to the way integrate() works. I'd prefer to be able to execute:  simpson( 1/x, x=1..2 )  I've done a lot of browsing, but I can't figure out how this is done. I've tried to distill the core of my question into a small example package. It contains two simple() functions. One works fine, but the other won't compile. Suggestions would be welcome. spad)abbrev package DONSIMP donSimple -- Exports simple() function which takes 2 args, -- Working behavior is: simple( x+->x^2, 1..2 ) = 3.0 -- Not working but intended behavior is: -- simple( x^2, x=1..2 ) = 3.0 -- donSimple(): Exports == Implementation where F ==> Float SF ==> Segment F EF ==> Expression F SBF ==> SegmentBinding F Exports ==> with simple : (F->F,SF) -> F simple : (EF,SBF) -> EF Implementation ==> add simple(func:F->F, sf:SF ) == a : F := lo(sf) b : F := hi(sf) func(b) - func(a) simple(func:EF, sbf:SBF) == a : F := lo(segment(sbf)) b : F := hi(segment(sbf)) x : Symbol := variable(sbf) eval(func, kernel(x), b::EF) - eval(func, kernel(x), a::EF) spad Compiling FriCAS source code from file /var/lib/zope2.10/instance/axiom-wiki/var/LatexWiki/9089532301415255797-25px001.spad using old system compiler. DONSIMP abbreviates package donSimple ------------------------------------------------------------------------ initializing NRLIB DONSIMP for donSimple compiling into NRLIB DONSIMP compiling exported simple : (Float -> Float,Segment Float) -> Float ****** comp fails at level 3 with expression: ****** error in function simple (SEQ (|:=| (|:| |a| (|Float|)) | << | (|lo| |sf|) | >> |) (|:=| (|:| |b| (|Float|)) (|hi| |sf|)) (|exit| 1 (- (|func| |b|) (|func| |a|)))) ****** level 3 ****** $x:= (lo sf)$m:= $EmptyMode$f:= ((((|a| #) (|sf| # . #1=#) (|func| # #) (|sf| . #1#) ...))) >> Apparent user error: NoValueMode is an unknown mode fricassimple(1/x,x=2..3) There are no library operations named simple Use HyperDoc Browse or issue )what op simple to learn if there is any operation containing " simple " in its name. Cannot find a definition or applicable library operation named simple with argument type(s) Fraction(Polynomial(Integer)) SegmentBinding(PositiveInteger) Perhaps you should use "@" to indicate the required return type, or "\$" to specify which version of the function you need.

 Subject:   Be Bold !! ( 15 subscribers )