eXorithm – Execute Algorithm: View / Run Algorithm evaluate_equation

Logo Beta

function evaluate_equation ($equation$values

{

  if (is_array$equation))

  {

    $operator = array_shift$equation);

    switch ($operator

        {

      case '+'

        return evaluate_equation$equation[0], $values)+evaluate_equation$equation[1], $values);

      case '-'

        return evaluate_equation$equation[0], $values)-evaluate_equation$equation[1], $values);

      case '*'

        return evaluate_equation$equation[0], $values)*evaluate_equation$equation[1], $values);

      case '/'

        return evaluate_equation$equation[0], $values)/evaluate_equation$equation[1], $values);

      case '%'

        return evaluate_equation$equation[0], $values)%evaluate_equation$equation[1], $values);

      case '^'

        return powevaluate_equation$equation[0], $values), evaluate_equation$equation[1], $values));

      case 'neg'

        return evaluate_equation$equation[0], $values)*-1;

      case 'abs'

        return absevaluate_equation$equation[0], $values));

      case 'sqrt'

        return sqrtevaluate_equation$equation[0], $values));

      case 'log'

        return logevaluate_equation$equation[0], $values), evaluate_equation$equation[1], $values));

      case 'ln'

        return logevaluate_equation$equation[0], $values));

      case 'exp'

        return expevaluate_equation$equation[0], $values));

      case '!'

        return 0;

      case 'root'

        return powevaluate_equation$equation[0], $values), 1/evaluate_equation$equation[1], $values));

        // trig

      case 'sin'

        return sinevaluate_equation$equation[0], $values));

      case 'cos'

        return cosevaluate_equation$equation[0], $values));

      case 'tan'

        return tanevaluate_equation$equation[0], $values));

      case 'sec'

        return 1/cosevaluate_equation$equation[0], $values));

      case 'csc'

        return 1/sinevaluate_equation$equation[0], $values));

      case 'cot'

        return 1/tanevaluate_equation$equation[0], $values));

        // hyperbolic trig

      case 'sinh'

        return sinhevaluate_equation$equation[0], $values));

      case 'cosh'

        return coshevaluate_equation$equation[0], $values));

      case 'tanh'

        return tanhevaluate_equation$equation[0], $values));

      case 'sech'

        return 1/coshevaluate_equation$equation[0], $values));

      case 'csch'

        return 1/sinhevaluate_equation$equation[0], $values));

      case 'coth'

        return 1/tanhevaluate_equation$equation[0], $values));

        // arc trig

      case 'arcsin'

        return asinevaluate_equation$equation[0], $values));

      case 'arccos'

        return acosevaluate_equation$equation[0], $values));

      case 'arctan'

        return atanevaluate_equation$equation[0], $values));

        // inverse hyperbolic trig

      case 'arsinh'

        return asinhevaluate_equation$equation[0], $values));

      case 'arcosh'

        return acoshevaluate_equation$equation[0], $values));

      case 'artanh'

        return atanhevaluate_equation$equation[0], $values));

      default

        throw new Exception'usupported operator '$operator);

    }

  }

  else

  {

    if (ctype_alpha$equation))

    {

      if (isset$values$equation]))

      {

        return $values$equation];

      }

      else

      {

        throw new Exception'equation contains an unknown variable ''$equation''!');

      }

    }

    else

    {

      return $equation

    }

  }