Packages provide the bulk of package FriCAS’s algorithmic library, from numeric packages for computing special functions to symbolic facilities for constructor:package differential equations, symbolic integration, and limits. package:constructor
In Chapter ugIntProg , we developed several useful functions for drawing vector fields and complex functions. We now show you how you can add these functions to the FriCAS library to make them available for general use.
The way we created the functions in Chapter ugIntProg is typical of how you, as an advanced FriCAS user, may interact with FriCAS. You have an application. You go to your editor and create an input file defining some functions for the application. Then you run the file and try the functions. Once you get them all to work, you will often want to extend them, add new features, perhaps write additional functions.
Eventually, when you have a useful set of functions for your application, you may want to add them to your local FriCAS library. To do this, you embed these function definitions in a package and add that package to the library.
To introduce new packages, categories, and domains into the system, you need to use the FriCAS compiler to convert the constructors into executable machine code. An existing compiler in FriCAS is available on an as-is basis. A new, faster compiler will be available in version 2.0 of FriCAS.
C ==> Complex DoubleFloat All constructors used in a file
S ==> Segment DoubleFloat must be spelled out in full
INT ==> Integer unless abbreviated by macros
- DFLOAT ==> DoubleFloat like these at the top of
- VIEW3D ==> ThreeDimensionalViewport a file CURVE ==> List List Point DFLOAT
)abbrev package DRAWCX DrawComplex Identify kinds and abbreviations
DrawComplex(): Exports == Implementation where Type definition begins here
Exports == with Export part begins
- drawComplex: (C -> C,S,S,Boolean) -> VIEW3D Exported Operations
- drawComplexVectorField: (C -> C,S,S) -> VIEW3D setRealSteps: INT -> INT setImagSteps: INT -> INT setClipValue: DFLOAT-> DFLOAT
Implementation == add Implementation part begins
arrowScale : DFLOAT := (0.2)::DFLOAT –relative size Local variable 1
arrowAngle : DFLOAT := pi()-pi()/(20::DFLOAT) Local variable 2
realSteps : INT := 11 –# real steps Local variable 3
- imagSteps : INT := 11 –# imaginary steps Local variable 4
- clipValue : DFLOAT := 10::DFLOAT –maximum vector length
Local variable 5
setRealSteps(n) == realSteps := n Exported function definition 1
setImagSteps(n) == imagSteps := n Exported function definition 2
- setClipValue(c) == clipValue := c Exported function definition 3
- clipFun: DFLOAT -> DFLOAT –Clip large magnitudes. clipFun(x) == min(max(x, -clipValue), clipValue)
- Local function definition 1
- makeArrow: (Point DFLOAT,Point DFLOAT,DFLOAT,DFLOAT) -> CURVE
- makeArrow(p1, p2, len, arg) == ... Local function definition 2
- drawComplex(f, realRange, imagRange, arrows?) == ...
Exported function definition 4
The DrawComplex package.