What Is It?

Symbolic Math: Symbolic computation or algebraic computation, relates to the use of machines, such as computers, to manipulate mathematical equations and expressions in symbolic form, as opposed to manipulating the approximations of specific numerical quantities represented by those symbols. (Wikipedia, "Symbolic Computation")

It is easy to create computable expressions in the ABL language with an assign statement. Now your customer wants to do the same! They want to be able to create equations as parameters describing the computation instead of depending on the source code. How can you do this? The EQN II library will enable you to provide that feature to your customers and/or users.

Now your customers can define equations and variables in a parameter system of your choice (database records, files, etc.) It uses the usual algebraic notation and operates on numbers, strings, logicals, and date type variables and operations.

Here is an example of use for a simple inventory decision - the economic ordering quantity. (Block et al, 2009) The expressions of interest that would be in the parameters and data pulled from ABL code are:

SalesUnits=10
OrderCost=5
CarryCost=1.2
EconomicOrderQuantity=sqrt((2 * SalesUnits * OrderCost) / CarryCost)

The implementation code with EQN II would read as:

define variable CalcEngine as com.amduus.eqnii.clsCalcEngine no-undo.

define variable S as decimal no-undo.
define variable O as decimal no-undo.
define variable C as decimal no-undo.

CalcEngine = new com.amduus.eqnii.clsCalcEngine().

/* Implementation code would pull data from their database */
/* We simply assign them in the ABL.                       */

assign
S = 100
C = 1.2
O = 5
.


/* Send the data into the CalcEngine so customer math can be used */

CalcEngine:AssignVariable("SalesUnits=" + string(S)).
CalcEngine:AssignVariable("OrderCost=" + string(O)).
CalcEngine:AssignVariable("CarryCost=" + string(C)).
CalcEngine:AddFormula("EconomicOrderQuantity=sqrt((2 * SalesUnits * OrderCost) / CarryCost)").

/* Display the goods! */

display CalcEngine:EvalAlgebraic("EconomicOrderQuantity").

delete object CalcEngine.
    

As you can see, the mathematical expressions are all stored in strings which can be manipulated by the user with a string editing routine. Programmers can populate the EQN II variables with string representations of data coming out of the ABL variables. Then simply call the proper evaluation routine. The user now has control over the evaluation expression!

Where is the documentation?

The source code is free for use, but the documentation for it is not. While we have attempted to write the code in the most clean and self-documenting manner possible, in the end it is written for a compiler, not a human being. The Programmer Guide is a book which can be purchased at lulu.com that includes examples, installation instructions, implementation instructions, theory of operation, and references for the classes in the system. You can be functional in the tool if you read the code, however there are some gotcha's that may appear to be a bug but which are not. Purchasing fom here the book is highly recommended not only for this information but also to support the project.

License For Use

EQN II uses the BSD license which reads as follows:


EQN II Symbolic Mathematics Library
Copyright (c) 2010,2011 Amduus Information Works, Inc. and Scott Auge
scott_auge@yahoo.com sauge@amduus.com

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

You should include this text in on your documentation, help pages, and about screen of your application. Part of the purpose of this code is to demonstrate what the research and development projects at Amduus can accomplish.

How can I contribute?

You can read in multiple ways. Of course, the first is purchasing the book or sending a check to Amduus Information Works, Inc. for an amount you feel is appropriate. Second is adding to the library with source code contributions. If they make it into the library you will certainly be acknowledged in the documentation and CHANGELOG. Finally, if you have an idea of a new feature to add to the library, we'll evaluate it (pun intended!) and add it to the library with acknowledgement to you in the documentation and CHANGELOG.

At the least, please register your interest in the software. If there are really only one or two registrations, updates to the software probably will not be continued.

About Amduus Information Works, Inc.

Amduus Infromation Works, Inc. has been in business since 2001 developing various software for customers in the manufacturing, services, wholesale, real estate, insurance, and legal industries. The company is a privately owned corporation incorporated in the state of Delaware.

You can write Amduus at:

Amduus Information Works, Inc.
1818 Briarwood
Flint, MI 48507

 

Reference

Block, Stanley B., Hirt, Geoffrey A., Danielson, Bartley R. (2009) Foundations of Financial Management (11th Ed) New York, New York: McGraw-Hill Irwin. ISBN 978-0-07-338238-8

Wikipedia (n.d.) Symbolic Computation. Wikipedia [Web]. Retrieved December 4, 2010 from http://en.wikipedia.org/wiki/Symbolic_math.