package jsci.maths.symbolic;
 

import java.util.*;

import jsci.maths.*;
import jsci.maths.analysis.*;
import jsci.maths.fields.*;
import jsci.maths.groups.*;

/** This class associates a JSci.maths.analysis.RealFunction to
 * an Expression argument, to generate an Expression.
 * 
* This class will substitute the Function class. *
* See the main() for example. */ public class Evaluation extends Expression { private final RealFunction fn; private final Expression arg; /** * @param n the function; for example, * @param a the argument */ public Evaluation(RealFunction n,Expression a) { fn=n; arg=a; } public String toString() { return "f<"+fn+">"+"("+arg+")"; } public int getPriority() {return 15;} public Expression differentiate(Variable x) { return Expression.product( new Evaluation(fn.differentiate(),arg), arg.differentiate(x) ); } public boolean equals(Object o) { if (!Evaluation.class.isInstance(o)) return false; Evaluation f = (Evaluation)o; return (fn.equals(f.fn) && arg.equals(f.arg)); } public Object getSet() { return RealField.getInstance(); } public Expression evaluate() { Expression sarg = arg.evaluate(); if (sarg instanceof Constant) { MathDouble a = (MathDouble)((Constant)sarg).getValue(); return new Constant(new MathDouble(fn.map(a.doubleValue()))); } return new Evaluation(fn,sarg); } /** An example */ public static void main(String [] args) { Variable xVar = new Variable("x",RealField.getInstance()); Expression expr = new Evaluation(new Exponential(1.0,1.0,0.0),xVar); System.out.println("expr = "+expr); xVar.setValue(new MathDouble(1.0)); System.out.println("x = 1"); System.out.println("expr = "+expr.evaluate()); xVar.setValue(null); System.out.println("d/dx expr = "+expr.differentiate(xVar).evaluate()); } }

Ads help maintain this website.