All Downloads are FREE. Search and download functionalities are using the official Maven repository.

manipulate.Manipulate.scala Maven / Gradle / Ivy

The newest version!
package galileo.manipulate

import galileo.environment.Environment
import galileo.constants._
import galileo.expr._

// functions like:
// * expand
// * simplify
// * factor
// * combine

trait Manipulate {
	val expr:Expr
	def variables:List[Variable] = expr.variables
}

// expand products
// expand((a+b)*(a-b))=a^2-b^2
// Note: expand a^2 -> a^2 unless a is a sum or product
case class Expand(expr:Expr) extends Expr with Manipulate {
	override def visit( env:Option[Environment]=None):Expr = expr.visit(env).expand
	def info(env:Option[Environment]=None):String = "expand(" + expr.info(env) + ")"
}

// for now, only simplify fractions by removing common factors in numerator and denominator
case class Simplify(expr:Expr) extends Expr with Manipulate {      									 
	override def visit(env:Option[Environment]=None):Expr = {
		val simplifier = new ClosedFormSimplifier	
		simplifier.simplify( expr.visit(env) )
	}

	def info(env:Option[Environment]=None):String = "Simplify(" + expr.info(env) + ")"
}


case class Complexity(expr:Expr) extends Expr with Manipulate {      									 
	override def visit(env:Option[Environment]=None):Expr = {
		val simplifier = new ComplexityMinimizingSimplifier	
		Number( simplifier.complexity( expr.visit(env) ) )
	}

	def info(env:Option[Environment]=None):String = "Simplify(" + expr.info(env) + ")"
}

case class SimplifyMin(expr:Expr) extends Expr with Manipulate {      									
	override def visit(env:Option[Environment]=None):Expr = {
		val simplifier = new ComplexityMinimizingSimplifier
		simplifier.simplify( expr.visit(env) )
	}

	def info(env:Option[Environment]=None):String = "SimplifyMin(" + expr.info(env) + ")"
}

// factor 4*a*b+5*a*b -> 9*a*b
case class Factor(expr:Expr) extends Expr with Manipulate {
	override def visit( env:Option[Environment]=None):Expr = {
		//println( "factor(" + expr.visit() + ")" )
		expr.visit(env).factor.visit()
		//expr.factor
	}
	def info(env:Option[Environment]=None):String = "factor(" + expr.info(env) + ")"
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy