public InverseRealTransformGradientDescent( int ndims, DifferentiableRealTransform xfm ) { this.ndims = ndims; this.xfm = xfm; dir = new double[ ndims ]; errorV = new double[ ndims ]; directionalDeriv = new double[ ndims ]; descentDirectionMag = 0.0; jacobian = new AffineTransform( ndims ); // src = new double[ ndims ]; // tgt = new double[ ndims ]; target = new double[ ndims ]; estimate = new double[ ndims ]; estimateXfm = new double[ ndims ]; }
@Override public AffineTransform copy() { final AffineTransform copy = new AffineTransform( n ); copy.set( this ); return copy; }
public AffineTransform( final int n ) { super( n ); inverse = new AffineTransform( this ); invert(); inverse.updateDs(); }
protected AffineTransform( final Matrix a, final double[] t ) { super( a, t ); inverse = new AffineTransform( this ); invert(); inverse.updateDs(); }
public RealTransformFiniteDerivatives( final RealTransform transform ) { this.transform = transform; int srcD = transform.numSourceDimensions(); int tgtD = transform.numTargetDimensions(); jacobian = new AffineTransform( srcD > tgtD ? srcD : tgtD ); step = 0.01; }
public AffineTransform( final Matrix matrix ) { super( matrix ); inverse = new AffineTransform( this ); invert(); inverse.updateDs(); }
public AffineTransform jacobian( final double[] x ) { double[][] jac = tps.jacobian( x ); double[] jflat = new double[ x.length * ( x.length + 1 ) ]; int k = 0; for( int i = 0; i< x.length; i++ ) for( int j = 0; j< (x.length +1); j++ ) if( j < x.length ) jflat[k++] = jac[i][j]; else k++; jacobian = new AffineTransform( x.length ); jacobian.set( jflat ); return jacobian; }
public static AffineTransform matrixTranspose( final AffineTransform a ) { int nd = a.numDimensions(); final AffineTransform aT = new AffineTransform( nd ); double[][] mtx = new double[ nd ][ nd + 1 ]; for ( int i = 0; i < nd; i++ ) for ( int j = 0; j < nd; j++ ) mtx[ j ][ i ] = a.get( i, j ); aT.set( mtx ); return aT; }
public static void scaleTransform( final AffineTransform3D t, final double[] factors ) { final AffineTransform at = new AffineTransform(t.numDimensions()); for (int d = 0; d < at.numDimensions(); d++) at.set( factors[d], d, d ); t.preConcatenate( at ); }