LinearEquation.h
Classes
- LinearEquation -- defines a relationship between Domain and Range objects (full description)
Interface
- Public Members
- virtual ~LinearEquation()
- virtual Bool evaluate(Range & result, const LinearModel<Domain>& model) = 0
- virtual Bool residual(Domain & answer, const LinearModel<Domain> & model) = 0
- virtual Bool residual(Domain & answer, Float & chisq, const LinearModel<Domain> & model) = 0
- virtual Bool residual(Domain & answer, Float & chisq, Domain & mask, const LinearModel<Domain> & model) = 0
Review Status
- Date Reviewed:
- yyyy/mm/dd
Prerequisite
Etymology
LinearEquation was originally conceived for implementing linear
equations (like Ax=b) but was in hindsight found to be more general.
Synopsis
This abstract class defines the basic functions used for forward
modelling of measured data of "Range" data type. It defines the
functions used to transform a model, of "Domain" data type to predicted
data. It can also compare the predicted data with the measured data and
return residuals to classes derived from LinearModel which can then be
used to update the model.
Example
I'll pass this class into a subroutine as an actual instance of an
abstract class cannot be constructed.
void foo(LinearModel< Image<Float> > mod,
LinearEquation<Image<Float>, VisibilitySet>)
VisibilitySet predictedVisibility;
eqn.evaluate(predictedVisibility, mod);
Motivation
This class was originally conceived to be used in implementing
deconvolution algorithms. I would not be surprised if it found wider
applicability.
Template Type Argument Requirements (Domain)
I do not see any restrictions on the Domain class. Its up to the derived
class to handle the the appropriate Domain.
Template Type Argument Requirements (Range)
In order to calculate residuals it will probably be necessary for
subtraction to be defined on the Range class, as well as some way for
data in the Range data type to be converted back into the Domain data
type. However it is left up to the derived classes to implement this.
Thrown Exceptions
This is an interface class and does not contain any implementation (and
hence does not throw exceptions)
To Do
I expect that additional functions, other than evaluate() and those
derived from ResidualEquation will be necessary. I have yet to decide if
they should be defined in this class or derived classes.
Member Description
A virtual destructor may be necessary for use in derived classes.
virtual Bool evaluate(Range & result, const LinearModel<Domain>& model) = 0
This function evaluates the Equation for the specified model.
It returns False if the result could not be computed.
virtual Bool residual(Domain & answer, const LinearModel<Domain> & model) = 0
evaluate residual
virtual Bool residual(Domain & answer, Float & chisq, const LinearModel<Domain> & model) = 0
Same as above, but also calculates Chi^2
virtual Bool residual(Domain & answer, Float & chisq, Domain & mask, const LinearModel<Domain> & model) = 0
Same as above, but also calculates Chi^2
considering a mask