eXorithm – Execute Algorithm: View / Run Algorithm simplify_equation

Logo Beta

function simplify_equation ($equation

{

  if (is_array$equation)) {

    

    // first simply the parameters of the equation

    $equation[1] = simplify_equation$equation[1]);

    if (isset$equation[2])) {

      $equation[2] = simplify_equation$equation[2]);

    }

    

    // simplify based on the operator

    switch ($equation[0]) {

        

      case '+'

        if ((is_numeric$equation[1])) && (is_numeric$equation[2]))) {

          return $equation[1]+$equation[2];

        }

        if ($equation[1]===0) {

          return $equation[2];

        }

        if ($equation[2]===0) {

          return $equation[1];

        }

        return $equation

        

      case '-'

        if ($equation[1]===$equation[2]) {

          return 0;

        }

        if ((is_numeric$equation[1])) && (is_numeric$equation[2]))) {

          return $equation[1]-$equation[2];

        }

        if ($equation[1]===0) {

          return array'neg'$equation[2]);

        }

        if ($equation[2]===0) {

          return $equation[1];

        }

        return $equation

        

      case '*'

        if ((is_numeric$equation[1])) && (is_numeric$equation[2]))) {

          return $equation[1]*$equation[2];

        }

        if ($equation[1]===0) {

          return 0;

        }

        if ($equation[2]===0) {

          return 0;

        }

        if ($equation[1]===1) {

          return $equation[2];

        }

        if ($equation[2]===1) {

          return $equation[1];

        }

        return $equation

        

      case '/'

        if ($equation[2]===0) {

          throw new Exception'division by zero');

        }

        if ($equation[1]===$equation[2]) {

          return 1;

        }

        if ((is_numeric$equation[1])) && (is_numeric$equation[2]))) {

          if (($equation[1] % $equation[2])==0) {

            return $equation[1]/$equation[2];

          } else {

            // get the greastest common divisor

            $gcd = gcd_euclid$equation[1], $equation[2]);

            $equation[1] = $equation[1]/$gcd

            $equation[2] = $equation[2]/$gcd

          }

        }

        if ($equation[1]===0) {

          return 0;

        }

        if ($equation[2]===1) {

          return $equation[1];

        }

        return $equation

        

      case '^'

        if ((is_numeric$equation[1])) && (is_numeric$equation[2]))) {

          return pow$equation[1], $equation[2]);

        }

        if ($equation[1]===0) {

          return 0;

        }

        if ($equation[1]===1) {

          return 1;

        }

        if ($equation[2]===0) {

          return 1;

        }

        if ($equation[2]===1) {

          return $equation[1];

        }

        return $equation

        

      case 'neg'

        if (is_array$equation[1])) {

          if ($equation[1][0]=='neg') {

            return $equation[1][1];

          }

        }

        if (is_numeric$equation[1])) {

          return $equation[1]*-1;

        }

        return $equation

        

      case 'sqrt'

        if (is_numeric$equation[1])) {

          return sqrt$equation[1]);

        }

        return $equation

        

      case 'log'

        if ($equation[1]===1) {

          return 0;

        }

        if ((is_numeric$equation[1])) && (is_numeric$equation[2]))) {

          return log$equation[1], $equation[2]);

        }

        return $equation

        

      case 'ln'

        if (is_numeric$equation[1])) {

          return log$equation[1]);

        }

        return $equation

        

      case 'exp'

        if (is_numeric$equation[1])) {

          return exp$equation[1]);

        }

        return $equation

        

      case 'root'

        if ((is_numeric$equation[1])) && (is_numeric$equation[2]))) {

          return pow$equation[1], 1/$equation[2]);

        }

        if ($equation[1]===0) {

          return 0;

        }

        if ($equation[1]===1) {

          return 1;

        }

        if ($equation[2]===0) {

          throw new Exception'division by zero');

        }

        if ($equation[2]===1) {

          return $equation[1];

        }

        return $equation

        

        // trig

      case 'sin'

        if (is_numeric$equation[1])) {

          return sin$equation[1]);

        }

        return $equation

        

      case 'cos'

        if (is_numeric$equation[1])) {

          return cos$equation[1]);

        }

        return $equation

        

      case 'tan'

        if (is_numeric$equation[1])) {

          return tan$equation[1]);

        }

        return $equation

        

      case 'sec'

        if (is_numeric$equation[1])) {

          return 1/cos$equation[1]);

        }

        return $equation

        

      case 'csc'

        if (is_numeric$equation[1])) {

          return 1/sin$equation[1]);

        }

        return $equation

        

      case 'cot'

        if (is_numeric$equation[1])) {

          return 1/tan$equation[1]);

        }

        return $equation

        

        // hyperbolic trig

      case 'sinh'

        if (is_numeric$equation[1])) {

          return sinh$equation[1]);

        }

        return $equation

        

      case 'cosh'

        if (is_numeric$equation[1])) {

          return cosh$equation[1]);

        }

        return $equation

        

      case 'tanh'

        if (is_numeric$equation[1])) {

          return tanh$equation[1]);

        }

        return $equation

        

      case 'sech'

        if (is_numeric$equation[1])) {

          return 1/cosh$equation[1]);

        }

        return $equation

        

      case 'csch'

        if (is_numeric$equation[1])) {

          return 1/sinh$equation[1]);

        }

        return $equation

        

      case 'coth'

        if (is_numeric$equation[1])) {

          return 1/tanh$equation[1]);

        }

        return $equation

        

        // arc trig

      case 'arcsin'

        if (is_numeric$equation[1])) {

          return asin$equation[1]);

        }

        return $equation

        

      case 'arccos'

        if (is_numeric$equation[1])) {

          return acos$equation[1]);

        }

        return $equation

        

      case 'arctan'

        if (is_numeric$equation[1])) {

          return atan$equation[1]);

        }

        return $equation

        

        // inverse hyperbolic trig

      case 'arsinh'

        if (is_numeric$equation[1])) {

          return asinh$equation[1]);

        }

        return $equation

        

      case 'arcosh'

        if (is_numeric$equation[1])) {

          return acosh$equation[1]);

        }

        return $equation

        

      case 'artanh'

        if (is_numeric$equation[1])) {

          return atanh$equation[1]);

        }

        return $equation

        

      default

        throw new Exception'usupported operator '$operator);

                         }

  }

  return $equation