Login   Register  
PHP Classes
elePHPant
Icontem

File: README.md

Recommend this page to a friend!
Stumble It! Stumble It! Bookmark in del.icio.us Bookmark in del.icio.us
  Classes of Jon Lawrence  >  Equation Operating System  >  README.md  >  Download  
File: README.md
Role: Documentation
Content type: text/plain
Description: Description of class functionality and use cases
Class: Equation Operating System
Solve equations with multiple variables
Author: By
Last change: Made accessible without user login and moved up priority in listing.
Date: 1 year ago
Size: 5,108 bytes
 

Contents

Class file image Download
# Classes
---

## eos.class.php

### Equation Operating System

This class makes it incredibly easy to use and parse/solve equations in
your own applications. It includes a graph generator to turn an equation
with a variable in to a `y=x` graph, with the capability to calculate
the upper and lower `y-bounds`.  __NOTE__ NONE of the functions within
these two classes are static, any example that looks like a static function
call is representational of the class being used, but should be initialized
and assigned to a variable first.  It is also important to note that these
classes throw exceptions if running in to errors, please read the beginning
of the `eos.class.php` file for the defines of the exceptions thrown. Exceptions
includes a descriptive message of the error encountered and within `eqEOS` will
also typically include the full equation used.

#### eqEOS

This class has one important function, `eqEOS::solveIF()` which does all the legwork,
so we'll start there and end with examples.  
To initialize this class, use:

    $eos = new eqEOS();

##### solveIF($infix, $variables)

To use this function:

    $value = $eos->solveIF($eq, $vars);

###### _$infix_

Is simply a standard equation with variable support. Variables
have two forms, one is native to PHP programmers already, prefixed with '$'.
The other way to declare a variable is with '&' and is included for
backward compatibility for with the initial version from 2005.  
Example Equations:

    2(4$x)
    2(4&x)
    5+ ((1+2)*4) +3
    5+4(1+2)+3
    10*sin($x)
    10*cos($x)

The first two pairs shown are exactly the same.  The parser has good implied
multiplication, for everything but allowed functions.  Allowed functions require
an implicit operator on either/both sides to work properly, I hope to change
that in the next revision; but for now, note that it will not work as you would
expect.  
For example:

    5sin(1.5707963267) = 51
    5*sin(1.5707963267) = 5
    sin(1.5707963267)5 = 15

The reason is because there is no implied multiplication being applied, the result
of `sin(1.5707963267) = 1` is being concatenated with the number 5, giving
incredibly odd results if you are not expecting it.

###### _$variables_

The variables are fairly simple to understand.  If it contains a scalar (ie
a non-array value) _every_ variable within the equation will be replaced with
that number.  If it contains an array, there will be a by-variable replacement -
note that the array MUST be in the format of `'variable' => value`  
Such as:

    array(
        'x' => 2,
        'y' => 3
    )

Given the equation:

    5$x^$y

If this is called by:

    eqEOS::solveIF('5$x^$y', 2)

It will equal '20', as every variable is replaced by 2.  However, if called like:

    eqEOS::solveIF('5$x^$y', array(
                                'x' => 2,
                                'y' => 3);

You will get the result of '40' as it would equate to '5*2^3', as expected.

#### eqGraph

This is the fun class that can create graphs.  It extends `eqEOS`.  
To initialize use:

    $graph = new eqGraph($width, $height);

The `$width` and `$height` are the values used for the image size, defaulting to
a `640x480` image size if initialized with `$graph = new eqGraph();`

##### graph($eq, $xLow, $xHigh, $xStep, [$xyGrid, $yGuess, ...])

This method will generate the graph for the equation (`$eq`) with a min and max
`x` range that it will parse through. All Variables explained:
* `$eq`
    The Standard Equation to use.  _Must_ have a variable in it. (ie `$x`)
* `$xLow`
    The starting point for the calculations - the left side of the graph.
* `$xHigh`
    The last point calculated for the variable - the right side of the graph.
* `$xStep`
    Stepping point for the variable.  Suggested not to use a value less than
    `.01`.  This is the precision of the graph.
* `$xyGrid = false`
    Show `x/y` gridlines on the graph.  Defaults to false.  Each grid line
    is set at every integer (ie `1,2,3,...100`). If working with small ranges,
    it is suggested to turn this on.
* `$yGuess = true`
    Guess the Lower and Upper `y-bounds` (The bottom and top of the image
    respectively.)  This will set the the bounds to the lowest `y` value
    encountered for the `$yLow`, and the largest `y` value for `$yHight`.
* `$yLow = false`
    Lower bound for `y`, will be reset if a lower value for `y` is found.
* `$yHigh = false`
    Upper bound for `y`, will be reset if a larger `y` value is found.

TODO:
* Add `x` and `y` labels
* Smart `grid spacing` calculations so can be effective with large ranges.
* Smart (default) `$xStep` calcuations based on image size and ranges.

To set up a graph with a `21x21` window (ie `-10 to 10`) for the equation
`sin($x)` and output as PNG, would use as:

    $graph->graph('sin($x)', -10, 10, 0.01, true, false, -10, 10);
    $graph->outPNG();

It would look like:  
![Sin(x)](http://img825.imageshack.us/img825/1380/sinx21x21.png)
---