Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -53,13 +53,30 @@ public class RealTransformFiniteDerivatives extends AbstractDifferentiableRealTr

protected double step;

private int ndims;
private double[] p;
private double[] q;
private double[] qc;
private double[][] newjac;

public RealTransformFiniteDerivatives( final RealTransform transform )
{
this( transform, 0.01);
}

public RealTransformFiniteDerivatives( final RealTransform transform, double step )
{
this.transform = transform;
int srcD = transform.numSourceDimensions();
int tgtD = transform.numTargetDimensions();
jacobian = new AffineTransform( srcD > tgtD ? srcD : tgtD );
step = 0.01;
this.step = step;

ndims = numSourceDimensions();
p = new double[ ndims ];
q = new double[ ndims ];
qc = new double[ ndims ];
newjac = new double[ ndims ][ ndims+1 ];
}

public void setStep( double step )
Expand Down Expand Up @@ -89,7 +106,7 @@ public void apply( RealLocalizable source, RealPositionable target )

public RealTransformFiniteDerivatives copy()
{
return new RealTransformFiniteDerivatives( transform.copy() );
return new RealTransformFiniteDerivatives( transform.copy(), step );
}

/**
Expand All @@ -102,15 +119,7 @@ public RealTransformFiniteDerivatives copy()
*/
public AffineTransform jacobian( double[] x )
{
int ndims = numSourceDimensions();
double[] p = new double[ ndims ];
double[] q = new double[ ndims ];
double[] qc = new double[ ndims ];

double[][] newjac = new double[ ndims ][ ndims+1 ];

transform.apply( x, qc );

for ( int i = 0; i < ndims; i++ )
{
for ( int j = 0; j < ndims; j++ )
Expand All @@ -127,7 +136,6 @@ public AffineTransform jacobian( double[] x )
}
}
jacobian.set( newjac );

return jacobian;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,15 +49,31 @@ public class WrappedIterativeInvertibleRealTransform< T extends RealTransform >

public WrappedIterativeInvertibleRealTransform( final T xfm )
{
this.forwardTransform = xfm;
this(xfm, 0.01);
}

/**
* WrappedIterativeInvertibleRealTransform constructor. Wrapps the given
* transform with a {@link RealTransformFiniteDerivatives} if needed, using
* the provided step.
*
* @param xfm
* transformation to wrap
* @param finiteDerivativeStep
* step size for finite derivatives if needed
*/
public WrappedIterativeInvertibleRealTransform( final T xfm, double finiteDerivativeStep )
{
this.forwardTransform = xfm;
if( xfm instanceof DifferentiableRealTransform )
{
differentiableTransform = (DifferentiableRealTransform) xfm;
}
else
{
differentiableTransform = new RealTransformFiniteDerivatives( xfm );
final RealTransformFiniteDerivatives tformFinite = new RealTransformFiniteDerivatives( xfm );
tformFinite.setStep(finiteDerivativeStep);
differentiableTransform = tformFinite;
}

inverseTransform = new InverseRealTransformGradientDescent( xfm.numSourceDimensions(), differentiableTransform );
Expand Down
Loading