public class TransformQuadratic extends java.lang.Object implements Quadratic
[f(m+x)-data]'N[f(m+x)-data] + (m+x)'M(m+x)Linearization of
f(m+x) ~= f(m) + Fxmakes the function quadratic in x
[f(m)+Fx-data]'N[f(m)+Fx-data] + (m+x)'M(m+x)If only perturbations are damped, then the objective function is
[f(m)+Fx-data]'N[f(m)+Fx-data] + x'Mx
m is the reference model, and x is the perturbation. f(m) is the nonlinear forward transform. F is the linearized version of f(m) with respect to the reference model m N is the inverse covariance of the data and M is the inverse covariance of the model.The Hessian is given by
H = F'NF + M. b is determined by
b = -F' N [data - f(m)] + Mmfor full damping, or by
b = -F' N [data - f(m)]if only perturbations are damped.
Constructor and Description |
---|
TransformQuadratic(VectConst data,
VectConst referenceModel,
VectConst perturbModel,
Transform transform,
boolean dampOnlyPerturbation)
Wrap known data, reference mode, and transform
as a Gauss-Newton objectiveFunction.
|
Modifier and Type | Method and Description |
---|---|
void |
dispose()
Free up internal cached vectors
|
double |
evalFullObjectiveFunction(VectConst m)
Evaluate the full objective function without approximation.
|
Vect |
getB()
Return gradient term of quadratic.
|
int |
getTransposePrecision()
Run a few tests to ensure that transpose satisfies definition.
|
void |
inverseHessian(Vect x)
Multiply vector by an approximate inverse of the Hessian.
|
void |
multiplyHessian(Vect x)
Multiply by Hessian
H = F'NF + M |
public TransformQuadratic(VectConst data, VectConst referenceModel, VectConst perturbModel, Transform transform, boolean dampOnlyPerturbation)
referenceModel
- This is the reference model
m in the objective function.perturbModel
- If non-null, then use instances
of this vector to perturb the reference model.
It must be possible to project the referenceModel
and perturbModel into each other.data
- The data to be fit.transform
- Optimize with this transformdampOnlyPerturbation
- If true then use objective function
[f(m)+Fx-data]'N[f(m)+Fx-data] + x'Mx
public int getTransposePrecision()
public void multiplyHessian(Vect x)
H = F'NF + M
multiplyHessian
in interface Quadratic
x
- Vector to be multiplied and modifiedpublic void inverseHessian(Vect x)
Quadratic
inverseHessian
in interface Quadratic
x
- Vector to be multiplied and modified.public Vect getB()
public double evalFullObjectiveFunction(VectConst m)
[f(m)-data]'N[f(m)-data] + (m-m0)'M(m-m0)where m0 is the reference model. Otherwise evaluates
[f(m)-data]'N[f(m)-data] + m'M m
m
- Model to be evaluated.public void dispose()