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 TypeMethodDescriptionboolean
Determine if this named object can be deleted.protected Object
clone()
Creates and returns a copy of this object.final boolean
delete()
Delete an object.final boolean
Determine if an object is being deleted.double
deriv11At
(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.double
deriv12At
(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.double
deriv1At
(double x, double y) Evaluate the partial derivative $\frac{\partial f}{\partial x_1}$ for the function f(x1,x2) defined by this object.double
deriv21At
(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.double
deriv22At
(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.double
deriv2At
(double x, double y) Evaluate the partial derivative $\frac{\partial f}{\partial x_2}$ for the function f(x1,x2) defined by this object.boolean
Determine if the domain maximum for the first argument is in the domain.boolean
Determine if the domain maximum for the second argument is in the domain.boolean
Determine if the domain minimum for the first argument is in the domain.boolean
Determine if the domain minumum for the second argument is in the domain.double
Get the maximum value of the first argument in the domain of the function.double
Get the maximum value of the second argument in the domain of the function.double
Get the minimum value of the first argument in the domain of the function.double
Get the minimum value of the second argument in the domain of the function.Get the RealValuedFunctionTwo associated with this named object.final String
getName()
Get an object's name.protected Simulation
Get the object namer for a named object.final boolean
Determine if an object has been deleted.boolean
isInDomain
(double x, double y) Determine if a point (x, y) is within the domain of a real-valued function of two arguments.boolean
Determine if an object is interned in a object namer's tables.double
valueAt
(double x, double y) Call the function.Methods inherited from class org.bzdev.devqsim.DefaultSimObject
getSimulation, printConfiguration, printState
Methods 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, usesTraceSet
Methods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Methods inherited from interface org.bzdev.obnaming.NamedObjectOps
canDelete, delete, deletePending, getName, isDeleted, isInterned
Methods 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:NamedFunctionTwoOps
Get the RealValuedFunctionTwo associated with this named object.- Specified by:
getFunction
in interfaceNamedFunctionTwoOps
- Returns:
- the function; null if not defined
-
getDomainMin1
public double getDomainMin1()Description copied from interface:NamedFunctionTwoOps
Get the minimum value of the first argument in the domain of the function.- Specified by:
getDomainMin1
in interfaceNamedFunctionTwoOps
- Returns:
- the minimum value
-
domainMin1Closed
public boolean domainMin1Closed()Description copied from interface:NamedFunctionTwoOps
Determine if the domain minimum for the first argument is in the domain.- Specified by:
domainMin1Closed
in interfaceNamedFunctionTwoOps
- Returns:
- true if the domain minimum is in the domain; false otherwise
-
getDomainMax1
public double getDomainMax1()Description copied from interface:NamedFunctionTwoOps
Get the maximum value of the first argument in the domain of the function.- Specified by:
getDomainMax1
in interfaceNamedFunctionTwoOps
- Returns:
- the maximum value
-
domainMax1Closed
public boolean domainMax1Closed()Description copied from interface:NamedFunctionTwoOps
Determine if the domain maximum for the first argument is in the domain.- Specified by:
domainMax1Closed
in interfaceNamedFunctionTwoOps
- Returns:
- true if the domain maximum is in the domain; false otherwise
-
getDomainMin2
public double getDomainMin2()Description copied from interface:NamedFunctionTwoOps
Get the minimum value of the second argument in the domain of the function.- Specified by:
getDomainMin2
in interfaceNamedFunctionTwoOps
- Returns:
- the minimum value
-
domainMin2Closed
public boolean domainMin2Closed()Description copied from interface:NamedFunctionTwoOps
Determine if the domain minumum for the second argument is in the domain.- Specified by:
domainMin2Closed
in interfaceNamedFunctionTwoOps
- Returns:
- true if the domain minimum is in the domain; false otherwise
-
getDomainMax2
public double getDomainMax2()Description copied from interface:NamedFunctionTwoOps
Get the maximum value of the second argument in the domain of the function.- Specified by:
getDomainMax2
in interfaceNamedFunctionTwoOps
- Returns:
- the maximum value
-
domainMax2Closed
public boolean domainMax2Closed()Description copied from interface:NamedFunctionTwoOps
Determine if the domain maximum for the second argument is in the domain.- Specified by:
domainMax2Closed
in interfaceNamedFunctionTwoOps
- Returns:
- true if the domain maximum is in the domain; false otherwise
-
isInDomain
Description copied from interface:NamedFunctionTwoOps
Determine if a point (x, y) is within the domain of a real-valued function of two arguments.- Specified by:
isInDomain
in 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:NamedFunctionTwoOps
Call the function.- Specified by:
valueAt
in interfaceNamedFunctionTwoOps
- Specified by:
valueAt
in 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:NamedFunctionTwoOps
Evaluate the partial derivative $\frac{\partial f}{\partial x_1}$ for the function f(x1,x2) defined by this object.- Specified by:
deriv1At
in 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:NamedFunctionTwoOps
Evaluate the partial derivative $\frac{\partial f}{\partial x_2}$ for the function f(x1,x2) defined by this object.- Specified by:
deriv2At
in 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:NamedFunctionTwoOps
Evaluate the partial derivative $\frac{\partial^2 f}{\partial x_1^2}$ for the function f(x1,x2) defined by this object.- Specified by:
deriv11At
in 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:NamedFunctionTwoOps
Evaluate 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:
deriv12At
in 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:NamedFunctionTwoOps
Evaluate 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:
deriv21At
in 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:NamedFunctionTwoOps
Evaluate the partial derivative $\frac{\partial^2 f}{\partial x_2^2}$ for the function f(x1,x2) defined by this object.- Specified by:
deriv22At
in 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:
clone
in 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:
isInterned
in 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:
getName
in 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:
canDelete
in 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
DefaultNamedObect
and generated because of a@NamedObject
annotation 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:
delete
in 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:
isDeleted
in 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:
deletePending
in interfaceNamedObjectOps
- Returns:
- true if deletion is pending; false otherwise
-