java.lang.Object
org.bzdev.devqsim.SimObject
org.bzdev.devqsim.DefaultSimObject
org.bzdev.devqsim.SimFunctionTwo
- All Implemented Interfaces:
DoubleBinaryOperator,RealValuedFunctTwoOps,RealValuedFunctVAOps,NamedFunctionTwoOps,NamedObjectOps
Factory for simulation objects in which an object represents
a RealValuedFunctionTwo.
-
Constructor Summary
ConstructorsConstructorDescriptionSimFunctionTwo(Simulation sim, String name, boolean intern, Object fobj) Constructor given a RealValuedFunctionTwo or a scripting-language-defined object.SimFunctionTwo(Simulation sim, String name, boolean intern, String fname, String f1name, String f2name, String f11name, String f12name, String f21name, String f22name) Constructor given the names of scripting-language-defined functions that will implement a function and its first and second derivatives.SimFunctionTwo(Simulation sim, String name, boolean intern, RealValuedFunctTwoOps f) Constructor given a RealValuedFunctTwoOps object, which can be provided by a lambda expression.SimFunctionTwo(Simulation sim, String name, boolean intern, RealValuedFunctTwoOps f, RealValuedFunctTwoOps f1, RealValuedFunctTwoOps f2) Constructor given RealValuedFunctTwoOps objects, which can be provided by lambda expressions, to specify a function and its first partial derivatives.SimFunctionTwo(Simulation sim, String name, boolean intern, RealValuedFunctTwoOps f, RealValuedFunctTwoOps f1, RealValuedFunctTwoOps f2, RealValuedFunctTwoOps f11, RealValuedFunctTwoOps f12, RealValuedFunctTwoOps f21, RealValuedFunctTwoOps f22) Constructor given RealValuedFunctTwoOps objects, which can be provided by lambda expressions, to specify a function and its first and second partial derivatives. -
Method Summary
Modifier and TypeMethodDescriptionbooleanDetermine if this named object can be deleted.protected Objectclone()Creates and returns a copy of this object.final booleandelete()Delete an object.final booleanDetermine if an object is being deleted.doublederiv11At(double x, double y) Evaluate the partial derivative $\frac{\partial^2 f}{\partial x_1^2}$ for the function f(x1,x2) defined by this object.doublederiv12At(double x, double y) Evaluate the partial derivative $\frac{\partial^2 f}{\partial x_1 \partial x_2}$ for the function f(x1,x2) defined by this object.doublederiv1At(double x, double y) Evaluate the partial derivative $\frac{\partial f}{\partial x_1}$ for the function f(x1,x2) defined by this object.doublederiv21At(double x, double y) Evaluate the partial derivative $\frac{\partial^2 f}{\partial x_2 \partial x_1}$ for the function f(x1,x2) defined by this object.doublederiv22At(double x, double y) Evaluate the partial derivative $\frac{\partial^2 f}{\partial x_2^2}$ for the function f(x1,x2) defined by this object.doublederiv2At(double x, double y) Evaluate the partial derivative $\frac{\partial f}{\partial x_2}$ for the function f(x1,x2) defined by this object.booleanDetermine if the domain maximum for the first argument is in the domain.booleanDetermine if the domain maximum for the second argument is in the domain.booleanDetermine if the domain minimum for the first argument is in the domain.booleanDetermine if the domain minumum for the second argument is in the domain.doubleGet the maximum value of the first argument in the domain of the function.doubleGet the maximum value of the second argument in the domain of the function.doubleGet the minimum value of the first argument in the domain of the function.doubleGet the minimum value of the second argument in the domain of the function.Get the RealValuedFunctionTwo associated with this named object.final StringgetName()Get an object's name.protected SimulationGet the object namer for a named object.final booleanDetermine if an object has been deleted.booleanisInDomain(double x, double y) Determine if a point (x, y) is within the domain of a real-valued function of two arguments.booleanDetermine if an object is interned in a object namer's tables.doublevalueAt(double x, double y) Call the function.Methods inherited from class org.bzdev.devqsim.DefaultSimObject
getSimulation, printConfiguration, printStateMethods inherited from class org.bzdev.devqsim.SimObject
addSimulationListener, addTraceSet, bindCallable, bindCallable, bindCallable, bindCallable, bindRunnable, bindRunnable, bindRunnable, bindRunnable, callableObject, callableScript, callScriptFunction, callScriptMethod, clearTraceSets, evalScript, getEventListenerList, getScriptObject, getTraceSets, onDelete, printConfiguration, printConfiguration, printConfiguration, printConfiguration, printConfiguration, printConfiguration, printState, printState, printState, printState, printState, printState, putScriptObject, removeSimulationListener, removeTraceSet, runnableObject, runnableScript, scheduleCall, scheduleCall, scheduleCall, scheduleCall, scheduleCallObject, scheduleScript, scheduleTask, scheduleTask, scheduleTask, scheduleTask, scheduleTaskObject, scheduleTaskScript, startImmediateTask, startImmediateTask, trace, trace, unscheduledTaskThread, unscheduledTaskThread, update, update, usesTraceSetMethods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface org.bzdev.obnaming.NamedObjectOps
canDelete, delete, deletePending, getName, isDeleted, isInternedMethods inherited from interface org.bzdev.math.RealValuedFunctTwoOps
applyAsDouble, maxArgLength, minArgLength, valueAt
-
Constructor Details
-
SimFunctionTwo
public SimFunctionTwo(Simulation sim, String name, boolean intern, Object fobj) throws IllegalArgumentException Constructor given a RealValuedFunctionTwo or a scripting-language-defined object. SimFunctionTwo objects can be looked up by name using the methods inSimulation.- Parameters:
sim- the simulationname- the name of the object; null for an automatically generated nameintern- true if the object can be looked up by using the methods inSimulation; false otherwise.fobj- the function specified as an instance of RealValuedFunctionTwo or a scripting-language-defined object; null to return a SimFunctionTwo such that getFunction() will return null- Throws:
IllegalArgumentException- typically means a name is already in use- See Also:
-
SimFunctionTwo
public SimFunctionTwo(Simulation sim, String name, boolean intern, RealValuedFunctTwoOps f) throws IllegalArgumentException Constructor given a RealValuedFunctTwoOps object, which can be provided by a lambda expression. SimFunctionTwo objects can be looked up by name using the methods inSimulation.- Parameters:
sim- the simulationname- the name of the objectintern- true if the object can be looked up by using the methods inSimulation; false otherwise.f- the function providing this function's value; null to return a SimFunctionTwo such that getFunction() will return null- Throws:
IllegalArgumentException- typically means a name is already in use- See Also:
-
SimFunctionTwo
public SimFunctionTwo(Simulation sim, String name, boolean intern, RealValuedFunctTwoOps f, RealValuedFunctTwoOps f1, RealValuedFunctTwoOps f2) throws IllegalArgumentException Constructor given RealValuedFunctTwoOps objects, which can be provided by lambda expressions, to specify a function and its first partial derivatives. SimFunctionTwo objects can be looked up by name using the methods inSimulation. If the arguments f, f1, and f2 are all null,getFunction()will return null.- Parameters:
sim- the simulationname- the name of the objectintern- true if the object can be looked up by using the methods inSimulation; false otherwise.f- the function providing this function's value; null if a value cannot be computedf1- a function providing this function's partial derivative ∂f/∂x1; null if a value cannot be computedf2- a function providing this function's partial derivative ∂f/∂x2; null if a value cannot be computed- Throws:
IllegalArgumentException- typically means a name is already in use- See Also:
-
SimFunctionTwo
public SimFunctionTwo(Simulation sim, String name, boolean intern, RealValuedFunctTwoOps f, RealValuedFunctTwoOps f1, RealValuedFunctTwoOps f2, RealValuedFunctTwoOps f11, RealValuedFunctTwoOps f12, RealValuedFunctTwoOps f21, RealValuedFunctTwoOps f22) throws IllegalArgumentException Constructor given RealValuedFunctTwoOps objects, which can be provided by lambda expressions, to specify a function and its first and second partial derivatives. SimFunctionTwo objects can be looked up by name using the methods inSimulation. If the arguments f, f1, f2, f11, f12, f21, and f22 are all null,getFunction()will return null.- Parameters:
sim- the simulationname- the name of the objectintern- true if the object can be looked up by using the methods inSimulation; false otherwise.f- the function providing this function's value; null if a value cannot be computedf1- a function providing this function's partial derivative ∂f/∂x1; null if a value cannot be computedf2- a function providing this function's partial derivative ∂f/∂x2; null if a value cannot be computedf11- a function providing this function's partial derivative (∂2;f)/(∂x12); null if a value cannot be computedf12- a function providing this function's partial derivative (∂2;f)/(∂x1∂x2); null if a value cannot be computedf21- a function providing this function's partial derivative (∂2;f)/(∂x2∂x1); null if a value cannot be computedf22- a function providing this function's partial derivative (∂2;f)/(∂x22); null if a value cannot be computed- Throws:
IllegalArgumentException- typically means a name is already in use- See Also:
-
SimFunctionTwo
public SimFunctionTwo(Simulation sim, String name, boolean intern, String fname, String f1name, String f2name, String f11name, String f12name, String f21name, String f22name) throws IllegalArgumentException Constructor given the names of scripting-language-defined functions that will implement a function and its first and second derivatives. SimFunctionTwo objects can be looked up by name using the methods inSimulation.- Parameters:
sim- the simulationname- the name of the objectintern- true if the object can be looked up by using the methods inSimulation; false otherwise.fname- the name of the scripting-language-defined function giving the value of this functionf1name- the name of the scripting-language-defined function giving the partial derivative ∂f / ∂x1 for the function f(x1x2) defined by this object; null if the derivative is not provided.f2name- the name of the scripting-language-defined function giving the partial derivative ∂f / ∂x2 for the function f(x1x2) defined by this object; null if the derivative is not provided.f11name- the name of the scripting-language-defined function giving the partial derivative ∂2f / ∂x12 for the function f(x1x2) defined by this object; null if the derivative is not provided.f12name- the name of the scripting-language-defined function giving the partial derivative ∂2f / (∂x1∂x2) for the function f(x1x2) defined by this object; null if the derivative is not provided.f21name- the name of the scripting-language-defined function giving the partial derivative ∂2f / (∂x2∂x1) for the function f(x1x2) defined by this object; null if the derivative is not provided.f22name- the name of the scripting-language-defined function giving the partial derivative ∂2f / ∂x22 for the function f(x1x2) defined by this object; null if the derivative is not provided- Throws:
IllegalArgumentException- typically means a name is already in use- See Also:
-
-
Method Details
-
getFunction
Description copied from interface:NamedFunctionTwoOpsGet the RealValuedFunctionTwo associated with this named object.- Specified by:
getFunctionin interfaceNamedFunctionTwoOps- Returns:
- the function; null if not defined
-
getDomainMin1
public double getDomainMin1()Description copied from interface:NamedFunctionTwoOpsGet the minimum value of the first argument in the domain of the function.- Specified by:
getDomainMin1in interfaceNamedFunctionTwoOps- Returns:
- the minimum value
-
domainMin1Closed
public boolean domainMin1Closed()Description copied from interface:NamedFunctionTwoOpsDetermine if the domain minimum for the first argument is in the domain.- Specified by:
domainMin1Closedin interfaceNamedFunctionTwoOps- Returns:
- true if the domain minimum is in the domain; false otherwise
-
getDomainMax1
public double getDomainMax1()Description copied from interface:NamedFunctionTwoOpsGet the maximum value of the first argument in the domain of the function.- Specified by:
getDomainMax1in interfaceNamedFunctionTwoOps- Returns:
- the maximum value
-
domainMax1Closed
public boolean domainMax1Closed()Description copied from interface:NamedFunctionTwoOpsDetermine if the domain maximum for the first argument is in the domain.- Specified by:
domainMax1Closedin interfaceNamedFunctionTwoOps- Returns:
- true if the domain maximum is in the domain; false otherwise
-
getDomainMin2
public double getDomainMin2()Description copied from interface:NamedFunctionTwoOpsGet the minimum value of the second argument in the domain of the function.- Specified by:
getDomainMin2in interfaceNamedFunctionTwoOps- Returns:
- the minimum value
-
domainMin2Closed
public boolean domainMin2Closed()Description copied from interface:NamedFunctionTwoOpsDetermine if the domain minumum for the second argument is in the domain.- Specified by:
domainMin2Closedin interfaceNamedFunctionTwoOps- Returns:
- true if the domain minimum is in the domain; false otherwise
-
getDomainMax2
public double getDomainMax2()Description copied from interface:NamedFunctionTwoOpsGet the maximum value of the second argument in the domain of the function.- Specified by:
getDomainMax2in interfaceNamedFunctionTwoOps- Returns:
- the maximum value
-
domainMax2Closed
public boolean domainMax2Closed()Description copied from interface:NamedFunctionTwoOpsDetermine if the domain maximum for the second argument is in the domain.- Specified by:
domainMax2Closedin interfaceNamedFunctionTwoOps- Returns:
- true if the domain maximum is in the domain; false otherwise
-
isInDomain
Description copied from interface:NamedFunctionTwoOpsDetermine if a point (x, y) is within the domain of a real-valued function of two arguments.- Specified by:
isInDomainin interfaceNamedFunctionTwoOps- Parameters:
x- the 1st argumenty- the 2nd argument- Returns:
- true if the point (x, y) is in this function's domain; false otherwise
- Throws:
UnsupportedOperationException- domain membership could not be determined.
-
valueAt
public double valueAt(double x, double y) throws IllegalArgumentException, UnsupportedOperationException Description copied from interface:NamedFunctionTwoOpsCall the function.- Specified by:
valueAtin interfaceNamedFunctionTwoOps- Specified by:
valueAtin interfaceRealValuedFunctTwoOps- Parameters:
x- the function's first argumenty- the function's second argument- Returns:
- the value of the function for the given argument
- Throws:
IllegalArgumentException- the function's argument was out of rangeUnsupportedOperationException- the operation is not supported.
-
deriv1At
public double deriv1At(double x, double y) throws IllegalArgumentException, UnsupportedOperationException Description copied from interface:NamedFunctionTwoOpsEvaluate the partial derivative $\frac{\partial f}{\partial x_1}$ for the function f(x1,x2) defined by this object.- Specified by:
deriv1Atin interfaceNamedFunctionTwoOps- Parameters:
x- the function's first argumenty- the function's second argument- Returns:
- the value of the partial derivative for the given argument
- Throws:
IllegalArgumentException- the function's argument(s) were out of rangeUnsupportedOperationException- the operation is not supported.
-
deriv2At
public double deriv2At(double x, double y) throws IllegalArgumentException, UnsupportedOperationException Description copied from interface:NamedFunctionTwoOpsEvaluate the partial derivative $\frac{\partial f}{\partial x_2}$ for the function f(x1,x2) defined by this object.- Specified by:
deriv2Atin interfaceNamedFunctionTwoOps- Parameters:
x- the function's first argumenty- the function's second argument- Returns:
- the value of the partial derivative for the given argument
- Throws:
IllegalArgumentException- the function's argument(s) were out of rangeUnsupportedOperationException- the operation is not supported.
-
deriv11At
public double deriv11At(double x, double y) throws IllegalArgumentException, UnsupportedOperationException Description copied from interface:NamedFunctionTwoOpsEvaluate the partial derivative $\frac{\partial^2 f}{\partial x_1^2}$ for the function f(x1,x2) defined by this object.- Specified by:
deriv11Atin interfaceNamedFunctionTwoOps- Parameters:
x- the function's first argumenty- the function's second argument- Returns:
- the value of the partial derivative for the given argument
- Throws:
IllegalArgumentException- the function's argument(s) were out of rangeUnsupportedOperationException- the operation is not supported.
-
deriv12At
public double deriv12At(double x, double y) throws IllegalArgumentException, UnsupportedOperationException Description copied from interface:NamedFunctionTwoOpsEvaluate the partial derivative $\frac{\partial^2 f}{\partial x_1 \partial x_2}$ for the function f(x1,x2) defined by this object.- Specified by:
deriv12Atin interfaceNamedFunctionTwoOps- Parameters:
x- the function's first argumenty- the function's second argument- Returns:
- the value of the partial derivative for the given argument
- Throws:
IllegalArgumentException- the function's argument(s) were out of rangeUnsupportedOperationException- the operation is not supported.
-
deriv21At
public double deriv21At(double x, double y) throws IllegalArgumentException, UnsupportedOperationException Description copied from interface:NamedFunctionTwoOpsEvaluate the partial derivative $\frac{\partial^2 f}{\partial x_2 \partial x_1}$ for the function f(x1,x2) defined by this object.- Specified by:
deriv21Atin interfaceNamedFunctionTwoOps- Parameters:
x- the function's first argumenty- the function's second argument- Returns:
- the value of the partial derivative for the given argument
- Throws:
IllegalArgumentException- the function's argument(s) were out of rangeUnsupportedOperationException- the operation is not supported.
-
deriv22At
public double deriv22At(double x, double y) throws IllegalArgumentException, UnsupportedOperationException Description copied from interface:NamedFunctionTwoOpsEvaluate the partial derivative $\frac{\partial^2 f}{\partial x_2^2}$ for the function f(x1,x2) defined by this object.- Specified by:
deriv22Atin interfaceNamedFunctionTwoOps- Parameters:
x- the function's first argumenty- the function's second argument- Returns:
- the value of the partial derivative for the given argument
- Throws:
IllegalArgumentException- the function's argument(s) were out of rangeUnsupportedOperationException- the operation is not supported.
-
clone
Creates and returns a copy of this object. This method will throw the exception CloneNotSupportedException if the object is interned.- Overrides:
clonein classObject- Throws:
CloneNotSupportedException- a clone could not be created- See Also:
-
isInterned
public boolean isInterned()Determine if an object is interned in a object namer's tables.- Specified by:
isInternedin interfaceNamedObjectOps- Returns:
- true if the object is interned; false if not
-
getObjectNamer
Get the object namer for a named object.- Returns:
- the object namer for this named object
-
getName
Get an object's name.- Specified by:
getNamein interfaceNamedObjectOps- Returns:
- the name of the object
-
canDelete
public boolean canDelete()Determine if this named object can be deleted. A named object can be deleted if the method delete has not been called and if the object is not in a state that prevents the object from being deleted. Subclasses that override this method must call canDelete() for their superclasses and return false if the superclass' canDelete method returns false. The default method returns true if delete() has not been called and returned true.- Specified by:
canDeletein interfaceNamedObjectOps- Returns:
- true if this object can be deleted; false otherwise
-
delete
public final boolean delete()Delete an object. An object can only be deleted once. If this method returns true, the object (if interned) will have been removed from the object namer tables.The implementations provided by
DefaultNamedObectand generated because of a@NamedObjectannotation provide a protected method named onDelete. A subclass that overrides onDelete() must call the onDelete method of its superclass after it's onDelete method has been called and any cleanup actions performed. In some cases, this may happen at a later time (e.g., if a thread is used for some of the cleanup operations or if it is otherwise necessary to wait).- Specified by:
deletein interfaceNamedObjectOps- Returns:
- true if the deletion request was accepted; false otherwise
-
isDeleted
public final boolean isDeleted()Determine if an object has been deleted. An object is deleted if the method delete() has been called and returned true.- Specified by:
isDeletedin interfaceNamedObjectOps- Returns:
- true if deleted; false otherwise
-
deletePending
public final boolean deletePending()Determine if an object is being deleted. An deletion is pending if the method delete() has been called and returned true but the deletion has not been completed.- Specified by:
deletePendingin interfaceNamedObjectOps- Returns:
- true if deletion is pending; false otherwise
-